String fileUrl = "d:\ContractInfoTemplate1.pdf"; try { PdfReader reader = new PdfReader(fileUrl); ByteArrayOutputStream bos = new ByteArrayOutputStream(); PdfStamper ps = new PdfStamper(reader, bos); AcroFields s = ps.getAcroFields(); System.out.println("s: " + s); System.out.println("AcroFields: " + s.getFields()); System.out.println("AcroFields.class: " + s.getFields().getClass()); System.out.println("getSignatureNames: " + s.getSignatureNames()); System.out.println("getSignatureNames: " + s.getTotalRevisions()); System.out.println("s: " + s.getBlankSignatureNames()); System.out.println("s: " + s.getFieldCache()); s.setField("hetonghao", "00000000000", "00000000000"); s.setField("tbdwmc", "投保单位名称"); System.out.println("hetonghao:" + s.getField("hetonghao")); System.out.println("tbdwmc:" + s.getField("tbdwmc")); ps.setFormFlattening(false); ps.close(); FileOutputStream fos = new FileOutputStream("D:\123.pdf"); fos.write(bos.toByteArray()); fos.close(); } catch (Exception e) { e.printStackTrace(); }
代码目的是把一个pdf中的指定的文本域的内容改成输入的字符串,并生成新的pdf文件。
问题:建立的是文本域,stamp.setFormFlattening(false); 这句话很关键
假如本人设置true那么出来的就是原来的模板,没有本人的赋值,但是本人设置false
显示出来也没有值,但是你用鼠标点文本域,就能显示值。
在网上找了些资料,但都没有结果,请高手指点下,已经弄了两天了,谢谢
解决方案
100
经过测试是你定义的模板有问题,要注意模板里定义的TextBox等的名称