有没有用于 PHP 的 PDF 解析器?[已关闭]

2022-08-30 11:42:37

嗨,我知道几个用于php的PDF生成器(fpdf,dompdf等)我想知道的是关于解析器的。

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

有什么建议吗?


答案 1

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

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

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

一些有用的建议,如果你要自己写,我必须以艰难的方式学习:

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

否则,祝你好运...


答案 2

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


推荐