2

我编写了一些代码来使用来自数据库/数组的值填充 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 工作?

非常感谢

4

1 回答 1

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 基础字体。

  • 我确保将 setFieldProperty 方法中的 null 值强制转换为 Java null。

于 2013-06-13T10:37:42.807 回答