你如何调试PDF文件?

Dre*_*ise 25 pdf debugging

很多时候我以编程方式创建PDF并且可能存在问题,例如某些特定字母可能没有很好地显示或者我可能有编码问题等.

有没有办法调试PDF?比如看它的详细结构?

Mar*_*rer 13

有许多免费工具可以让你看到PDF的内容,未压缩和解密(给定密码).

iText的RUPS让人想起(但我有偏见).我不知道有一个iTextSharp等价物.它是一个带有树形视图(所有这些应用程序都具有的)PDF对象的GUI.

有些可以让您在该树中编辑 PDF,但不是很多.我相信Windjack的PDF CanOpener(以及你期望从商业Acrobat插件中获得的其他几个漂亮的功能).

在紧要关头,<插入喜欢的文本编辑器>工作...但不要尝试改变任何东西.PDF是二进制格式:字节偏移很重要.如果您的文本编辑器将\n更改为\ r \n(或尝试将其解释为UTF-8,或,或,或),则PDF将会出现可怕的损坏.不要那样做.

我最终做了很多搜索给定的对象号来查找间接引用.查找单个数字引用始终是一种痛苦,因为"4 obj"出现在每四个对象(14,24,34,1234等)的末尾.正在寻找"第4行obj-end of line"的正则表达式搜索会很棒,但我通常会使用记事本,所以这样就出来了(反正我也不是一个正则表达式的人).

PS:即使有一个漂亮的Acrobat插件(不是开罐器,从后面回家),我仍然需要不时打开一个文本编辑器.

Acrobat会在加载PDF时进行更改(主要是为了解决问题),如果你想知道什么是真的,你需要以其他方式查看PDF.当您尝试调试损坏的PDF时,acrobat是您需要的最后一件事.

PPS:Acrobat在其高级 - >预检规范中也有一个漂亮的"pdf语法检查".它还检查各种PDF/*标准(PDF/X,PDF/A-1 [a和b]等),可访问性等.当你试图遵守时,它们是非常宝贵的.不是你要问的调试工具,但非常方便.

PPPS:"差异"两个PDF几乎是不可能的,没有编写自定义工具来为您完成.我写了一些东西,以可预测的顺序列出了所有页面(有大小)和字段(带有类型,标志等)并将其转储到文本文件中,因此我可以对文件进行区分...但直接区分两个PDF是毫无意义的."相同"文件有太多不同的方式(对象顺序,字典键顺序,压缩级别等).

  • 我正在https://github.com/itext/rups上查看RUPS(这是我可以在Mac上找到的少数几个选项之一),但它看起来更像是一个库,而不是一个独立的应用程序。(它不会在任何地方调用LicenseKey.loadLicenseFile()。)从您的描述来看,只要我拥有iText许可证,我认为它是独立的。我想念什么? (2认同)

Sam*_*amB 6

好吧,我想调试我前几天使用pdfLaTeX生成的一些PDF文件,我发现Adobe [Acrobat] Reader不是很有帮助,因为我生产的稍微无效的PDF会打开,好像没有问题,他们只是没能关闭.这使得TeX/View/Edit循环变得有点痛苦,因为在我再次使用TeX之前我必须终止整个Reader过程.

我使用Ghostscript取得了更好的结果.在我的情况下,这是通过GSview,因为我使用Windows; 如果我一直在使用Linux,我会使用gv代替.这不仅不会阻止我重新TeXing文件(即使它仍然打开),它足以产生难以理解的错误消息,而不是假装一切都没问题.这些让我有点眯眼,看到我在我的PDF代码中弄乱了什么,最后生成了这个tex.SE给出的答案.

如果我能够弄清楚如何告诉Ghostscript在错误消息中包含更多细节(那么,我可能会有,如果我看了很长时间的手册的正确部分,实际上)本来会很好,但它不是很难搞清楚什么我会通过与Ghostscript的错误信息,并与PDF比较搞砸了Adobe的PDF参考.(我链接到存档页面,因为PDF引用完全由Adobe制作,并且具有更高的印刷质量以及比主页上的PDF的ISO标准小得多的尺寸.)

当然,为了在文本编辑器中对它有任何意义,可能重要的是页面流不被压缩,所以我建议你弄清楚如何指示你的软件不要压缩它们,或找到一些东西然后再将它们解压缩.

简而言之:

  1. 不要使用Adobe [Acrobat] Reader(直到您认为PDF是好的,无论如何).

  2. 使用Ghostscript(通常通过GSviewgv).

  3. 请尝试指示您的软件不要压缩页面流.

  4. 使用文本编辑器查看PDF(最好设置为"PostScript"模式,因为语法密切相关).

  5. 请使用PDF参考.


mar*_*ens 5

您可以使用CanOpener,PDFedit或Acrobat等工具查看PDF的结构(我在http://www.jpedal.org/PDFblog/2010/09/useful-pdf-tools-pdfedit上写了一篇关于该主题的博客文章/)


Nel*_*son 5

这是我在 Linux 中通常做的事情: