PDFTron:批量更新属性
PDFTron: batch update attributes
我想批量更新 PDF 中所有 objects 的标题。我有办法做到这一点吗?我想遍历字段并更改 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()
导出(制作副本)字段并将它们 returns 作为 FDFDoc,因此您正在编辑一个临时对象。这就是为什么稍后调用 fdfExtract()
时会得到相同的原始数据,因为您从未编辑过原始 PDFDoc
.
如果您打算编辑 FDFDoc
,请保留参考。
FDFDoc fdfdoc = pdfdoc.fdfExtract();
如果您打算编辑 PDF 本身,请删除您的 fdfExtract
调用并改为调用
pdfdoc.getFieldIterator()
我想批量更新 PDF 中所有 objects 的标题。我有办法做到这一点吗?我想遍历字段并更改 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()
导出(制作副本)字段并将它们 returns 作为 FDFDoc,因此您正在编辑一个临时对象。这就是为什么稍后调用 fdfExtract()
时会得到相同的原始数据,因为您从未编辑过原始 PDFDoc
.
如果您打算编辑 FDFDoc
,请保留参考。
FDFDoc fdfdoc = pdfdoc.fdfExtract();
如果您打算编辑 PDF 本身,请删除您的 fdfExtract
调用并改为调用
pdfdoc.getFieldIterator()