有没有PDFparsing器的PHP?

嗨,我知道几个PDF 生成器的PHP(FPD,DOMOMD等)我想知道的是关于一个parsing器。

由于我无法控制的原因,我需要的某些信息只能在pdf中的表格中,我需要提取该表格并将其转换为数组。

有什么build议么?

我曾经写过一个(类似的需求),我可以这样说:玩得开心。 这是一个相当复杂的任务。 PDF规范是庞大而笨拙的。 里面有几种存储文本的方法。 而且每个PDF生成器的工作原理都不相同。 所以,虽然像TFPDF或DOMPDF这样的东西创build真正容易阅读PDF(从机器的angular度来看),Acrobat使一些真正的地狱文件。

原因是它如何写文本。 大多数基于DOM的渲染器 – 我已经使用 – 将整行写成一个string,并将其定位一次(这非常容易阅读)。 Acrobat试图通过一次只写入一个或者几个字符来更高效地(并且是),并且独立地定位它们。 虽然这真的简化了渲染,但却使阅读变得更加困难。

这里的优点是PDF格式本身非常简单。 你有一些遵循常规语法的“对象”。 然后,您可以将它们链接在一起以生成内容。 该规范在描述文件格式方面做得很好。 但是现实世界的阅读需要一点脑力。

一些有用的build议,如果你要自己写:

  1. Adobe喜欢重新映射字体。 所以字符65可能不会是A …你需要find一个地图对象并根据其中的字符推断它正在做什么。 而且它是有效的,因为如果一个字符没有出现在该字体的文档中,它就不包含它(如果你试图以编程方式编辑PDF,这会使生活变得困难)。
  2. 写得尽可能抽象。 为每个对象types和每个本地types(string,数字等)编写类。 让这些类为你parsing。 在那里会有相当多的重复,但是当你意识到你只需要调整一个特定types的东西的时候,你就可以保存自己了)…
  3. 写一个特定的版本或两个PDF规范,并强制执行。 检查版本号,如果它高于预期,请保释…并且不要尝试“使其工作”。 如果你想支持更新的版本,请打破规范并从那里升级parsing器。 不要试图尝试错误的方式(这不好玩)…
  4. 祝你好运压缩的stream。 我发现通常你不能相信长度参数来validation你正在解压的东西。 有时(对于一些发电机)它运作良好…其他的一个或多个字节closures。 我只是试图放气,如果filter匹配,然后强制长度…
  5. testing长度时,不要使用strlen 。 使用mb_strlen($string, '8bit')因为它会补偿不同的字符集(并允许其他字符集中的潜在无效字符)。

否则,祝你好运…

我使用PDFBox( http://pdfbox.apache.org/ )。 这个软件是基于java的平台独立的。 它工作快速可靠。 您可以通过exec或shell执行或通过PHP / Java-Bridge( http://php-java-bridge.sourceforge.net/

你有没有看过xPDF ? 在那里有一个名为pdftotext的程序,将执行转换。 你可以从PHP调用它,然后阅读文本版本的PDF。 您将需要能够从PHP运行exec()或system(),所以这可能不适用于所有托pipe的解决scheme。

另外, PHP网站上有一些例子可以将PDF转换为文本,尽pipe它很粗糙。 你也可以尝试一些这样的例子。 在该PHP页面上 ,在phpt点组织searchluc。

看看GhostScript或者ITextSharp,都有各种各样的跨平台版本。

Zend_Pdf是Zend框架的一部分。 他们的手册指出:

Zend_Pdf组件是一个PDF(可移植文档格式)操作引擎。 它可以加载,创build,修改和保存文件。 因此,它可以帮助任何PHP应用程序通过修改现有文档或从头开始生成新文档来dynamic创buildPDF文档。

它可能实际上不是PDF中的表格,因为PDF丢失了那种信息…

是PHP PDF分析器,它存在两种风格:

  1. 免费版本可以parsingPDF格式的PDF 1.5格式
  2. 商业插件可以parsing任何PDF格式(最高1.9)