是否可以使用iTextSharp从PDF文件中获取结构元素

本文关键字:获取 结构 元素 文件 PDF 可以使 iTextSharp 是否 | 更新日期: 2023-09-27 18:24:42

我们使用iTextSharp和C#WinForms应用程序来解析PDF文件。使用iTextSharp,我可以很容易地从PDF文件中提取文本数据。假设一个PDF文件包含一个由两行文本包围的图像。在这种情况下,我无法提取有关图像的信息。

我的要求是:

  1. 获取PDF文件的结构元素
  2. 处理每个是文本、图像、表格还是其他类型

例如,结构元素类似于以下内容:

text :paragraph1
text :paragraph2
Image:Image
text :paragraph3
Table:table info
text :Paragraph4

如果我能以这样的格式获取信息,我就能很容易地理解文本、图像、表格、页眉或页脚信息。

那么,使用iTextSharp是否可以获得此类信息?如果是,请启发我。否则,你能建议一些其他能够满足这一要求的工具吗?

感谢大家,

Saravanan

是否可以使用iTextSharp从PDF文件中获取结构元素

我以前也有这种需求。我使用了这个功能(来自使用iTextSharp提取图像):

private static PdfObject FindImageInPDFDictionary(PdfDictionary pg)
{
    PdfDictionary res =
        (PdfDictionary)PdfReader.GetPdfObject(pg.Get(PdfName.RESOURCES));

    PdfDictionary xobj =
      (PdfDictionary)PdfReader.GetPdfObject(res.Get(PdfName.XOBJECT));
    if (xobj != null)
    {
        foreach (PdfName name in xobj.Keys)
        {
            PdfObject obj = xobj.Get(name);
            if (obj.IsIndirect())
            {
                PdfDictionary tg = (PdfDictionary)PdfReader.GetPdfObject(obj);
                PdfName type =
                  (PdfName)PdfReader.GetPdfObject(tg.Get(PdfName.SUBTYPE));
                //image at the root of the pdf
                if (PdfName.IMAGE.Equals(type))
                {
                    return obj;
                }// image inside a form
                else if (PdfName.FORM.Equals(type))
                {
                    return FindImageInPDFDictionary(tg);
                } //image inside a group
                else if (PdfName.GROUP.Equals(type))
                {
                    return FindImageInPDFDictionary(tg);
                }
            }
        }
    }
    return null;
}

正如你在foreach (PdfName name in xobj.Keys)语句中看到的,我认为你可以很容易地解析整个PDF并处理其中的每一种数据。但我不确定你需要的"垂直性"部分。

希望它能帮助你。