表格acroFields上的iText PDF设置字体属性

时间:2013-06-13 09:34:57

标签: pdf coldfusion pdf-generation itext

我已经编写了一些代码来填充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工作?

非常感谢

1 个答案:

答案 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。