【发布时间】:2014-06-06 01:47:16
【问题描述】:
我正在尝试解析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 实现。
【问题讨论】:
-
你会在 SO 上找到许多类似的问题,但我会重复我们给每个人的答案。 PDF 没有“标题”或“表格”或“页眉”或“页脚”。他们甚至没有“段落”或“句子”或“单词”。它们只是有字符、线条和图像,这些字符、线条和图像恰好位于与您期望的模式相匹配的位置。此外,无法保证 PDF 中的文本是从左到右、从上到下书写的。
LocationTextExtractionStrategy试图通过找出事物的逻辑顺序来为您解决这个问题。如果您提供示例 PDF,我们可以为您提供更多帮助。
标签: c# .net pdf itextsharp