我已经编写了一些代码来填充PDF中的表单字段,其中包含来自数据库/数组的值(非常有用)。
我需要/希望能够将每个表单字段的textfont属性设置为使用特定字体(理想情况下为Helvetica或Helvetica Neue)。
下面的循环显示了每个命名表单字段中设置的值,但是setFieldProperty不起作用。
<cfset BaseFont = objJLoader.create("com.itextpdf.text.pdf.BaseFont") />
<cfset helvNeue = BaseFont.createFont(expandPath('./files/mfm/fonts/HelveticaNeue.ttf'), BaseFont.CP1252, BaseFont.EMBEDDED) />
<cfset pdfForm = pdfStamper.getAcroFields() />
<cfloop collection="#user#" item="key">
<cfset pdfForm.setField(lcase(key),user[key]) />
<cfset pdfForm.setFieldProperty(lcase(key), "textfont", helvNeue) />
</cfloop>
运行代码时出现以下错误:
The setFieldProperty method was not found.
我尝试在ColdFusion中使用内置的iText支持,并使用JavaLoader读取最新的itextpdf-5.4.2.jar文件。
任何人都可以看到我做错了什么或如何解决问题以使setFieldProperty工作?
非常感谢
答案 0 :(得分:2)
好的,经过更多的挖掘后,我让它使用以下代码:
<cfset baseFont = objJLoader.create("com.itextpdf.text.pdf.BaseFont") />
<cfset helvFont = BaseFont.createFont(baseFont.HELVETICA, baseFont.CP1252, baseFont.EMBEDDED) />
<cfset pdfForm = pdfStamper.getAcroFields() />
<cfloop collection="#user#" item="key">
<cfset pdfForm.setFieldProperty(lcase(key), "textfont", helvFont, JavaCast("null", " ")) />
<cfset pdfForm.setField(lcase(key),user[key]) />
</cfloop>
缺少两件事:
我之前在服务器上将helvFont值设置为.ttf字体..这不起作用。在这个例子中,我直接调用了Helvetica basefont。
我确保将setFieldProperty方法中的null值强制转换为Java null。