2012-09-11 61 views
2

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。

回答

3

如果我添加这样形成%text上面的列表中的最后两个元素之间的文本,PDF不应受到损坏,而行会用的PDF阅读器可以忽略,对不对?

错!

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

PDF文件的正确(粗糙)的结构(为您的需求),需要考虑以下四个要素:

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

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

所以,如果你插入什么成PDF(甚至原本应该由PDF阅读器可以忽略注释),你必须适应在外部参照表中的字节偏移值,请插入注释后的所有对象。

然后,拖车进来重要性未来:它含有一种叫startxref条目持有的(最后一个)外部参照部分文件的字节偏移值。 (最后 xref部分,因为PDF文件可能不只有一个,而是多个外部参照部分。)

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

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