将内容填充到模板中,很好,但我想要 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 规范没有定义任何为添加到文本字段的文本下划线的标志。
如果您确实需要在添加到字段的文本下划线,您的选择是:
- 获取字段的位置,并使用
ColumnText
添加文本。仅当可以接受扁平化表单时,这才是一个选项。如果填写的表单需要保持交互性,请使用不同的方法。 - 将该字段定义为富文本字段。请参阅 PDF 引用以了解有关此类字段的更多信息。如果您选择此选项,您可能会孤身一人。您可以在 StackOverflow 上发布另一个问题,但几乎没有人会回答。
- 构建您自己的
/DA
。这不适合胆小的人。它需要对 PDF 和 iText 有很好的了解。如果你没有这种洞察力,任何人代替你做这件事的机会就很小。另外:如果表单未展平,则由于子问题b,一旦有人单击交互字段,文本下方的线条就会消失。 (换句话说:选项 3 可能不是一个好主意。)
关于java - java 中 AcroFields 的下划线(iTextSharp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24734705/