【问题标题】:How to decode PDF file and encode it back?如何解码PDF文件并将其编码回来?
【发布时间】:2020-12-20 16:42:36
【问题描述】:

我的总体目标是使一些 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 &gt; 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 命令 &gt; 不起作用,并且 shell 中的 stdout 也有问题。

我会尝试一些事情,但在这方面真的需要一些帮助!

【问题讨论】:

  • By "But now, it looks like this"你的意思是现在使用其他工具还是现在在这些新的pdf中?
  • 新工具输出一个包含这部分的txt文件。 Adobe Acrobat 无法理解和重新编码整个 txt 文件。我这样说是因为使用旧的解码软件,在手动更改后,我可以用 Adob​​e Acrobat 打开相关的 txt 文件来创建工作 pdf 文件。现在编辑我的帖子。
  • 所以看起来新工具的功能并不是为了重新编码 PDF 以供进一步使用,而只是为了调试目的。

标签: pdf adobe qpdf pdfparser


【解决方案1】:

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

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 或任何其他转换程序进一步处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-16
    • 1970-01-01
    • 2015-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多