Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin 使用Itext在PDF字段中添加数值_Kotlin_Itext - Fatal编程技术网

Kotlin 使用Itext在PDF字段中添加数值

Kotlin 使用Itext在PDF字段中添加数值,kotlin,itext,Kotlin,Itext,我试图在PDF上传递一个数值,但它作为字符串传递。问题是PDF上的最后一行用于对上面的所有值求和,但因为值是字符串而不是整数,所以此函数不起作用 val form = PdfAcroForm.getAcroForm(pdfDoc, true) val fields = form.formFields fields[newFieldName]?.setValue(value.valueAsString) ?.setFont(fon

我试图在PDF上传递一个数值,但它作为字符串传递。问题是PDF上的最后一行用于对上面的所有值求和,但因为值是字符串而不是整数,所以此函数不起作用

val form = PdfAcroForm.getAcroForm(pdfDoc, true)
val fields = form.formFields 

fields[newFieldName]?.setValue(value.valueAsString)
                                ?.setFont(font)
                                ?.setFontSize(TEXT_SIZE)
问题是setValue方法,但我在文档中没有找到任何关于如何传递整数值的内容。那么如何传递整数值呢

编辑:

已尝试此操作,但未将值放置在字段上

fields[newFieldName]?.setRichText(PdfNumber(2.0))
?.setFont(font)
?.setFontSize(TEXT_SIZE)

编辑2:有没有办法在ACROR字段上获得嵌入函数,以便编辑它并使之在字符串值上考虑?

< P> PDF格式只知道ActuFrm文本字段的字符串值。附加到字段的JavaScript代码可能只强制使用数字字符,但在设置字段值时,iText不会执行任何JavaScript

那么关于你原来的问题,

问题是setValue方法,但我在文档中没有找到任何关于如何传递整数值的内容。那么如何传递整数值呢

没有设置整数值的特殊iText方法


在评论中,原来针对特定整数的问题不是实际问题。相反:

问题是,当我使用AdobeReader手动编写数值时,pdf最后一行的sum函数(4 | 5 | 6-->15)可以工作,那么使用itext有什么方法可以做到这一点呢

因此,实际问题是,在iText更改后,计算的字段内容不会更新

原因是PDF中的此功能是由PDF中的某些JavaScript代码实现的,在发生某些事件时计算总和,但iText(core)在编辑表单字段时不执行任何JavaScript(因为它不是通过GUI而是立即更改,事件无论如何都不会直接应用)

因此,您还必须计算有问题的总和,并自己设置总和字段


我可以计算总和并将其放在正确的字段中,但如果我这样做了,然后我打开Adobe reader输入一个数字,很可能js函数无法执行“12”(由我计算,将其放在字符串)+5(手动整数输入在总和上方的一行)

字段的值始终作为字符串存储在PDF中。因此,iText或Adobe设置字符串的方式应该没有区别

在您共享了PDF之后,我可以看看它的结构和其中的JavaScript

实际上,它是一个AcroForm表单(不是XFA表单!),求和和和平均值的计算发生在JavaScript函数中,这些函数被设置为计算(C)附加动作(AA)的相应合计或平均字段。要求和或求平均的字段由字段名定义,例如,对于字段名“1-Place_Total”,脚本计算字段“1-Place_1”内容的总计。。“1-Place_12”

var srcName=event.target.name;
var srcCategory=srcName.substring(srcName.indexOf(“”)+1)
var baseName=srcName.replace(“总计”).replace(“平均值”);
var总数=数量(0);
var lastMonth=0;
对于(i=1;i<13;i++){
var thisMonth=baseName+i;
var monthVal=this.getField(thisMonth).value;
总数=个数(总数)+个数(月);
如果(月数>0){
上月=i;
}
}
如果(总计==0){
event.value=“”;
}
否则如果(SRCCegory==“总计”){
event.value=总计;
}
否则如果(SRCCegory==“平均值”){
event.value=总计/上月;
}
表单字段附加操作“计算”指定为

当另一个字段的值发生变化时,应执行JavaScript操作以重新计算该字段的值。(名称C代表“计算”。)

(ISO 32000-1,表196–表单字段的附加操作字典中的条目)

由于脚本会立即从相关字段中获取值(并非某些其他脚本可能存储这些值的特殊位置),因此您只需手动更改PDF中的任意字段值即可触发此函数以计算所有适用字段的总和,无论单个字段值是由iText还是由Adobe设置的

在这种情况下,小数可能仍然是一个问题,因为小数分隔符的外观和字段值可能不同,但当您要求提供设置整数值的方法时,我认为这不应该是一个问题



我必须承认我没有测试过这个,答案仅仅基于规范。如果您创建了一个概念验证,但发现它不起作用,请共享该代码,然后我将对此进行更深入的研究。

pdf格式只知道acroform文本字段的字符串值。附加到字段的Javascript代码可能只强制使用数字字符,但itext在设置字段值时不执行任何Javascript。我明白了,谢谢您的回答。问题是,当我使用AdobeReader手动编写数值时,pdf最后一行的sum函数(4 | 5 | 6-->15)可以工作,那么使用itext有什么方法可以做到这一点呢?最后,我看到的pdf模板是用itextSharp@mklco创建的。你能分享这个模板吗?不幸的是,我不能(这是一个机密文件,用希腊语),但我可以向你提供你需要的每一个细节@UladzimirAsipchukOk。我明天再看你是个救生员。在以编程方式放置总和,然后使用Adobe Reader手动放置和“整数”之后,总和得到了更新,并且确实是正确的。快速提问,如何访问PDF的嵌入式js脚本?“如何访问PDF的嵌入式js脚本?”-您可以使用Adobe Acrobat或itext RUPS等工具。