我正在尝试在PDF上传递数字值,但它以String形式传递。问题是PDF的最后一行用于对上述所有值求和,但是由于该值是字符串而不是整数,因此此功能不起作用。
val form = PdfAcroForm.getAcroForm(pdfDoc, true)
val fields = form.formFields
fields[newFieldName]?.setValue(value.valueAsString)
?.setFont(font)
?.setFontSize(TEXT_SIZE)
问题是setValue方法,但是我没有在文档中找到有关如何传递Integer值的任何内容。那么如何传递整数值呢?
编辑:
尝试过此操作,但未将值放在字段上
fields[newFieldName]?.setRichText(PdfNumber(2.0))
?.setFont(font)
?.setFontSize(TEXT_SIZE)
Edit2:有什么方法可以在acro字段上获取嵌入函数,以便对其进行编辑,并使其也可以在总和字符串值上加以考虑?
答案 0 :(得分:1)
PDF格式仅知道AcroForm文本字段的字符串值。附加到字段的JavaScript代码可能仅强制使用数字字符,但设置字段值时iText不执行任何JavaScript。
因此,关于您的原始问题
问题是setValue方法,但是我没有在文档中找到有关如何传递Integer值的任何内容。那么如何传递整数值?
没有用于设置整数值的特殊iText方法。
然后,在注释中发现原来特定于整数的问题不是实际问题。相反:
问题是,当我使用Adobe Reader手动编写数值时,pdf的最后一行上的sum函数起作用(4 | 5 | 6-> 15),所以有什么方法可以做到这一点itext?
所以实际的问题是,iText更改后,计算的字段内容没有更新。
这样做的原因是PDF中的此功能是由PDF中的一些JavaScript代码实现的,以在发生某些事件的情况下计算总和,但是iText(核心)在编辑表单字段时不会执行任何JavaScript(因为更改了它们)不是通过GUI,而是立即,这些事件将不会直接适用。)
因此,您还必须计算有问题的总和,并自行设置总和字段。
我可以计算总和并将其放置在正确的字段中,但是如果我这样做了,然后在下一行我打开Adobe Reader以输入一个数字,很可能js函数将无法执行“ 12”(由我,将其作为字符串放置)+ 5(在sum上方的一行中输入手动整数)。
字段的值始终以字符串形式存储在PDF中。因此,通过iText或Adobe设置字符串的方式应该没有什么区别。
共享PDF之后,我可以看一下它的结构和其中的JavaScript。
实际上,它是AcroForm表单(不是XFA表单!),求和和平均值的计算在设置为计算( C )附加操作( AA < / strong>)的相应 total 或 average 字段。要求和或求平均值的字段由字段名称定义,例如对于字段名称“ 1-Place_Total”,脚本将对字段“ 1-Place_1” ..“ 1-Place_12”的内容计算 total 。
var srcName = event.target.name;
var srcCategory = srcName.substring(srcName.indexOf("_")+1)
var baseName = srcName.replace("Total","").replace("Average","");
var total = Number(0);
var lastMonth = 0;
for(i=1; i < 13; i++){
var thisMonth = baseName + i;
var monthVal = this.getField(thisMonth).value;
total = Number(total) + Number(monthVal);
if(monthVal > 0){
lastMonth = i;
}
}
if(total == 0){
event.value = "";
}
else if(srcCategory == "Total"){
event.value = total;
}
else if(srcCategory == "Average"){
event.value = total / lastMonth;
}
表单字段附加操作“计算”指定为
一个JavaScript动作,当另一个字段的值更改时,将执行该动作以重新计算该字段的值。 (名称 C 代表“计算”。)
(ISO 32000-1,表196 –表单字段的附加动作字典中的条目)
由于脚本立即从有问题的字段中获取值(在某些其他脚本可能已将其存储的地方并不特殊),因此您可以手动更改PDF中的任意字段值以触发此函数进行计算无论单个字段的值是由iText还是由Adobe设置的,所有适用字段的总和。
在小数点分隔符的外观和字段值可能不同的情况下,分数数字可能仍然是一个问题,但是当您要求设置 integer 值的方法时,我假设那应该不是问题。
我必须承认我还没有测试过,答案仅基于规范。如果您创建概念验证后发现它不起作用,请共享该代码,然后我将对其进行更深入的研究。