You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iText 7.1.10能否为PDF表单同名字段设置不同样式属性?

需求说明
  • 业务场景需要在PDF表单中添加多个重名字段,典型字段包括signature、buyer_name
  • 当前使用iText版本为7.1.10,现有方案通过PdfWidgetAnnotation实现重名字段添加,逻辑为单个字段支撑多个视图展示,会导致字体加粗等字段属性修改时同步生效到所有同名字段实例,无法满足同名字段单独配置不同属性的要求
  • 需确认iText库是否可实现重名字段独立配置属性的需求,求可参考的实现思路
当前实现示例代码
private void addFormFieldsWithSameName(PdfDocument pdfDocument, PdfAcroForm form, List<PdfAnnotationFields> fieldsToAdd) throws IOException {

    PdfAnnotationFields firstField = fieldsToAdd.get(0);
    PdfTextFormField formField = PdfTextFormField.createText(pdfDocument);
    setFormFieldProperties(formField, firstField);

    log.debug("Form field adding to pdf is: {} ", formField.toString());
    form.addField(formField, pdfDocument.getPage(firstField.getPageNumber()));

    for (PdfAnnotationFields fieldToAdd : fieldsToAdd) {
        Rectangle rectangle = new Rectangle(fieldToAdd.getLowerLeftXCords(), fieldToAdd.getLowerLeftYCords(),
                fieldToAdd.getWidth(), fieldToAdd.getHeight());
        PdfWidgetAnnotation pdfWidgetAnnotation = new PdfWidgetAnnotation(rectangle);
        pdfWidgetAnnotation.setVisibility(firstField.getVisibility());
        pdfDocument.getPage(fieldToAdd.getPageNumber()).addAnnotation(pdfWidgetAnnotation);
        formField.addKid(pdfWidgetAnnotation);
    }
}

private void setFormFieldProperties(PdfTextFormField formField, PdfAnnotationFields firstField) throws IOException {

    formField.setFieldName(firstField.getKey());
    formField.setMappingName(firstField.getMappingName());
    String fieldValue = annotationField.getDefaultValue() != null ? firstField.getDefaultValue() : ANNOTATION_DEFAULT_VALUE;
    formField.setDefaultValue(new PdfString(fieldValue));
    formField.setValue(fieldValue);
    formField.setPage(firstField.getPageNumber());
    formField.setReadOnly(firstField.isReadOnly());
    formField.setRequired(firstField.isRequired());
    formField.setFont(PdfFontFactory.createFont(firstField.getFontType().getFontTypeAlias()));
    formField.setFontSize(firstField.getFontSize());
    formField.setColor(Color.convertRgbToCmyk(new DeviceRgb(java.awt.Color.decode(firstField.getTextColor()))));
    formField.setJustification(firstField.getJustification());
}
已参考的相关问题
  • iText更新包含多个同名字段的PDF表单实现方案
  • iText 7下两个控件引用同一表单值的使用问题

内容的提问来源于stack exchange,提问作者Alagapan Thiagarajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 20:09:20