是否有PHP的PDF解析器?

时间:2009-08-09 18:43:47

标签: php pdf parsing

嗨,我知道几个PDF Generators for php(fpdf,dompdf等) 我想知道的是解析器。

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

有什么建议吗?

7 个答案:

答案 0 :(得分:29)

我之前写了一篇(针对类似的需求),我可以这样说:玩得开心。这是一项非常复杂的任务。 PDF specification很大且很笨重。有几种方法可以在其中存储文本。而且每个PDF生成器的工作方式都不同。因此,虽然像TFPDF或DOMPDF这样的东西创造了非常容易阅读的PDF(从机器的角度来看),Acrobat制作了一些非常地狱般的文档。

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

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

一些有用的建议,如果你要自己写,我必须学习很多方法:

  1. Adob​​e喜欢重新映射字体。因此,65字符可能不是A ...您需要找到一个地图对象,并根据其中的字符推断出它正在做什么。并且它是高效的,因为如果字符没有出现在该字体的文档中,它不包括它(如果您尝试以编程方式编辑PDF,这将使生活变得困难)......
  2. 尽可能将其写为摘要。为每个对象类型和每个本机类型(字符串,数字等)编写类。让这些课程为你解析。那里会有相当多的重复,但是当你意识到你需要为一种特定的类型调整一些东西时,你最终会保存自己...)
  3. 编写特定版本或两个PDF规范,并强制执行。检查版本号,如果它高于您的预期,请保释......并且不要试图“让它工作”。如果您想支持更新的版本,请从中分解规范并升级解析器。不要试图以自己的方式试错(这不好玩)......
  4. 祝你好运。我发现通常你不能相信长度参数来验证你解压缩的内容。有时(对于某些生成器)它运行良好...其他它是一个或多个字节。如果过滤器匹配,我只是尝试放气,然后强制长度......
  5. 测试长度时,请勿使用strlen。使用mb_strlen($string, '8bit'),因为它将补偿不同的字符集(并允许其他字符集中可能存在无效字符)。
  6. 否则,祝你好运......

答案 1 :(得分:17)

我使用PDFBox(http://pdfbox.apache.org/)。该软件基于Java并且与平台无关。它工作快速可靠。您可以通过exec或shell执行或通过PHP / Java-Bridge(http://php-java-bridge.sourceforge.net/

来使用它

答案 2 :(得分:3)

你看过xPDF了吗?那里有一个名为pdftotext的程序可以进行转换。您可以从PHP调用它,然后阅读PDF的文本版本。您需要能够从php运行exec()或system(),因此这可能不适用于所有托管解决方案。

此外,PHP site上有一些将PDF转换为文本的示例,尽管它非常粗糙。您可能还想尝试其中一些示例。在PHP page上,在phpt dot org上搜索luc。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

Zend_PdfZend Framework的一部分。他们的手册说明:

  

Zend_Pdf组件是PDF   (便携式文件格式)   操纵引擎。它可以加载,   创建,修改和保存文档。   因此它可以帮助任何PHP应用程序   通过动态创建PDF文档   修改现有文件或   从头开始创造新的。

答案 5 :(得分:0)

PDF可能实际上不是PDF中的表格,因为PDF会丢失这类信息......

答案 6 :(得分:0)

This 是PHP PDF解析器,它有两种版本:

  1. 免费版可以解析PDF格式PDF 1.5
  2. 商业插件可以解析任何PDF格式(最新版本为1.9)