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;
	}
}

   

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