首页 文章

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

提问于
浏览
18

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

我的要求是:

  • 获取PDF文件的结构元素

  • 处理每个是文本,图像,表格还是其他类型

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

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

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

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

谢谢大家,

Saravanan

1 回答

  • 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并处理来自它的各种数据 . 但我不确定你需要的部分 .

    希望它可以帮到你 .

相关问题