java根据pdf表单文档插入数据并生成新的pdf输出

1.首先需要把word模板另存为pdf
2.使用Adobe Acrobat X Pro工具点击创建pdf表单
java根据pdf表单文档插入数据并生成新的pdf输出_第1张图片右键鼠标点击重命名进行字段命名
java根据pdf表单文档插入数据并生成新的pdf输出_第2张图片
java根据pdf表单文档插入数据并生成新的pdf输出_第3张图片
右键属性可以对填充内容的字体格式还有是否多行显示进行设置,完成后保存文档放到自己定义的目录方便程序一会读取
3.java代码部分此处需要用到itextpdf-5.5.10.jar
这个在官网搜索就能下载itexpdf.jar
@RequestMapping(value = “/exportpdfOpen2.do”, method = {RequestMethod.GET, RequestMethod.POST}, produces = “text/html;charset=UTF-8”)
public String exportPdfOpen(HttpServletResponse response,HttpServletRequest request) throws UnsupportedEncodingException {
//
// 指定解析器
System.setProperty(“javax.xml.parsers.DocumentBuilderFactory”,
“com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl”);
//String basePath = request.getRealPath(File.separator);
String basePath = “E:\file\”;//模板地址
String filename = “notice.pdf”;//模板名称

	String path ="E:\\file\\";
	response.setContentType("application/pdf");
	response.setHeader("Content-Disposition", "attachment;fileName=" + new String(( "开业.pdf").getBytes(), "ISO8859-1"));
	OutputStream os = null;
	PdfStamper ps = null;
	PdfReader reader = null;
	try {
		os = response.getOutputStream();
		// 2 读入pdf表单
		reader = new PdfReader(path + filename);
		// 3 根据表单生成一个新的pdf
		ps = new PdfStamper(reader, os);
		// 4 获取pdf表单
		AcroFields form = ps.getAcroFields();
		// 5给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示
		BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",
				BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
		form.addSubstitutionFont(bf);
		// 6查询数据================================================
		Map data = new HashMap();
		data.put("title", "测试标题");
		data.put("content", "给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示" +
				"给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示" );
		data.put("date", "2019年12月10号星期二");
		data.put("issuer", "admin");
		// 7遍历data 给pdf表单表格赋值
		for (String key : data.keySet()) {
			if (data.get(key) != null) {
				form.setField(key, data.get(key).toString());
			}
		}
		ps.setFormFlattening(false);// 如果为false那么生成的PDF文件还能编辑,一定要设为true
		    //-----------------------------pdf 添加图片----------------------------------
        // 通过域名获取所在页和坐标,左下角为起点
        System.out.println("pdf 添加图片");
        if (unitPictureVo != null) {
            for (UnitPictureVo unitPicture : unitPictureVo) {
                String imgpath = basePath + unitPicture.getFileUrl();
                if (form.getFieldPositions("PictureType" + unitPicture.getPictureType()) != null
                        && unitPicture.getFileUrl() != null && !unitPicture.getFileUrl().equals("")) {
                    int pageNo = form.getFieldPositions("PictureType" + unitPicture.getPictureType()).get(0).page;
                    Rectangle signRect = form.getFieldPositions("PictureType" + unitPicture.getPictureType()).get(0).position;
                    float x = signRect.getLeft();
                    float y = signRect.getBottom();
                    // 读图片
                    Image image = Image.getInstance(imgpath);
                    // 获取操作的页面
                    PdfContentByte under = ps.getOverContent(pageNo);
                    // 根据域的大小缩放图片
                    image.scaleToFit(signRect.getWidth(), signRect.getHeight());
                    // 添加图片
                    image.setAbsolutePosition(x, y);
                    under.addImage(image);
                }

            }
        }
        //-------------------------------------------------------------
		//-------------------------------------------------------------
		System.out.println("===============PDF导出成功=============");
	} catch (Exception e) {
		System.out.println("===============PDF导出失败=============");
		e.printStackTrace();
	} finally {
		try {
			ps.close();
			reader.close();
			os.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	return null;
}

你可能感兴趣的:(java)