如何查看和编辑 PDF 文件的代码

Tim*_*Tim 15 pdf

我想知道如何查看和编辑 PDF 文件的代码?

  1. 通过查看,我不想看到二进制格式,所以我认为hexdump可能不是我想要的。我试过了gedit,但是没有编码方法可以用来解码PDF内容。

  2. 通过编辑,我想搜索/Fit并将它们更改 /XYZ为例如 sed。但是我的命令sed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdf似乎没有像我预期的那样改变我的 PDF 的外观,尽管它没有报告任何错误。我想知道是否sed真的可以像处理纯文本一样处理 PDF 文件?

我的问题的上下文可以从这个问题中找到。我的操作系统是 Ubuntu 10.10。

Kur*_*fle 28

关于您的第一个问题(“查看源代码,但没有二进制文件”):您有几个选项可以解压缩附加到许多对象的内部二进制流。

我最喜欢的工具是QPDF,可在所有主要操作系统平台上使用。以下命令解压缩所有流和所有对象流:

 qpdf --qdf --object-streams=disable orig.pdf expanded.pdf
Run Code Online (Sandbox Code Playgroud)

现在您可以在任何文本编辑器中打开您的 PDF。(那里可能仍然有一些二进制 blob:例如,字体文件和 ICC 配置文件,这对 QPDF 扩展没有意义)。

重新压缩expanded.pdf编辑后再次,你可以运行:

 qpdf expanded.pdf orig2.pdf
Run Code Online (Sandbox Code Playgroud)

(手动编辑 PDF 时要小心!为了正确地执行此操作,您需要了解很多有关其内部语法的信息。一旦添加或删除单个字节,您就会收到来自 PDF 阅读器的错误消息,这些阅读器可能不再能够打开它,因为PDF文件内部的ToC被破坏,这是基于字节偏移的计算,只需更换FitXYZ字符串应该去罚款,但...)

  • 您还可以添加或删除文本。当对象流的长度发生变化时,可以使用 qpdf 中的“fix-qdf”程序重新计算字节偏移量。不过你还是要小心一点。见 http://qpdf.sourceforge.net/files/qpdf-manual.html#ref.qdf (2认同)
  • @KursPfeifle:我不会对你所知道的做出任何假设。答案指出,以这种方式编辑 PDF *需要*保留文件中对象的字节偏移量。但是,稍后使用“fix-qdf”纠正字节偏移时,可以更改字节偏移。因此,如果你想用不同长度的字符串替换字符串,这是可能的,但你需要使用“fix-qdf”工具。我想说,这是对答案的有用补充。 (2认同)

Gil*_*il' 10

您可以使用sed二进制文件(至少是 GNU sed;某些实现可能会遇到包含空字符或不以换行符结尾的文件的问题)。但是您使用的命令仅替换了/Fit每一行中第一次出现的,并且行在 PDF 文件中几乎没有意义。您需要替换所有出现的:

 sed s/\/Fit/\/XYZ/g
Run Code Online (Sandbox Code Playgroud)

/Fit如果后面没有单词成分(例如不替换/Fitness;我不知道您的文件是否包含/Fit会导致问题的出现),它会更健壮。这是一种方法:

perl -pe 's!/Fit\b!/XYZ!g'
Run Code Online (Sandbox Code Playgroud)