java通过itext操作PDF文件的问题

J2EE 码拜 9年前 (2016-03-18) 2302次浏览
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等的名称

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明java通过itext操作PDF文件的问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)