将内容填充到模板,很好,但我想为AcroField加下划线 我正在使用下面的代码。 ClassCastException即将到来。
Font font = FontFactory.getFont("Courier-Bold", 16, Font.UNDERLINE, BaseColor.BLACK);
fields.setFieldProperty(fieldName, ApplicationConstants.TEXT_FONT, font , null);
请帮助任何人。
感谢。
答案 0 :(得分:2)
请允许我将您的问题分解为两个不同的问题。
问题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
添加文本。如果可以接受展平表单,这只是一个选项。如果填写的表格需要保持互动,请使用其他方法。/DA
。这不适合胆小的人。这需要对PDF和iText有深入的了解。如果你没有这种洞察力,那么任何人在你所在地做这件事的可能性非常小。另外:如果表单没有展平,由于子问题b ,一旦有人点击了交互式字段,文本下面的行就会消失。 (换句话说:选项3可能不是一个好主意。)答案 1 :(得分:2)
我为下划线做了这些改变。我添加了在ColumnText
地方使用AcroFields
添加文字。这很好。
private void underlineText(String fieldName, String fieldValue, AcroFields fields, PdfStamper stamper) throws Exception
{
Rectangle targetPosition = fields.getFieldPositions(fieldName).get(0).position;
Font fontNormal = FontFactory.getFont("Courier-Bold", 8, Font.UNDERLINE, BaseColor.BLACK);
Anchor url = new Anchor(fieldValue.trim(), fontNormal);
ColumnText data = new ColumnText(stamper.getOverContent(1));
data.setSimpleColumn(url, targetPosition.getLeft(), targetPosition.getBottom(), targetPosition.getRight(), targetPosition.getTop(), 0,0);
data.go();
}