-1

我正在尝试学习 PDF 文件格式。

为此,我下载了 Adob​​e 的 PDF 规范文件,该文件非常庞大。

因此,为了帮助我研究 PDF 的细节,我想通过并行查看一些真实世界的 PDF 文件来遵循它的抽象解释。

例如,一个想法是创建一个 PDF 文件(使用 LaTeX),它只有一页,内容甚至只有一个字符,a.

但是当我在十六进制编辑器(或其他可以显示内部 PDF 结构的工具)中打开这个 PDF 文件时,这个 PDF 中有很多二进制或压缩内容。有关我所看到的示例,请查看下面的屏幕截图:

十六进制编辑器打开我的 PDF 的屏幕截图

我根本无法确定这个二进制文件的哪一部分代表了我a在这个 PDF 中的角色。

到目前为止,我尝试过的所有真实世界的 PDF 文件都会发生同样的情况。我根本找不到任何包含工作示例代码的 PDF 文件来帮助我理解通用 PDF 语言规范。

  • 我希望其他人向我解释:有没有一种实用的方法来研究 PDF 规范,同时用真实的 PDF 文件验证它的点点滴滴?

  • 我想知道:PDF 程序员常用哪些软件工具可以帮助像我这样的新手开发人员剖析和解压缩现有的二进制 PDF 文件,以便可以使用简单的文本编辑器研究其源代码?(注意:我不是在寻求建议。根据 SO FAQ,我只想知道这些工具是否存在,以及它们有哪些名称。)

  • 是否有不包含二进制和/或压缩内容的免费 PDF 文件资源?或者我如何创建自己的示例文件?

  • 是否有(最好是免费的)PDF 编辑器/解析器可以可视化 + 剖析 PDF 文件的原始二进制数据并公开它们的结构?

我只需要第一个钩子。如果您愿意的话,是通往真实世界 PDF 文件丛林中狭窄路径的入口点,然后我可以沿着这条路走……同时使用名为“PDF 规范”的丛林探险者的帮助。

4

4 回答 4

6

iText (用于创建和操作 PDF 的 Java/C# 库)的创建者发布了一个名为RUPS的工具。

从 sourceforge 页面:

RUPS 是阅读和更新 PDF 语法的缩写。RUPS 是基于 iText® 构建的工具,可让您查看 PDF 文档内部并浏览不同的 PDF 对象和内容流。(尚无法更新 PDF。)

于 2012-09-27T12:07:52.680 回答
5

我建议使用PDF Vole(基于 iText 的工具,类似于RUPS)查看一些文件。

PDF Vole 和 RUPS 都允许您浏览 PDF 文件的结构,检查每个对象上的条目,解压缩压缩流,在需要时解密文件,查看页面和注释的内容,并追踪它们之间的关系文件中的对象。

例如这个文件:
PDF 样本

在 PDF Vole 中看起来像这样:
PDF田鼠捕捉

您还可以查看 iText 本身的类层次结构(与 PDF 规范几乎是一对一的)以及解释它的书iText in Action

于 2012-09-27T13:41:58.177 回答
5

我帮助自己学习 PDF 语法的方式是这样的:

  • 寻找可以解压缩 PDF(解压缩内部流)的工具。

  • 发现qpdf,Jay Birkenbilt 的命令行工具被描述为:“对 PDF 文件进行结构性、内容保留的转换”

  • 例行运行qpdf --qdf input.pdf decompressed-input.pdf

  • decompressed-input.pdf在文本编辑器中打开新创建的。

--qdf工具的模式以一种非常有用的方式转换 PDF 的二进制和 ASCII 元素,而不会改变它们的视觉页面外观(而且速度非常快):

  1. 解压之前压缩过的对象(暴露页面元素绘制操作的PDF语言源代码)。

  2. 同时展开对象流 ( ObjStrm)。

  3. 规范化数组、字符串等的表示。

  4. 重新编号对象,以便它们从文件开始1 0 obj,然后在文件中按升序显示它们。

  5. 修复 b0rkenxref条目。

  6. 在原始文件中添加包含对象原始身份的注释。

  7. 为每个页面添加评论。

  8. ……还有更多。

在普通文本编辑器中查看这些(现在主要是 ASCII)文件比试图找出原始二进制 PDF 更容易。

于 2012-09-27T21:55:38.313 回答
2

如果您尝试通过代码生成 PDF 文件,那么此CodeProject 源代码可能会有所帮助。

与 Adob​​e 规范一起的代码应该可以帮助您前进。我不认为这里有很多捷径。理解 PostScript 需要一些学习!

编辑:并且看到 PDF 是压缩的 PostScript,像RoPS这样的东西也可能很方便。

于 2012-09-27T11:24:14.767 回答