如何读取/访问外部参照表并将其替换为文件中的文本?

时间:2016-03-14 04:47:26

标签: java itext pdfbox

我需要以PDF格式读取外部参照表,并用文件中的文本字符串替换所有空闲(最后用'f'签名)。这是xrefPDF表的示例。

  

外部参照

     

0 256

     

0000000029 65535 f

     

0000000017 00000 n

     

0000000125 00000 n

     

0000000216 00000 n

     

0000000030 65535 f

     

0000000031 65535 f

     

0000000032 65535 f

我想用字符串[A443DD719B11118D12D99E5EA18E5EA9934]替换 然后它会变成:

  

0000000029 65535 f

     

0000000017 00000 n

     

0000000125 00000 n

     

0000000216 00000 n

     

0000000030 A443D f

     

0000000031 D719B f

     

0000000032 11118 f

。 。

我在Java中使用iTextPDFBox但无法找到如何读取或访问xref表流并将其替换为文件中的文本的方法。请帮忙。

1 个答案:

答案 0 :(得分:0)

PDF中的每个间接对象都具有ISO 32000-1中定义的唯一标识符:

  

对象标识符应由两部分组成:

     
      
  • 正整数对象编号。间接对象​​可以在PDF文件中按顺序编号,但这不是必需的。宾语   数字可以任意顺序分配。
  •   
  • 非负整数代数。在新创建的文件中,所有间接对象的世代号应为0.非零   稍后更新文件时可能会引入世代号。
  •   

此标识符用于交叉引用表中,并且普通交叉引用流中的世代号的最大数量为:

  

最大代数为65,535

您希望将代数更改为不是数字的代码。即使您将D719B等字符串视为(十六进制)数字,您仍然会超过最大代数。

换句话说:您要求PDF专家创建不符合ISO标准的PDF。每个有自尊心的PDF专家都会拒绝回答这个问题并要求你重新考虑。

在评论中,您声称要在PDF文件中引入一些不可见的水印。为什么要滥用代数的概念来做到这一点?为什么不在目录中添加额外的(自定义)条目?