2013-06-03 48 views
0

我正在使用ITextSharp尝试解析PDF我无法控制。它不使用AcroForm,但它使用复选框的图像。我可以自己查找并提取两个复选框图像(已选中或未选中),但我无法弄清楚如何获取这些图像的引用。如何找出哪些图像是PDF中的哪些图像?

如何找出每张图片被引用的次数以及引用的放置位置?

回答

1

我找到一种方式来获得我需要的东西通过IRenderListener,开始与此评论:http://3d.5341.com/list/27/1036159.html

public static void Main() 
{ 
    string inputStream = "whatever.pdf"; 

    PdfReader reader = new PdfReader(inputStream); 

    var parser = new PdfReaderContentParser(reader); 
    var imgScan = new FormListener(); 

    for (int i=1; i<=reader.NumberOfPages; ++i) 
     parser.ProcessContent(1, imgScan); 

    reader.Close(); 

    foreach (var r in imgScan.CheckBoxBoxes) 
    { 
     r.Dump(); 
    } 
} 

public class CheckboxBox 
{ 
    public CheckboxBox() 
    { 
     this.CheckboxStates = new List<bool>(); 
    } 

    public string Name { get;set; } 
    public List<bool> CheckboxStates {get;set;} 
} 

public class FormListener : IRenderListener 
{ 
    public List<CheckboxBox> CheckBoxBoxes { get;set;} 
    private CheckboxBox m_CurrentCheckboxBox { get;set;} 
    public FormListener() 
    { 
     this.CheckBoxBoxes = new List<CheckboxBox>(); 
     this.BeginNewBox(); 
    } 

    public void BeginTextBlock() {} 
    public void EndTextBlock() {} 

    private void BeginNewBox() 
    { 
     this.m_CurrentCheckboxBox = new CheckboxBox(); 
     this.CheckBoxBoxes.Add(this.m_CurrentCheckboxBox); 
    } 

    private bool IsNewBoxStarting(TextRenderInfo renderInfo) 
    { 
     return Regex.IsMatch(renderInfo.GetText(), @"\d+\."); 
    } 

    public void RenderText(TextRenderInfo renderInfo) { 
     if (this.IsNewBoxStarting(renderInfo)) 
      BeginNewBox(); 

     this.m_CurrentCheckboxBox.Name += renderInfo.GetText() + " "; 
    } 

    private bool GetCheckboxState(ImageRenderInfo renderInfo) 
    { 
     var n = renderInfo.GetRef().Number; 
     return n == 21; // MagicNumberOfYesCheckboxImage; 
    } 

    public void RenderImage(ImageRenderInfo renderInfo) 
    { 
     this.m_CurrentCheckboxBox.CheckboxStates.Add(this.GetCheckboxState(renderInfo)); 
    } 
} 
相关问题