获取 PDF 内容
Posted
技术标签:
【中文标题】获取 PDF 内容【英文标题】:Get PDF content 【发布时间】:2017-04-06 11:25:44 【问题描述】:我想阅读一些内容 pdf 文件。我刚刚开始,然后才进入我只想知道这样做的正确方法的东西。 在这种情况下,ItextSharp 阅读器可能会有所帮助,因此我使用以下方法将 pdf 转换为文本:
public static string pdfText(string path)
PdfReader reader = new PdfReader(path);
string text = string.Empty;
for(int page = 1; page <= reader.NumberOfPages; page++)
text += PdfTextExtractor.GetTextFromPage(reader,page);
reader.Close();
return text;
我仍然想知道这种方法是否可行,或者我是否应该将此 pdf 转换为 excel 然后阅读我想要的内容。
专业人士的想法将不胜感激。
【问题讨论】:
将 PDF 转换为 Excel 与您在此处所做的基本相同。但是,在特殊情况下您可能需要 OCR,因为并非所有 pdf 都包含文本。我不知道 PdfTextExtractor 是否正是这样做的。 就我而言,所有 pdf 都包含文本,我只需要一些内容。 我的意思是:即使它们包含人眼可读的文本,它也可能不会在 pdf 中表示为真实字符。但是,如果您确定 pdf 包含纯文本,我不明白为什么您的方法不正确,除了我会推荐StringBuilder
附加文本
【参考方案1】:
使用 iText,您还可以选择特定的策略来提取文本。但请记住,这始终是一个启发式过程。
Pdf 文档基本上只包含为查看者呈现文档所需的说明。所以没有“文本”的概念。更多类似“在位置 420、890 处绘制字符 A”。
为了使任何文本提取正常工作,它需要猜测两个字符何时足够接近以至于它们应该被连接,以及它们何时应该分开。
巧合的是,iText 这样做是基于正在使用的字体中单个空格字符的宽度。
请记住,还可能有 ActualText(这是一种隐藏在文档中的文本,仅用于提取。它可以让文档呈现像“œ”这样的字符(连字版本),它被提取为“oe”(非连字版本)。
根据您的输入文档,您可能需要研究 ITextExtractionStrategy 的不同实现。
【讨论】:
这不完全正确:PDF 可以包含纯文本(否则复制和粘贴在适用的 pdf 文档中不起作用)。他们甚至可以嵌入用于呈现包含文本的字体(也:部分)。但是,正如您所描述的,它们也可以仅包含导出为曲线的预渲染文本。所以说它始终是一个启发式过程是不正确的。这仅适用于文本导出为曲线的 pdf 文件。 复制/粘贴有效,因为查看器在重建文本时应用了与我描述的相同的启发式方法。当然,我只描述了最基本的情况。 我对这个答案感到非常困惑,不确定您是否知道自己在说什么。 PDF 查看器执行 OCR 以允许 复制和粘贴?哇...如果您是认真的,最好阅读 PDF 格式 我从未提到过 OCR。这是 pdf 文档中的指令示例 [", 17.1965, P, -18.7118, i, -9.35592, l, -9.35592, o, -17.2414, t, -9.35636, ", 17.1965, , 250] TJ 此指令以字体(由前面的命令指定)将字符放置在画布上。从这一点开始,应该清楚提取文本并不容易。 这只是包含文本的一种方式。以上是关于获取 PDF 内容的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery Checkbox 选择然后打开和/或打印存储在内容系统中的文档(获取 .pdf 文档的 html 链接)