Java中的AcroFields下划线(iTextSharp)

时间:2014-07-14 10:41:16

标签: 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);

请帮助任何人。
感谢。

2 个答案:

答案 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规范没有定义任何标记添加到文本字段的文字。

如果您确实需要在字段中添加下划线文字,那么您的选项是:

  1. 获取字段的位置,然后使用ColumnText添加文本。如果可以接受展平表单,这只是一个选项。如果填写的表格需要保持互动,请使用其他方法。
  2. 将字段定义为Rich Text字段。请参阅PDF参考以了解有关此类字段的更多信息。如果您选择此选项,您可能会自己独立。你可以在StackOverflow上发布另一个问题,但是任何人都没有机会回答。
  3. 构建您自己的/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();
}