使用iTextSharp从PDF中提取整个文本

本文关键字:文本 提取 iTextSharp PDF 使用 | 更新日期: 2023-09-27 17:59:11

我正在尝试解析PDF文档,以便将某些值添加到现有数据库中。问题在于解析PDF。

第一次尝试

String[] AllPdf = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.pdf", SearchOption.TopDirectoryOnly);
        foreach (var pdfDoc in AllPdf)
        {
            using (PdfReader reader = new PdfReader(pdfDoc))
            {
                for (int page = 1; page <= reader.NumberOfPages; page++)
                {
                    ITextExtractionStrategy strategy = new LocationTextExtractionStrategy();
                    String text = PdfTextExtractor.GetTextFromPage(reader, page, strategy);
                }
                
            }
        }

但不幸的是,它只解析了标题(雇主、网站、语言等)之后的文本。我需要标题来创建一个类,该类将映射到数据库中的关系。

第二次尝试

String[] AllPdf = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.pdf", SearchOption.TopDirectoryOnly);
        foreach (var pdfDoc in AllPdf)
        {
            using (PdfReader reader = new PdfReader(pdfDoc))
            {
                for (int page = 1; page <= reader.NumberOfPages; page++)
                {
                    byte[] streamBytes = reader.GetPageContent(page);
                    PRTokeniser tokenizer = new PRTokeniser(new RandomAccessFileOrArray(new RandomAccessSourceFactory().CreateSource(streamBytes)));
                    while (tokenizer.NextToken())
                    {
                        if (tokenizer.TokenType == PRTokeniser.TokType.STRING)
                        {
                            String text = tokenizer.StringValue;
                        }
                    }
                }
                
            }
        }

幸运的是,这解析了缺失的标题,但它首先解析了它们(新行中的单词而不是单行中的单词),然后解析了值。

iTextSharp文档

iTextSharp中必须有可以找到标题/值对的类。或者至少以可读的格式解析标题。我很乐意编写我自己的ITextExtractionStrategy实现。

使用iTextSharp从PDF中提取整个文本

iTextSharp没有官方文档页面,但您可以在SO上找到一些答案。与其从字符串中的PDF中获取数据,不如尝试将其解析为XML,然后使用XPath获取所需数据。或者您可以使用Linq-to-XML。我猜PDF中的每个页面都有相同的格式,所以XML结构也可以有相同的形式。

这是一个使用iTextSharp的项目示例,这里有一个你可以使用的SDK(付费)taht,但如果你想免费,它是一个临时解决方案。