2013-06-03 50 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)); 
    } 
} 
相關問題