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
相关产品推荐
相关产品推荐

