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

时间:2012-02-16 07:09:35

标签: c# pdf c#-4.0 itextsharp

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

我的要求是:

  1. 获取PDF文件的结构元素
  2. 处理每个是文本,图像,表格还是其他类型
  3. 例如,结构元素类似于以下内容:

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

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

    那么,是否可以使用iTextSharp获取此类信息?如果是的话,请赐教。否则,您能否建议一些其他能够满足此要求的工具?

    感谢所有人,

    Saravanan

1 个答案:

答案 0 :(得分:5)

我曾经有过这种需要。我使用了这个函数(来自Extract images using 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并处理来自它的各种数据。但我不确定你需要的“垂直性”部分。

希望它可以帮助你。