将注释行添加到PDF

时间:2012-09-11 10:17:46

标签: java pdf

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丰富了我的数据。

1 个答案:

答案 0 :(得分:3)

  

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

<强>错误!

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

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

  1. PDF标题
  2. PDF正文(对象)
  3. PDF xref table
  4. PDF预告片
  5. 交叉引用表是一种列出PDF文件中所有对象的TOC(目录)。这些对象通过此TOC列表找到它们的文件字节偏移值,从文件的开头计算。

    因此,如果您将任何插入PDF(甚至是PDF阅读器应忽略的注释),您必须调整Xref表中的字节偏移值以适应所有后续对象你插入的评论。

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

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

    在您的特殊情况下(您希望在所有PDF对象之后但在外部参照表之前插入注释),您还需要调整startxref关键字给出的数字:如果您的注释为55个字符long(包括换行符)然后将55添加到上一个值,你应该没问题。