从PDF提取文本的第一行

时间:2019-04-19 03:44:02

标签: c++ parsing pdf

我是C ++的新手,但不熟悉编程。我试图找到一个库,使我可以从PDF中提取文本,最好是从PDF的第一行中提取文本。库的代码示例将不胜感激。

我要这样做的原因是要根据PDF的第一行重命名几百个文件(恰好是每个文件的标题)。

2 个答案:

答案 0 :(得分:1)

这里的挑战是PDF非常类似于SVG或PostScript。放置和显示事物的顺序与其逻辑/阅读顺序没有任何关系。

作为一个非常棘手的示例,可以在页面上绘制所有“ a”,然后绘制所有“ b”,依此类推。

一个不那么严格的示例(我在实际的PDF中已经看到过)是一次绘制所有文本为给定字体,然后绘制下一个字体,依此类推。这比您想象的更具挑战性,因为斜体文本通常是不同的字体,粗体 粗斜体 < / strong>。如果要按哈希表或字母顺序遍历字体,则可以合理预期标题不是页面内容要绘制的第一个文本。

说了这么多,这已经解决了好几次了。

坏消息:这些解决方案都没有出现在第一个注释中链接的开放源代码库中……'也许是MuPDF,但是从他们的在线文档中看不出它们可以做到。

好消息:有几个命令行驱动的应用程序,非常有能力从PDF提取文本,所有这些都在SO PDF Text Extraction with Coordinates

的出色答案中进行了描述。

MuPDF的mutool被列为选项之一,因此使用MuPDF(由与GhostScript相同的公司制造)显然可以实现。

答案 1 :(得分:0)

您无需使用C ++即可实现; MuPDF随附的“ mutool”命令可以打印页面的文本内容。以下命令行会将PDF的第一页转换为纯文本。该转换会带来很多警告,但是对于大多数格式正确的PDF文件,此步骤应该可以正常工作。然后,将mutool的输出通过sed传递给管道,以仅打印第一行。

bin/magento setup:install --db-host=localhost --db-name=magento --db-user=magento --db-password=magento

当然,您也可以使用MuPDF C库执行此操作,但是为什么要浪费时间在简单的shell脚本可以完成工作的时候进行编码?

现在,您可以将其包装在脚本中以重命名文件。例如:

mutool draw -F text -o - input.pdf 1 | sed 1q