【问题标题】:Adding comment lines to PDF向 PDF 添加注释行
【发布时间】:2012-09-11 10:17:46
【问题描述】:

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 结束。

【问题讨论】:

    标签: java pdf


    【解决方案1】:

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

    错了!

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

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

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

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

    因此,如果您将 anything 插入 PDF(甚至是 PDF 阅读器应忽略的注释),您必须针对后面的所有对象调整外部参照表中的字节偏移值您插入的评论。

    然后,trailer 紧随其后:它包含一个名为 startxref 的条目,其中包含(最后一个)外部参照部分的文件字节偏移值。 (最后一个外部参照部分,因为 PDF 文件可能不止一个,而是多个外部参照部分。)

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      相关资源
      最近更新 更多