iText添加PDF复选框时设置的边框颜色与宽度不生效如何解决
问题根因
iText 7 中表单字段的显示样式由字段关联的页面组件(Widget 注释)的属性决定,仅在 PdfButtonFormField 对象上设置的样式属性不会自动同步到 Widget 注释,文档最终生成时会读取 Widget 的默认属性值,导致你提前设置的边框、背景色配置丢失。
解决方案
直接对复选框关联的 Widget 注释设置样式属性即可,修改后的代码如下:
public static void testPdf() throws IOException { String src = "/Users/heartisan/Downloads/xx.pdf"; String dest = "/Users/heartisan/Downloads/yy.pdf"; PdfDocument pdf = new PdfDocument(new PdfReader(src), new PdfWriter(dest)); PdfAcroForm form = PdfAcroForm.getAcroForm(pdf, true); Document document = new Document(pdf); for (int i = 0; i < 3; i++) { PdfButtonFormField checkField = PdfFormField.createCheckBox(pdf, new Rectangle(369 + i * 69, 751, 15, 15), "experience".concat(String.valueOf(i+1)), "Off", PdfFormField.TYPE_CHECK); // 获取复选框对应的Widget注释 PdfAnnotation widget = checkField.getWidgets().get(0); // 直接在Widget上设置样式属性 widget.setBorderWidth(2); widget.setBorderColor(DeviceGray.GRAY); widget.setBorderStyle(PdfAnnotation.STYLE_SOLID); widget.setBackgroundColor(ColorConstants.RED); checkField.setVisibility(PdfFormField.VISIBLE); checkField.setToggleOff(false); form.addField(checkField, pdf.getPage(1)); } document.close(); }
如果修改后仍存在样式不生效的情况,可以在将字段添加到表单前调用 checkField.regenerateField() 强制刷新字段的外观流,确保自定义样式被写入文档。
内容的提问来源于stack exchange,提问作者heartisan
相关产品推荐
相关产品推荐

