java中AcroFields的下划线(iTextSharp)

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); 请帮助任何人。 谢谢。请允许我把

将内容填充到模板,很好,但我希望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\u字体,bf,null)

问题2:您想填写一个普通文本字段,并在添加的文本下划线

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

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

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

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

  • 获取字段的位置,并使用
    ColumnText
    添加文本。如果可以将表单展平,则这只是一个选项。如果填写的表单需要保持交互式,请使用不同的方法
  • 将该字段定义为富文本字段。请参阅PDF参考以了解有关此类型字段的更多信息。如果你选择了这个选项,你很可能会孤立无援。您可以在StackOverflow上发布另一个问题,但几乎没有人会回答
  • 构建自己的
    /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
    添加文本。如果可以将表单展平,则这只是一个选项。如果填写的表单需要保持交互式,请使用不同的方法
  • 将该字段定义为富文本字段。请参阅PDF参考以了解有关此类型字段的更多信息。如果你选择了这个选项,你很可能会孤立无援。您可以在StackOverflow上发布另一个问题,但几乎没有人会回答
  • 构建自己的
    /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