【问题标题】:iText PDF setting font property on form acroFieldsiText PDF 在表单 acroFields 上设置字体属性
【发布时间】: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


【解决方案1】:

好的,经过更多挖掘后,我可以使用以下代码:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    相关资源
    最近更新 更多