我需要以PDF格式读取外部参照表,并用文件中的文本字符串替换所有空闲(最后用'f'
签名)。这是xref
中PDF
表的示例。
外部参照
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中使用iText
或PDFBox
但无法找到如何读取或访问xref
表流并将其替换为文件中的文本的方法。请帮忙。
答案 0 :(得分:0)
PDF中的每个间接对象都具有ISO 32000-1中定义的唯一标识符:
对象标识符应由两部分组成:
- 正整数对象编号。间接对象可以在PDF文件中按顺序编号,但这不是必需的。宾语 数字可以任意顺序分配。
- 非负整数代数。在新创建的文件中,所有间接对象的世代号应为0.非零 稍后更新文件时可能会引入世代号。
此标识符用于交叉引用表中,并且普通交叉引用流中的世代号的最大数量为:
最大代数为65,535
您希望将代数更改为不是数字的代码。即使您将D719B
等字符串视为(十六进制)数字,您仍然会超过最大代数。
换句话说:您要求PDF专家创建不符合ISO标准的PDF。每个有自尊心的PDF专家都会拒绝回答这个问题并要求你重新考虑。
在评论中,您声称要在PDF文件中引入一些不可见的水印。为什么要滥用代数的概念来做到这一点?为什么不在目录中添加额外的(自定义)条目?