2009-08-09 59 views
40

嗨,我知道几个PDF 发电机为PHP(fpdf,dompdf等) 我想知道的是关于一个解析器。是否有PHP的解析器?

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

有什么建议吗?

+2

我可以给予我们一个关于如何提取PDF文本的实例的任何人的赏金。该解决方案必须使用免费库(无xPDF或PDF2Text)和独立平台(必须在win和unix上工作,因此不需要PDF2Text)。它可以使用PHP的exec()或shell()函数。 – 2ndkauboy 2010-08-31 11:50:46

+0

谢谢Kau-Boy。也许赏金将有助于激发更详细的答案。 – elviejo79 2010-09-01 04:39:58

回答

1

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

1

Zend_PdfZend Framework的一部分。其手册指出:

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

+0

+1 - Zend Framework组件可靠地按照他们所说的去做。 – karim79 2009-08-09 22:50:23

+5

我不相信你可以阅读使用Zend_Pdf的PDF文件中的文本 – 2010-03-18 14:14:03

+0

除了Zend_Pdf不支持PDF格式> 1.4 – 2013-05-09 01:12:28

0

它实际上可能没有为PDF失去那种信息的PDF里面的一张桌子......

3

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

另外,PHP site上有一些例子可以将PDF转换为文本,虽然它很粗糙。你也可以尝试一些这样的例子。在PHP page上,在phpt dot org处搜索luc。

+0

我根据您的建议尝试了xpdf,并且很惊讶它的工作原理 - 谢谢! – Tomba 2011-02-04 17:07:59

0

This是PHP PDF解析器,它存在于两种形式:

  1. 免费版本可以解析PDF文件多达格式PDF 1.5
  2. 商业插件能够解析任何PDF格式(最高电流1.9)
+0

该链接已死,但我认为这是它的一个分支:https://github.com/mark9000/FPDI – nullability 2013-09-24 18:47:46

29

我以前写过一个(对于类似的需求),我可以这样说:玩得开心。这是一项相当复杂的任务。 PDF specification是庞大而笨拙的。有几种存储文本的方法。最引人注目的是每个PDF生成器在工作方式上都有所不同。因此,虽然像TFPDF或DOMPDF这样的东西创建真正容易阅读PDF(从机器的角度来看),但Acrobat制作了一些非常地狱般的文档。

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

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

建议一些有用的作品,我有学习困难的方式,如果你要自己编写:

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

否则,好运...

+2

+1我甚至可以称之为噩梦。规范很大,一个PDF文件几乎类似于一个文件系统,在这个文件系统中有许多不同的选项和选择......你当然可以看到他们如何在那里隐藏破解破解能力。 – Rudu 2010-08-31 22:07:19

+2

您是否期望Adobe提供更少的内容? – bpeterson76 2010-09-02 15:49:16

+0

@ bpeterson76,是的..我不希望我的PDF可以下载:( – 2014-02-13 10:32:54

相关问题