2

PDF文件具有这样的结构(或多或少,只是为了描绘我的需要)

%Header containing PDF version and two characters that ensure PDF is read properly
//objects
//cross-reference table

但是,如果我%text在上面列表的最后两个元素之间添加这样形成的文本,PDF 不应该被破坏,并且 PDF 阅读器会忽略该行,对吧?据我所知,PDF中的“%”与Java中的“//”相同。

我想以这种方式将我的一些自定义数据添加到 PDF 中。这可能不是最好的方法,但对我来说这是最简单的方法。以后我可能会改变它,但现在我想坚持下去。

问题是,一方面,我的假设是,如果将行添加到 PDF 的正确位置,PDF 本身不会被破坏,其次,我想知道我应该使用哪些类和方法来实现这一点.

我从常规 PDF 开始,我想以包含我的数据的 PDF 结束。

4

1 回答 1

3

如果我在上面列表的最后两个元素之间添加这样形成的文本%text,PDF 不应该被损坏,并且 PDF 阅读器会忽略该行,对吗?

错误的!

首先,您给定的 PDF 文件结构是不完整的(即使是“描绘您的需求”)。它错过了startxref元素。

PDF 文件的正确(粗略)结构(根据您的需要)需要考虑以下四个要素:

  1. PDF 标题
  2. PDF 正文(对象)
  3. PDF 外部参照表
  4. PDF 预告片

交叉引用表是一种 TOC(目录),列出了 PDF 文件中的所有对象。这些对象通过此 TOC 列表及其文件字节偏移值定位,从文件开头计算。

因此,如果您在 PDF 中插入任何内容(即使是 PDF 阅读器应该忽略的注释),您必须为插入的注释之后的所有对象调整外部参照表中的字节偏移值。

然后,预告片的重要性次之:它包含一个名为的条目,该条目startxref保存(最后一个)外部参照部分的文件字节偏移值。(最后一个外部参照部分,因为 PDF 文件可能不仅仅是一个,而是多个外部参照部分。)

因此,符合标准的 PDF 阅读器应该从头开始阅读 PDF 文件。他们在那里找到了外部参照表的位置。然后,通过阅读外部参照表,他们将找到每个对象。

In your special case (you want to insert a comment after all the PDF objects, but before the Xref table), you also need to adapt the number given by the startxref keyword: if your comment is 55 characters long (including newline characters) then add 55 to the previous value and you should be fine.

于 2012-09-11T12:08:01.370 回答