我对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个arrray是字段的名称及其关联值。如果值为 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)
}
答案 0 :(得分:0)
问题似乎是由于手头的PDF中的多个字段注释因为每个字段有所不同,因此具有不同的外观。
查看文档版本BOE-267-L1-Rev-1.unlocked-with-fields.pdf,我们将检查第一页上最顶端的字段,“此索赔将在20财年提交”。我们看到其注释数组中的页面对象9(在对象265中)具有(在许多其他中)对象304和对象180,它们都是该字段的注释!
304 0 obj
<<
/Ff 12582912
/MaxLen 2
/F 4
/Type/Annot
/Subtype/Widget
/T(This Claim is Filed for Fiscal Year 20)
/P 9 0 R
/Q 1
/MK<<>>
/FT/Tx
/Rect[166.765 693.57 188.965 701.479]
/DA(/Arial 8 Tf 0 g)
/AA<</F 333 0 R/K 334 0 R>>
>>
endobj
...
180 0 obj
<<
/Ff 0
/F 4
/Type/Annot
/Subtype/Widget
/DR<</Font<</Helv 2 0 R>>>>
/T(This Claim is Filed for Fiscal Year 20)
/V()
/AP<</N 179 0 R>>
/P 9 0 R
/BS<</W 0.5/S/S>>
/FT/Tx
/Rect[165.4 706.28 187.6 714.19]
/DA(/Helv 0 Tf 0 g )
>>
endobj
这些定义描述了页面上稍微不同的位置:
/Rect[166.765 693.57 188.965 701.479]
...
/Rect[165.4 706.28 187.6 714.19]
和不同的默认外观字符串
/DA(/Arial 8 Tf 0 g)
...
/DA(/Helv 0 Tf 0 g )
因此,您获得此字段的多个不同外观并不奇怪。令人惊讶的是,Adobe Reader上的iText填充的版本不显示双倍值。
@Bruno有人可能希望在有一段时间后立即对此进行调查。
其他字段也有重复的外观;但是,大多数情况下,页面位置几乎相同,但默认的外观流仍然不同,导致它们的外观也有多种不同的外观。