我对 iText 和 acrofields 有一个奇怪的问题。我创建了一个 PDF 并添加了 acrofields。现在,当我执行 form.setField ('a field name', "a value") 并显示或打印 PDF 时,该值会被复制(一次以较小的字体,一次以该文档的预期字体)。我检查了文档的结构,看起来我的 Acrofield 没有重复。这可能是什么原因
提前致谢
帕斯卡
请在此处找到链接:https ://drive.google.com/file/d/0B8O5n5QFSSNrSGVlNllOcEJHRzQ/edit?usp=sharing
我在 Ubuntu 上。也许这就是为什么!我正在使用 evince 查看文件,但是当我打印它时得到相同的结果。我附上了我看到的截图。https://drive.google.com/file/d/0B8O5n5QFSSNrWXJyY2VpSkt5NE0/edit?usp=sharing 当我说重复时,我应该说阴影。该字段的值首先在没有字体样式的情况下显示,然后用所需的字体覆盖。
我展示的代码非常简单。2 个数组是字段的名称及其关联值。如果值为xxxx,我将字段值设置为其在该数组中的索引。正如您在屏幕截图中看到的那样,它也被遮蔽了。我的打印输出看起来与屏幕截图一模一样。我还没有在其他平台上尝试过。
这是用groovy编写的代码
File mergeForm (String path, Map fields, Map values, String newFile) {
println "Merge Form: $path"
def file = grailsApplication.mainContext.getResource(path)?.inputStream
if (file == null)
return null
def reader = new PdfReader(file)
def stamper = new PdfStamper(reader, new FileOutputStream(newFile))
def form = stamper.getAcroFields()
fields.eachWithIndex { k, v, i ->
def val = ""
if (v instanceof Closure) {
val = v(values)
}
else if (v == '_xxxx_') {
val = "${i + 1}"
}
else if (values[v]) {
val = values."$v"
}
println "setting value[$i]: ${val} to: $k"
form.setField (k, val)
}
stamper.close()
return new File (newFile)
}