示例PDF语言代码有助于研究官方PDF规范?

时间:2012-09-27 11:16:26

标签: pdf pdf-generation

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

为此,我下载了Adobe的PDF规范文件,这个文件非常庞大。

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

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

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

screenshot of hex editor opening my PDF

我无法确定此二进制文件的哪一部分代表此PDF中的字符a

到目前为止,我尝试过的所有真实PDF文件都是如此。我根本找不到任何包含工作示例代码的PDF文件,以帮助我理解通用PDF语言规范。

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

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

  • 是否有免费提供的PDF文件资源,其中不包含二进制和/或压缩内容?或者我怎么能创建自己的这样的示例文件?

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

我只需要第一个钩子。如果你愿意,可以进入真实世界PDF文件的丛林中的狭窄路径,然后我可以跟随它...同时使用这个名为“PDF规范”的丛林破坏者的帮助。

4 个答案:

答案 0 :(得分:6)

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

来自sourceforge页面:

  

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

答案 1 :(得分:5)

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

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

例如这个文件:
PDF sample

在PDF Vole中会看起来像这样:
PDF Vole Capture

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

答案 2 :(得分:5)

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

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

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

  • 经常运行qpdf --qdf input.pdf decompressed-input.pdf

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

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

  1. 解压缩先前压缩的对象(公开f.e.页面元素绘制操作的PDF语言源代码)。

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

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

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

  5. 修复b0rken xref条目。

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

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

  8. ......等等。

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

答案 3 :(得分:2)

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

代码和Adobe规范应该可以帮到你。我不认为这里有很多捷径。了解PostScript将需要一些研究!

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