簡體   English   中英

如何找出PDF中的圖像?

[英]How do I find out which images are where in a PDF?

我正在使用ITextSharp嘗試解析我無法控制的PDF。 它不使用AcroForm,但是使用復選框的圖像。 我可以找到並提取兩個復選框圖像本身(選中和未選中),但是我無法弄清楚如何獲得對這些圖像的引用。

我如何找出每個圖像被引用了多少次,以及該引用的放置位置?

我發現了一個辦法讓我需要通過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));
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM