使用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没有官方文档页面,但您可以在SO上找到一些答案。与其从字符串中的PDF中获取数据,不如尝试将其解析为XML,然后使用XPath获取所需数据。或者您可以使用Linq-to-XML。我猜PDF中的每个页面都有相同的格式,所以XML结构也可以有相同的形式。
这是一个使用iTextSharp的项目示例,这里有一个你可以使用的SDK(付费)taht,但如果你想免费,它是一个临时解决方案。