你如何调试PDF文件?

时间:2010-12-23 23:42:21

标签: debugging pdf

我多次以编程方式创建PDF,但可能存在问题,例如:某些特定的字母可能没有显示或我可能有编码问题等。

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

7 个答案:

答案 0 :(得分:11)

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

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

有些会让您编辑该树中的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很有帮助就是你需要的 last

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

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

答案 1 :(得分:6)

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

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

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

当然,为了在文本编辑器中理解它,可能很重要的是页面流不会被压缩,所以我建议你弄清楚如何指示你的软件不要压缩它们,或者找到之后再次解压缩它们的东西。

简而言之:

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

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

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

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

  5. 请使用the PDF reference

答案 2 :(得分:5)

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

答案 3 :(得分:4)

http://blog.didierstevens.com/programs/pdf-tools/http://podofo.sourceforge.net/about.html

怎么样?

有关PDF工具和库的列表 - http://en.wikipedia.org/wiki/List_of_PDF_software 您可以在那里找到符合您需求的其他工具。

答案 4 :(得分:1)

另一个工具是pdfstreamdumper
https://github.com/dzzie/pdfstreamdumper

实际上非常直观 用于分析javascript / as3代码等 已经内置了不少东西
(hexviewer / refactor(deobfucators)等)

答案 5 :(得分:1)

这是我通常在Linux中执行的操作:

  • 安装qpdf软件包并运行qpdf --qdf --object-streams=disable orig.pdf decoded.pdf。现在,您可以在文本编辑器中打开decoded.pdf并查看pdf源。

  • 我还在Linux上安装了PDFedit,该计算机有一个gui程序,可让您从舒适的图形界面中检查所有pdf结构。

答案 6 :(得分:0)

只需在某个文本编辑器中打开它即可。 PDF实际上是一个ASCII文件(它可以包含嵌入的二进制数据)。