使用iText5为现有PDF每页添加TextField仅首页生效问题求助
问题原因分析
- 资源关闭语句位置错误:你把
pdfStamper.close()和pdfReader.close()的逻辑写在了for循环内部,第一次循环(处理第1页)执行完之后就直接关闭了PDF操作资源,后续页面对应的循环逻辑根本不会执行,所以只有第一页能成功添加TextField。 - 表单域命名重复:PDF规范要求同一个文档内的表单域名称不能重复,你现在所有页面的TextField都用了同一个名称
HiddenText,就算循环逻辑修复,最后也只会有一个域生效。
修复后的代码示例
PdfReader pdfReader = new PdfReader("C:/somename.pdf"); PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileOutputStream("C:/somename_output.pdf")); pdfStamper.setEncryption(false, null, null, ~PdfWriter.ALLOW_COPY); int pages = pdfReader.getNumberOfPages(); for (int page = 1; page <= pages; page++) { // 每个页面的表单域添加唯一名称,避免重复冲突 TextField field = new TextField(pdfStamper.getWriter(), new Rectangle(400, 1, 612, 10), "HiddenText_" + page); field.setBorderColor(BaseColor.CYAN); field.setBorderStyle(PdfBorderDictionary.STYLE_DASHED); field.setBorderWidth(BaseField.BORDER_WIDTH_MEDIUM); field.setText("Adding some text here in each page"); field.setOptions(TextField.READ_ONLY); pdfStamper.addAnnotation(field.getTextField(), page); } // 资源关闭逻辑移到for循环外部,所有页面处理完成后再关闭 pdfStamper.close(); pdfReader.close();
内容的提问来源于stack exchange,提问作者user2692291
相关产品推荐
相关产品推荐

