我想知道如何查看和编辑PDF文件的代码?
通过查看,我不想看到二进制格式,所以我想
hexdump
可能不是我想要的。我尝试过gedit
,但没有可以使用编码方法来解码PDF内容。通过编辑,我想搜索
/Fit
并将它们更改为/XYZ
by 例如 sed。但我的命令sed s/\/Fit/\/XYZ/ < 1.pdf > 2.pdf
似乎没有像我预期的那样改变 PDF 的外观,尽管它没有报告任何错误。我想知道是否sed
可以像纯文本一样处理 PDF 文件?
我的问题的背景可以从这个问题。我的操作系统是 Ubuntu 10.10。
答案1
关于您的第一个问题(“查看源代码,但没有二进制文件”):您可以使用一些选项来解压缩附加到许多对象的内部二进制流。
我最喜欢的工具是量子PDF,可在所有主要操作系统平台上使用。以下命令解压所有流和所有对象流:
qpdf --qdf --object-streams=disable orig.pdf expanded.pdf
现在您可以在任何文本编辑器中打开 PDF。 (其中可能仍然存在一些二进制 blob:例如,字体文件和 ICC 配置文件,这对于 QPDF 扩展来说没有意义)。
到重新压缩再次expanded.pdf
编辑后,您可以运行:
qpdf expanded.pdf orig2.pdf
(手动编辑 PDF 时要小心!您需要了解很多有关其内部语法的知识才能正确执行此操作。一旦添加或删除单个字节,您可能会从 PDF 阅读器收到错误消息,他们可能无法再编辑打开它,因为 PDF 内部目录已损坏,这是基于字节偏移计算的,不过,只需Fit
用XYZ
字符串替换就可以了...)
答案2
您可以使用sed
二进制文件(至少是 GNU sed;某些实现可能会遇到包含空字符或不以换行符结尾的文件的问题)。但您使用的命令仅替换/Fit
每行中第一次出现的 ,并且行在 PDF 文件中几乎没有意义。您需要替换所有出现的情况:
sed s/\/Fit/\/XYZ/g
/Fit
如果它后面没有单词成分,则仅替换会更强大(例如不替换/Fitness
;我不知道您的文件是否包含/Fit
会导致麻烦的出现)。这是一种方法:
perl -pe 's!/Fit\b!/XYZ!g'
答案3
使用 LibreOffice 或 OpenOffice 打开 PDF、查看它、替换内容、编写新 PDF 等。我认为,如果有大量文档需要处理,您甚至可以通过命令行或以编程方式使用它。
请注意,PDF 来自一些源(例如扫描仪)通常将页面包含为图像而不是文本,因此您将无法使用它们进行搜索和替换。