【问题标题】:PDFTron: batch update attributesPDFTron:批量更新属性
【发布时间】:2021-02-12 02:08:34
【问题描述】:

我想批量更新 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,我已经尝试过(作为文本文件上传)。它只有一个输入。

【问题讨论】:

    标签: pdftron


    【解决方案1】:

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

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

    如果您的意图是编辑 PDF 本身,请删除您的 fdfExtract 呼叫,改为呼叫 pdfdoc.getFieldIterator()

    【讨论】:

    • 谢谢,@Ryan 我看到这里的 API 文档中描述了 findAttributepdftron.com/api/PDFTronSDK/java/com/pdftron/fdf/… 我不确定我是否理解您对此的评论。
    • 这里是a decompressed, toy pdf,我已经尝试过(作为文本文件上传)。它只有一个输入。我已经updated my code 使用field.getSDFObj().findObj("T"),但结果和以前一样。
    • @JellicleCat 我现在看到了这个问题,感谢您提供额外的信息。我更新了我的答案。
    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多