我多次以编程方式创建PDF,但可能存在问题,例如:某些特定的字母可能没有显示或我可能有编码问题等。
有没有办法调试PDF?例如。看到它的详细结构?
答案 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标准小得多的尺寸。)
当然,为了在文本编辑器中理解它,可能很重要的是页面流不会被压缩,所以我建议你弄清楚如何指示你的软件不要压缩它们,或者找到之后再次解压缩它们的东西。
简而言之:
不要使用Adobe [Acrobat] Reader(无论如何,直到您认为PDF是好的。)
请尝试指示您的软件不要压缩页面流。
使用文本编辑器查看PDF(最好设置为“PostScript”模式,因为语法密切相关)。
答案 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文件(它可以包含嵌入的二进制数据)。