微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PDFTron:批量更新属性

如何解决PDFTron:批量更新属性

我想批量更新 PDF 中所有对象的标题。有没有办法让我做到这一点?我想遍历字段并更改 T 值,但这似乎不起作用;对字段的更改不会从一次迭代持续到下一次,更不会出现在保存的输出文件中:

PDFNet.initialize();
var doc = new PDFDoc(infile.getAbsolutePath)
var iter = doc.fdfExtract().getFieldIterator

while (iter.hasNext) {
  var field = iter.next
  var obj = field.findAttribute("T")
  if (obj != null && obj.isstring) {
      obj.setString("new title")
      println(field.getName) // Outputs "new title"
  }
}

iter = doc.fdfExtract().getFieldIterator
while (iter.hasNext) {
  var field = iter.next
  var obj = field.findAttribute("T")
  if (obj != null && obj.isstring) {
      println(field.getName) // Outputs the original title
  }
}

doc.save(new FileOutputStream("out.pdf"),SDFDoc.SaveMode.INCREMENTAL,null)
doc.close

这是我试验过的 a decompressed,toy pdf(作为文本文件上传)。它只有一个输入。

解决方法

问题在于您正在调用 fdfExtract(),它导出(制作副本)字段并将它们作为 FDFDoc 返回,因此您正在编辑一个临时对象。这就是为什么稍后当您调用 fdfExtract() 时您会得到相同的原始数据,因为您从未编辑过原始 PDFDoc

如果您打算编辑 FDFDoc,请保留参考。 FDFDoc fdfdoc = pdfdoc.fdfExtract();

如果您打算编辑 PDF 本身,请删除您的 fdfExtract 调用,而是调用 pdfdoc.getFieldIterator()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。