java中AcroFields的下划线(iTextSharp)
将内容填充到模板,很好,但我希望AcroField带有下划线。java中AcroFields的下划线(iTextSharp),java,pdf,itextsharp,itext,Java,Pdf,Itextsharp,Itext,将内容填充到模板,很好,但我希望AcroField带有下划线。 我正在使用下面的代码。ClassCastException即将到来 Font font = FontFactory.getFont("Courier-Bold", 16, Font.UNDERLINE, BaseColor.BLACK); fields.setFieldProperty(fieldName, ApplicationConstants.TEXT_FONT, font , null); 请帮助任何人。 谢谢。请允许我把
我正在使用下面的代码。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\u字体,bf,null)
问题2:您想填写一个普通文本字段,并在添加的文本下划线
如果您阅读ISO-32000-1,您会发现它不受支持
子问题a:“下划线”不是字体的属性(颜色也不是)。它是为方便您而添加到iText中的Font
类中的内容(就像颜色一样)
子问题b:PDF规范没有定义任何在添加到文本字段的文本下面加下划线的标志
如果您确实需要在添加到字段的文本下面加下划线,您可以选择:
ColumnText
添加文本。如果可以将表单展平,则这只是一个选项。如果填写的表单需要保持交互式,请使用不同的方法/DA
。这不是为胆小的人准备的。它需要对PDF和iText有很好的了解。如果你没有这样的洞察力,在你的位置上任何人这样做的机会都很小。另外:如果表单未展平,则由于子问题b,一旦有人单击交互字段,文本下的行就会消失。(换句话说,选项3可能不是一个好主意。)请允许我把你的问题分成两个不同的问题 问题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\u字体,bf,null)
问题2:您想填写一个普通文本字段,并在添加的文本下划线
如果您阅读ISO-32000-1,您会发现它不受支持
子问题a:“下划线”不是字体的属性(颜色也不是)。它是为方便您而添加到iText中的Font
类中的内容(就像颜色一样)
子问题b:PDF规范没有定义任何在添加到文本字段的文本下面加下划线的标志
如果您确实需要在添加到字段的文本下面加下划线,您可以选择:
ColumnText
添加文本。如果可以将表单展平,则这只是一个选项。如果填写的表单需要保持交互式,请使用不同的方法/DA
。这不是为胆小的人准备的。它需要对PDF和iText有很好的了解。如果你没有这样的洞察力,在你的位置上任何人这样做的机会都很小。另外:如果表单未展平,则由于子问题b,一旦有人单击交互字段,文本下的行就会消失。(换句话说,选项3可能不是一个好主意。)我为下划线所做的这些更改。我在
AcroFields
位置添加了使用ColumnText
添加的文本。这工作正常。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();
}
我为下划线所做的这些更改。我在
AcroFields
位置添加了使用ColumnText
添加的文本。这工作正常。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();
}
感谢Bruno,添加了
ColumnText
。感谢Bruno,添加了ColumnText
。