我想知道如何查看和编辑 PDF 文件的代码?
通过查看,我不想看到二进制格式,所以我认为hexdump
可能不是我想要的。我试过了gedit
,但是没有编码方法可以用来解码PDF内容。
通过编辑,我想搜索/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被破坏,这是基于字节偏移的计算,只需更换Fit
由XYZ
字符串应该去罚款,但...)
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)