ssm根据pdf模板导出pdf

一、使用word设计pdf模板,并另存为pdf格式的文件。

二、使用Adobe Acrobat DC工具,打开pdf文件,工具中选择准备表单并打开

三、在文件中设置域名称,如下图

四、下面是正式的操作

pom依赖

<!-- 	生成PDF相关	iText,必须引入jar包 -->
		<dependency>
		  <groupId>com.itextpdf</groupId>
		  <artifactId>itextpdf</artifactId>
		  <version>5.5.12</version>
		</dependency>
		
		
		<!-- 	生成PDF相关	输出中文,还要引入下面itext-asian.jar包: -->
		<dependency>
		  <groupId>org.bouncycastle.bcprov-jdk15on.1.57.org.bouncycastle</groupId>
		  <artifactId>bcprov-jdk15on</artifactId>
		  <version>1.57</version>
		</dependency>
		
		<!-- 	生成PDF相关	设置pdf文件密码,还要引入下面bcprov-jdk15on.jar包: -->
		<dependency>
		  <groupId>com.itextpdf</groupId>
		  <artifactId>itext-asian</artifactId>
		  <version>5.2.0</version>
		</dependency>

利用pdf模板PDFTemplateExportUtil,生成并导出pdf

 

public class PDFTemplateExportUtil {
	/*
	 * 
	 * @Description: TODO(利用模板生成pdf的方法)
	 * 
	 * @param templatePath 模板的路径
	 * 
	 * @param o 模板参数
	 * @param fileName 导出文件名称
	 * 
	 * @throws
	 */
	public static void pdfout(String templatePath, Map<String, Object> o,String fileName, HttpServletResponse response) {

		PdfReader reader;
		OutputStream out;
		ByteArrayOutputStream bos;
		PdfStamper stamper;
		try {
			fileName = new String(fileName.getBytes("gb2312"), "ISO8859-1");//处理中文乱码,防止名称不对应
			out = response.getOutputStream();// 输出流
			response.setContentType("application/force-download");// 设置强制下载不打开
			response.addHeader("Content-Disposition", "attachment;fileName=" + fileName + ".pdf");// 设置文件名
			reader = new PdfReader(templatePath);// 读取pdf模板
			bos = new ByteArrayOutputStream();
			stamper = new PdfStamper(reader, bos);
			AcroFields form = stamper.getAcroFields();
			// 文字类的内容处理
			Map<String, String> datemap = (Map<String, String>) o.get("datemap");
			for (String key : datemap.keySet()) {
				String value = datemap.get(key);
				form.setField(key, value);
			}
			// 图片类的内容处理
			Map<String, String> imgmap = (Map<String, String>) o.get("imgmap");
			for (String key : imgmap.keySet()) {
				System.out.println("picture key:" + key);
				String value = imgmap.get(key);
				String imgpath = value;
				int pageNo = form.getFieldPositions(key).get(0).page;
				
				Rectangle signRect = form.getFieldPositions(key).get(0).position;
				float x = signRect.getLeft();
				float y = signRect.getBottom();
				// 根据路径读取图片
				Image image = Image.getInstance(imgpath);
                //网络图片
                //Image image = Image.getInstance(new URL(imgpath))
				// 获取图片页面
				PdfContentByte under = stamper.getOverContent(pageNo);
				// 图片大小自适应
				image.scaleToFit(signRect.getWidth(), signRect.getHeight());
				// 添加图片
				image.setAbsolutePosition(x, y);
				under.addImage(image);
			}
			stamper.setFormFlattening(true);// 如果为false,生成的PDF文件可以编辑,如果为true,生成的PDF文件不可以编辑
			stamper.close();
			Document doc = new Document();

			PdfCopy copy = new PdfCopy(doc, out);
			doc.open();
			int n = reader.getNumberOfPages();
			// 根据页数导出pdf,防止页面丢失
			for (int i = 1; i <= n; i++) {
				PdfImportedPage importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i);
				copy.addPage(importPage);
			}

			doc.close();
			out.flush();
			out.close();

		} catch (IOException e) {
			System.out.println(e);
		} catch (DocumentException e) {
			System.out.println(e);
		}

	}
}

请求action

@RequestMapping(value = "employee/infoDetail")
	public @ResponseBody CjwResult infoDetail(Long employeeId,HttpServletRequest request, HttpServletResponse response) {
//获取模板路径
		String classpath = this.getClass().getClassLoader()
                .getResource("/").getPath() ;
		String path = classpath+ "template/resumetemplate.pdf";
		String webappRoot = classpath.replaceAll("WEB-INF/classes/", ""); 
//		String templatePath = "/template/resumetemplate.pdf";
		System.out.println(employeeId);
		CjwResult result = null;
		try {
			Map<String, Object> o = new HashMap<>();
			Map<String, Object> map = new HashMap<>();
			map.put("employeeName","alan");
			map.put("mobile", "18500091965");
			map.put("email", "[email protected]");
			map.put("nation", "汉");
			map.put("hireDate", "2019-9-17");
			map.put("marital", "未婚");
			map.put("certificateCode", "342222198909175650");
			
			map.put("liveAddress", "上海市长宁区娄山关路600弄2号捷运新虹桥大厦7E");
			Map<String, Object> map2 = new HashMap<>();
			map2.put("personalImg", webappRoot+"images/person.png");
			map2.put("idCardFont", webappRoot+"images/person.png");
			map2.put("idCardBack", webappRoot+"images/person.png");
			map2.put("acadeCertificate", webappRoot+"images/person.png");
			map2.put("degreeCertificate", webappRoot+"images/person.png");
			o.put("datemap", map);
			o.put("imgmap", map2);
			String filename ="员工信息表";
			PDFTemplateExportUtil.pdfout(path, o,filename, response);
			result=new CjwResult(200, "sucess", null);
		} catch (Exception e) {
			log.info("异常:"+e);
		}
		return result;
	}
}

   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章