0

我的总体目标是使一些 PDF 文件符合 PDF/A 标准以用于存档目的。它们不符合一项要求,即某些字形映射映射到 0,这是它们不应该的。

我通常的策略是使用一个名为“Pdfedit”的旧软件,它可以解码 PDF 文件,然后所有字节流都将是人类可读的,编辑包含字形映射的 PDF 的相关部分,然后用 Adob​​e 打开文件自动重新编码的 Acrobat。

现在我有一些 PDF 在打开时会导致“Pdfedit”崩溃。我尝试使用PDF-Parser,但 Adob​​e Acrobat 无法重新编码其输出。

此外,过去看起来像这样解码的相关部分:

/CMapType 2 def
 1 begincodespacerange
 <00><04>
 endcodespacerange
 5 beginbfchar
 <00><0000>
 <01><0000>
 <02><263A>
 <03><0000>
 <04><0000>
 endbfchar
 endcmap

但现在我使用以下命令python3 pdf-parser.py -f -n /path/to/file.pdf > dump.txt,在 dump.txt 中相关部分如下所示:

b'/CMapType 2 def\n1 begincodespacerange\n<00><04>\nendcodespacerange\n5 beginbfchar\n<00><0000>\n<01><0000>\n<02><263A>\n<03><0000>\n<04><0000>\nendbfchar\nendcmap\nCMapName currentdict/CMap defineresource pop end end'

所以它是一个字节串,任何换行符都按字面意思呈现为\n. Adobe Acrobat 无法将包含此内容的 txt 文件解释为 PDF。

我现在也意识到许多元素,例如由 .%%EOF分隔''

真正的问题是如何从 pdf-parser.py 获得 Acrobat 可读的输出,因为 shell 命令>不起作用并且 shell 中的 stdout 也有问题。

我会尝试一些事情,但可能真的需要一些帮助!

4

1 回答 1

0

回答我自己的问题,以防这与下线的人有关。

pdf 解析器背后的开发者 Didier Stevens 回答说他的工具不是为此而设计的。他推荐使用 qpdf。

这确实是解决方案。确保使用该标志--stream-data=uncompress,以便在输出中也可以访问压缩部分。与 qpdf 一起使用的命令是:

qpdf old_file.pdf --stream-data=uncompress --decode-level=all new_file.txt

您也可以将 new_file 输出为 .pdf。在任何情况下,您都可以在文本编辑器中打开它。完成应用您希望应用的更改后,您可以将结尾更改为 pdf 并使用 acrobat 或任何其他转换程序进一步处理。

于 2020-09-10T15:42:57.490 回答