【发布时间】:2010-12-23 23:42:20
【问题描述】:
很多时候我以编程方式创建 PDF,但它可能存在问题,例如某些特定的字母可能无法很好地显示,或者我可能有编码问题等。
有什么方法可以调试 PDF 吗?例如。看到它的详细结构了吗?
【问题讨论】:
很多时候我以编程方式创建 PDF,但它可能存在问题,例如某些特定的字母可能无法很好地显示,或者我可能有编码问题等。
有什么方法可以调试 PDF 吗?例如。看到它的详细结构了吗?
【问题讨论】:
这是我在 Linux 中通常做的事情:
安装 qpdf 包并运行 qpdf --qdf --object-streams=disable orig.pdf decoded.pdf 。现在您可以在文本编辑器中打开 decoded.pdf 并查看 pdf 源代码。
我还在 Linux 上安装了PDFedit,它有一个 gui 程序,可以让您从舒适的图形界面中检查所有 pdf 结构。 RUPS 是一个类似的应用程序,它们都可以在 Flathub 中使用(无论您的 Linux 发行版如何,都可以轻松安装):
https://flathub.org/apps/details/net.sourceforge.Pdfedit
https://flathub.org/apps/details/com.itextpdf.RUPS
【讨论】:
有许多免费工具可让您查看未压缩和解密的 PDF 内容(给定密码)。
我想到了用于 iText 的 RUPS(但我有偏见)。我不知道是否有 iTextSharp 等价物。它是一个带有 PDF 对象树视图(所有这些应用程序都有)的 GUI。
有些可以让您在该树中编辑 PDF,但数量不多。我相信 Windjack 的 PDF CanOpener 会(以及您期望从商业 Acrobat 插件获得的其他几个漂亮功能)。
在紧要关头, 可以工作...但不要尝试更改任何内容。 PDF 是一种二进制格式:字节偏移很重要。如果您的文本编辑器将 \n 更改为 \r\n(或尝试将其解释为 UTF-8、或、或、或),您的 PDF 将被严重损坏。不要那样做。
我最终做了很多搜索给定的对象编号来查找间接引用。查找单个数字引用总是很痛苦,因为“4 obj”出现在每十个对象(14、24、34、1234 等)的末尾。寻找“line-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 是没有意义的。 “相同”文件有太多不同的方式(对象顺序、字典键顺序、压缩级别等)。
【讨论】:
java -jar itext-rups-5.5.9-jar-with-dependencies.jar。
只需在一些文本编辑器中打开它。 PDF 实际上是一个 ASCII 文件(它可以包含嵌入的二进制数据)。
【讨论】:
好吧,我想调试一些我前几天使用 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”模式,因为语法密切相关)。
【讨论】:
http://blog.didierstevens.com/programs/pdf-tools/ 或 http://podofo.sourceforge.net/about.html 怎么样
有关 PDF 工具和库的列表 - http://en.wikipedia.org/wiki/List_of_PDF_software 您可能会在那里找到适合您需求的其他工具。
【讨论】:
另一个工具是 pdfstreamdumper
https://github.com/dzzie/pdfstreamdumper
它实际上非常直观
用于分析 javascript / as3 代码等
内置了很多东西
(hexviewer / 重构(反混淆器)等)
【讨论】:
您可以使用 CanOpener、PDFedit 或 Acrobat 等工具查看 PDF 的结构(我在 http://www.jpedal.org/PDFblog/2010/09/useful-pdf-tools-pdfedit/ 写了一篇关于该主题的博客文章)
【讨论】: