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丰富了我的数据。
答案 0 :(得分:3)
如果我在上面列表的最后两个元素之间添加如此
%text
形成的文本,则PDF不应该被破坏,并且PDF阅读器会忽略该行,对吧?
<强>错误!强>
首先,您给定的PDF文件结构不完整(甚至是“描绘您的需求”)。它错过了startxref
元素。
PDF文件的正确(粗略)结构(根据您的需要)需要考虑以下四个要素:
交叉引用表是一种列出PDF文件中所有对象的TOC(目录)。这些对象通过此TOC列表找到它们的文件字节偏移值,从文件的开头计算。
因此,如果您将任何插入PDF(甚至是PDF阅读器应忽略的注释),您必须调整Xref表中的字节偏移值以适应所有后续对象你插入的评论。
然后,预告片的重要性接下来:它包含一个名为startxref
的条目,它保存(最后)外部参照部分的文件字节偏移值。 (最后 xref部分,因为PDF文件可能不只有一个,而是多个外部参照部分。)
因此,符合PDF的读者应该从最后开始阅读PDF文件。在那里,他们找到了外部参照表的位置。然后,通过读取外部参照表,他们将找到每个对象。
在您的特殊情况下(您希望在所有PDF对象之后但在外部参照表之前插入注释),您还需要调整startxref
关键字给出的数字:如果您的注释为55个字符long(包括换行符)然后将55添加到上一个值,你应该没问题。