java - java 中 AcroFields 的下划线(iTextSharp)

标签 java pdf itext

将内容填充到模板中,很好,但我想要 AcroField 的下划线。
我正在使用下面的代码。 ClassCastException 即将到来。

Font font = FontFactory.getFont("Courier-Bold", 16, Font.UNDERLINE, BaseColor.BLACK);
fields.setFieldProperty(fieldName, ApplicationConstants.TEXT_FONT, font , null);

请帮助任何人。
谢谢。

最佳答案

请允许我将您的问题分成两个不同的问题。

问题 1:您正在创建一个 Font 对象,并且在 setFieldProperty() 方法中使用该对象。

这是错误的。 setFieldProperty() 方法仅接受 BaseFont 对象作为字体。这解释了 ClassCastException:您无法将 Font 转换为 BaseFont

这是您纠正此问题的方法:

BaseFont bf = BaseFont.createFont(BaseFont.COURIER_BOLD, BaseFont.WINANSI, BaseFont.NOT_EMBEDDED);

fields.setFieldProperty(fieldName, ApplicationConstants.TEXT_FONT, bf, null);

问题 2:您想要填写普通文本字段并为添加的文本添加下划线。

如果您阅读 ISO-32000-1,您会发现它不受支持。

子问题a:“下划线”不是字体的属性(颜色也不是)。为了方便起见,它被添加到 iText 中的 Font 类中(就像颜色一样)。

子问题 b:PDF 规范没有定义任何为添加到文本字段的文本下划线的标志。

如果您确实需要在添加到字段的文本下划线,您的选择是:

  1. 获取字段的位置,并使用ColumnText添加文本。仅当可以接受扁平化表单时,这才是一个选项。如果填写的表单需要保持交互性,请使用不同的方法。
  2. 将该字段定义为富文本字段。请参阅 PDF 引用以了解有关此类字段的更多信息。如果您选择此选项,您可能会孤身一人。您可以在 StackOverflow 上发布另一个问题,但几乎没有人会回答。
  3. 构建您自己的/DA。这不适合胆小的人。它需要对 PDF 和 iText 有很好的了解。如果你没有这种洞察力,任何人代替你做这件事的机会就很小。另外:如果表单未展平,则由于子问题b,一旦有人单击交互字段,文本下方的线条就会消失。 (换句话说:选项 3 可能不是一个好主意。)

关于java - java 中 AcroFields 的下划线(iTextSharp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24734705/

相关文章:

java - 如何以编程方式谷歌?

xml - 如何使用 iText 填写 XFA 表单?

java - 使用 iText 在 Java 程序中嵌入字体

java - 当我以 pdf 形式向占位符插入值时,如何设置 iText 的编码?

java - 通过 Intent 传递内容值(value)

java - 如何从 eclipse 调用两个或多个 ant 目标?

Java多线程和继承

python - 另存为 .pdf 时,Matplotlib 图会失去透明度

javascript - 在 React Native 中查看和搜索 PDF 或 doc 文件

java - 需要将 xml 作为 XFA 添加到 Jasper Report 创建的 pdf 中