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

时间:2014-04-21 22:06:25

标签: c# .net pdf itextsharp

我尝试解析PDF documents,以便将某些值添加到现有数据库中。问题在于解析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实现。

1 个答案:

答案 0 :(得分:0)

iTextSharp没有官方文档页面,但你可以在SO上找到一些答案here。不是从String中获取PDF中的数据,而是尝试将其解析为XML,然后使用XPath获取所需的数据。或者您可以将Linq用于XML。我猜测PDF中的每个页面都具有相同的格式,因此XML结构也可以具有相同的格式。

以下是使用iTextSharp的项目示例,而here是您可以使用的SDK(付费),但如果您希望它免费,则它是一个临时解决方案。