【发布时间】:2013-06-09 15:27:35
【问题描述】:
我编写了一些代码来使用来自数据库/数组的值填充 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 正常工作?
非常感谢
【问题讨论】:
-
我上一次写Cold Fusion代码是在1996年,目前我已经不会说任何死语言了,但是在Java中,
setFieldProperty()方法需要四个参数,而我只看到三个参数在您调用该方法时... -
嗨布鲁诺。我还尝试将第四个参数设置为 null 或“”,结果相同。顺便说一句,ColdFusion 并没有死。
-
我只是在逗你 ;-) 我不知道为什么 CF 找不到 'setFieldProperty()' 方法。它在 Java 版本中。就我理解尴尬的 CF 术语而言,缺少的参数是我看到的唯一区别。
-
我只是想知道它是否与实际的 iText jar 以及 PDFStamper 是否是一个接口以及它实际调用的接口/基础...这可以解释为什么 CF 可以看到该方法(或者我可以在对象转储中)但实际上不能调用它。
-
Re: 我不知道为什么 CF 找不到 'setFieldProperty()' 方法 完整的错误是 probably more like this。对象方法通过反射调用。 CF 检查参数“类型”以定位匹配的方法签名。鉴于 CF 是相对无类型的,因此可能存在歧义。将参数显式转换为正确的类型,即使用
javacast可以解决歧义。
标签: pdf coldfusion pdf-generation itext