我尝试解析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中必须有可以找到标题/值对的类。或者至少以可读格式解析标题。我很乐意编写自己的ITextExtractionStrategy
实现。
答案 0 :(得分:0)
iTextSharp没有官方文档页面,但你可以在SO上找到一些答案here。不是从String中获取PDF中的数据,而是尝试将其解析为XML,然后使用XPath获取所需的数据。或者您可以将Linq用于XML。我猜测PDF中的每个页面都具有相同的格式,因此XML结构也可以具有相同的格式。
以下是使用iTextSharp的项目示例,而here是您可以使用的SDK(付费),但如果您希望它免费,则它是一个临时解决方案。