當前位置:
首頁 >
java实现根据pdf文件模板生成pdf文件
發布時間:2023/12/10
26
豆豆
生活随笔
收集整理的這篇文章主要介紹了
java实现根据pdf文件模板生成pdf文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、如何制作pdf模板
1.首先創建template.doc
2.根據doc文件制作pdf模板
3.將doc文件輸出為pdf
文件->輸出為pdf
4.輸出的pdf文件
5.使用Adobe Acrobat DC打開template.pdf
6.填充文字及創作表單
? ? ? 創作表單->添加“文本”域
? 創作表單->編輯“表格”
*填充的字段名(比如對象Table的屬性為name,這里名稱后面一列的單元格填充name)
7.模板制作完畢
?
二、java生成pdf文件
1.java代碼
PdfFileBlh.java:@SuppressWarnings("unchecked") public void exportPdfFile(HttpServletRequest request, HttpServletResponse response) throws IOException {//1.獲取數據 // String jsonString = getRequestJsonString(request);String jsonString = request.getParameter("jsonString");/*String jsonString = "{\r\n" + " \"hospitalId\":\"14064\",\r\n" + " \"hospitalName\":\"揭陽市人民醫院\",\r\n" + " \"name\":\"周虎\",\r\n" + " \"gender\":\"男\",\r\n" + " \"age\":\"26歲\",\r\n" + " \"patNo\":\"0001278568\",\r\n" + " \"clinic\":\"全科醫學科簡易門診\",\r\n" + " \"bedNo\":\"16床\",\r\n" + " \"specimen\":\"咽拭子\",\r\n" + " \"repNo\":\"110254767\",\r\n" + " \"serialNo\":\"0\",\r\n" + " \"doctor\":\"核酸檢測號\",\r\n" + " \"applicationTime\":\"2021-02-18 15:17\",\r\n" + " \"advName\":\"新型冠狀病毒核酸RNA檢測(自費)\",\r\n" + " \"idType\":\"身份證\",\r\n" + " \"idNo\":\"EC3263698\",\r\n" + " \"dateOfCollection\":\"2021-02-18 15:30\",\r\n" + " \"dateOfReceipt\":\"2021-02-19 11:13\",\r\n" + " \"specimenCollector\":\"黃敏華\",\r\n" + " \"specimenReceiver\":\"鐘喬華\",\r\n" + " \"dateOfInspection\":\"2021-02-19 11:15\",\r\n" + " \"dateOfReport\":\"2021-02-19 11:15\",\r\n" + " \"reportedBy\":\"陳舒蘭\",\r\n" + " \"inspectedBy\":\"鐘喬華\",\r\n" + " \"resultList\":[\r\n" + " {\r\n" + " \"testItems\":\"2019新型冠狀病毒核酸檢測\",\r\n" + " \"result\":\"陰性(-)\",\r\n" + " \"refRange\":\"陰性(-)\",\r\n" + " \"method\":\"RT-PCR\"\r\n" + " },\r\n" + " {\r\n" + " \"testItems\":\"Nucleic Acid Test For SARA-Cov-2\",\r\n" + " \"result\":\"Negative(-)\",\r\n" + " \"refRange\":\"Negative(-)\",\r\n" + " \"method\":\"RT-PCR\"\r\n" + " },\r\n" + " {\r\n" + " \"testItems\":\"2019-nCov ORFlab基因\",\r\n" + " \"result\":\"陰性Negative(-)\",\r\n" + " \"refRange\":\"陰性Negative(-)\",\r\n" + " \"method\":\"RT-PCR\"\r\n" + " },\r\n" + " {\r\n" + " \"testItems\":\"2019-nCov N基因\",\r\n" + " \"result\":\"陰性Negative(-)\",\r\n" + " \"refRange\":\"陰性Negative(-)\",\r\n" + " \"method\":\"RT-PCR\"\r\n" + " }\r\n" + " ]\r\n" + "}";*/System.out.println("======jsonString======"+jsonString);if(StringUtils.isNotBlank(jsonString)) {//2.處理數據Map<String, Object> data = JsonUtils.toObject(jsonString, Map.class);//3.根據醫院Id獲取pdf模板文件String hospitalId = (String) data.get("hospitalId");String hospitalName = (String) data.get("hospitalName");String templatePath = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/template/template_" + hospitalId + ".pdf");String fontPath = request.getSession().getServletContext().getRealPath("/WEB-INF/classes/template/simsun.ttc");System.out.println("======templatePath======"+templatePath);//4.設置響應頭信息response.setContentType("multipart/form-data");response.setHeader("Content-Disposition","attachment;fileName="+new String((hospitalName + "檢驗報告單_").getBytes("GBK"), "ISO-8859-1") + DateUtils.formatDate(new Date(), "yyyyMMddHHmmss") + ".pdf");//5.指定解析器ServletOutputStream os = null;PdfStamper ps = null;PdfReader reader = null;Document doc = null;try {os = response.getOutputStream();// 6.讀入pdf表單reader = new PdfReader(templatePath);// 7.根據表單生成一個新的pdfps = new PdfStamper(reader, os);doc = new Document();// 8.獲取pdf表單AcroFields form = ps.getAcroFields();// 9.給表單添加中文字體 。不設置的話,中文可能無法顯示BaseFont bf = BaseFont.createFont(fontPath+",1", BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);form.addSubstitutionFont(bf);// 10.獲取到明細List<Map<String,Object>> resultList = (List<Map<String, Object>>) data.get("resultList");data.remove("resultList");// 11.遍歷data 給pdf表單表格賦值for (String key : data.keySet()) {String value = (String) data.get(key);form.setField(key, value);}// 12.處理檢驗明細if(resultList!=null && resultList.size()>0) {String testItems="\r\n";String result="\r\n";String refRange="\r\n";String method="\r\n";for(Map<String,Object> resultMap:resultList) {testItems+=resultMap.get("testItems")+"\r\n\r\n";result+=resultMap.get("result")+"\r\n\r\n";refRange+=resultMap.get("refRange")+"\r\n\r\n";method+=resultMap.get("method")+"\r\n\r\n";}form.setField("testItems", testItems);form.setField("result", result);form.setField("refRange", refRange);form.setField("method", method);}ps.setFormFlattening(true);ps.close();doc.open();doc.close();System.out.println("===============PDF導出成功=============");} catch (Exception e) {e.printStackTrace();} finally {try {os.close();} catch (Exception e) {e.printStackTrace();}}}}public static String getRequestJsonString(HttpServletRequest request)throws IOException {String submitMehtod = request.getMethod();// GETif (submitMehtod.equals("GET")) {return new String(request.getQueryString().getBytes("iso-8859-1"),"utf-8").replaceAll("%22", "\"");// POST} else {return getRequestPostStr(request);}}public static byte[] getRequestPostBytes(HttpServletRequest request)throws IOException {int contentLength = request.getContentLength();if(contentLength<0){return null;}byte buffer[] = new byte[contentLength];for (int i = 0; i < contentLength;) {int readlen = request.getInputStream().read(buffer, i,contentLength - i);if (readlen == -1) {break;}i += readlen;}return buffer;}public static String getRequestPostStr(HttpServletRequest request)throws IOException {byte buffer[] = getRequestPostBytes(request);String charEncoding = request.getCharacterEncoding();if (charEncoding == null) {charEncoding = "UTF-8";}return new String(buffer, charEncoding);}PdfFileController.java:@Controller @RequestMapping("/pdfFile") public class PdfFileController {@Resourceprivate PdfFileBlh blh;@RequestMapping(params="BLHMI=exportPdfFile")public void exportNoEndFormList(HttpServletRequest request, HttpServletResponse response) throws IOException {blh.exportPdfFile(request,response);} }2.html代碼:
?
?
總結
以上是生活随笔為你收集整理的java实现根据pdf文件模板生成pdf文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 下zip文件的压缩和解压
- 下一篇: 好的API设计