如何将PDF二进制文件转换为ASCII/ANSI,以便在文本编辑器中查看?

11 pdf binaryfiles

大多数PDF在某些ASCII之间包含许多二进制外观部分.但是我记得还看过这样的PDF文件,其中大部分的二进制文件都没有,人们可以在文本编辑器中打开它们来研究它们的结构.

是否有将二进制PDF部分转换为ASCII/ANSI的技巧,工具或命令?(最好是"像啤酒一样自由",甚至"像在自由中一样自由")

Kur*_*fle 20

[更新2014-10-15]

使用Ghostscript

Ghostscript在其源代码库中有一个用PostScript编写的小实用程序.它被称为pdfinflt.ps.如果幸运的话,它可能已经在Ghostscript安装位置的"toolbin"子目录中沉睡.否则,请到这里:

现在通过Ghostscript解释器将其与您的目标输入PDF一起运行:

gswin32c.exe -- c:/path/to/pdfinflt.ps your-input.pdf deflated-output.pdf
Run Code Online (Sandbox Code Playgroud)

pdfinflt.ps将(尝试)展开所有"流"包含在使用下面的压缩过滤器/方法PDF: ,/FlateDecode,/LZWDecode,./ASCII85Decode/ASCIIHexDecode

它不会尝试删除/RunLengthDecode,/CCITTFaxDecode,/DCTDecode,/JBIG2Decode/JPXDecode.(压缩/二进制字体也将不变地传递到输出PDF中.)

如果您是一个冒险的心情,你可能不敢取消注释中禁用工具的线/RunLengthDecode,/DCTDecodeCCITTFaxDecode看它是否仍然适用?


运用 qpdf

将PDF转换为支持文本编辑器访问的内部格式的另一个有用工具是qpdf.它是一个"命令行程序,可以对PDF文件进行结构化,内容保留转换".

用法示例:

 qpdf                                  \
   --qdf                               \
   --object-streams=disable            \
     input-with-compressed-objects.pdf \
     output-with-expanded-objects.pdf
Run Code Online (Sandbox Code Playgroud)
  1. 交换机QDF强制执行的-mode 输出--qdf整齐地组织和重新排序对象.它添加了注释以跟踪原始对象ID和页面内容流.所有对象字典都被写入"标准化"标准格式,以便于解析.

  2. --object-streams=disable原因被压缩成另一个对象的流数据(否则不可识别)单个对象的提取.


运用 mutool

ArtifexGhostscript的创建者,在免费和开源软件许可证下提供另一种工具:MuPDF.

MuPDF附带一个命令行工具,mutool它还可以扩展压缩的PDF对象流:

 mutool        \
    clean      \
   -d          \
   -a          \
    input.pdf  \
    output.pdf \
    4,7,8,9
Run Code Online (Sandbox Code Playgroud)
  1. clean:重写PDF;
  2. -d:解压缩所有流;
  3. -a:ASCIIhex编码所有二进制流;
  4. 4,7,8,9:选择要包含的第4,7,8和9页output.pdf.

运用 pdftk

最后,以下是如何使用该pdtk工具解压缩PDF对象的流:

pdftk your-input.pdf cat output uncompressed-output.pdf uncompress
Run Code Online (Sandbox Code Playgroud)

请注意uncompress命令行中的最后一个单词.


选择你最喜欢的

以上所有工具均适用于Linux,Mac OSX,Unix和Windows.

我最喜欢的是QPDF大多数实际案例.

但是,您应该进行自己的实验并比较每个建议工具的(不同)输出.然后自己挑选.