自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java技術:實現(xiàn)pdf和Excel的生成及數(shù)據(jù)動態(tài)插入、導出

開發(fā) 前端
本篇帶給大家關于Java技術,實現(xiàn)pdf和Excel的生成及數(shù)據(jù)動態(tài)插入、導出,希望對你有所幫助!

[[389684]]

1 序言

Excel、PDF的導出、導入是我們工作中經常遇到的一個問題,剛好今天公司業(yè)務遇到了這個問題,順便記個筆記以防下次遇到相同的問題而束手無策。

公司有這么兩個需求:

需求一、給了一個表單,讓把查出來的數(shù)據(jù)組裝到表單中并且提供以PDF格式的下載功能。

需求二、將數(shù)據(jù)查出來以Excel表格的形式下載下來。

Java實現(xiàn)PDF的生成和數(shù)據(jù)動態(tài)插入、導出功能

1、第一步:PDF制作模板

因為PDF常用的軟件不讓支持編輯,我們就先使用WPS以Word的形式進行編輯制作出與客戶需求一樣的樣式,然后直接另存為 .pdf 的形式如下圖所示:

a.Word里面制作模板

b.更改名字為 .pdf形式


c.這時需要用到一個叫:Adobe Acrobat DC的軟件,具體操作如下:

用Adobe Acrobat DC打開我們剛才改過名字的PDF文件,點擊右下角的“更多工具”按鈕


到下面這個頁面再點擊“準備表單”按鈕


d.接下來就需要詳細的配置你的數(shù)據(jù)源了


數(shù)據(jù)源即:你代碼中實體類中對應的數(shù)據(jù)(注意字段一定要一一對應),配置完畢就可以保存進行下面的代碼編寫工作了。

2 代碼的編寫

假定我們實體類什么的都已經編寫完成、數(shù)據(jù)通過前端傳入獲取、模板位置在E盤根目錄下名字為:車輛維修審批單.pdf

導入jar包:

  1. <dependency> 
  2.     <groupId>com.itextpdfgroupId> 
  3.     <artifactId>itextpdfartifactId> 
  4.     <version>5.5.13version> 
  5. dependency> 

 實現(xiàn)生成PDF、數(shù)據(jù)插入、導出

  1. @RegisterToSMP(serviceDisplay = "預覽頁面PDF下載")       
  2. @RequestMapping(value = "/DM/gwclwxsq/qygl/exportPDF$m=query.service",method =RequestMethod.POST)  
  3. public String exportPdf(@RequestBody GwclwxsqBean gwclwxsqBean , HttpServletResponse response) throws UnsupportedEncodingException {             
  4.     // 1.指定解析器 
  5.     System.setProperty("javax.xml.parsers.DocumentBuilderFactory"
  6.             "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl"); 
  7.     String filename="車輛維修審批單.pdf"
  8.     String path="e:/"
  9.     response.setContentType("application/pdf"); 
  10.     response.setHeader("Content-Disposition""attachment;fileName=" 
  11.             + URLEncoder.encode(filename, "UTF-8")); 
  12.     OutputStream os = null
  13.     PdfStamper ps = null
  14.     PdfReader reader = null
  15.     try { 
  16.         os = response.getOutputStream(); 
  17.         // 2 讀入pdf表單 
  18.         reader = new PdfReader(path+ "/"+filename); 
  19.         // 3 根據(jù)表單生成一個新的pdf 
  20.         ps = new PdfStamper(reader, os); 
  21.         // 4 獲取pdf表單 
  22.         AcroFields form = ps.getAcroFields(); 
  23.         // 5給表單添加中文字體 這里采用系統(tǒng)字體。不設置的話,中文可能無法顯示 
  24.         BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1"
  25.                       BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
  26.         form.addSubstitutionFont(bf); 
  27.         // 6查詢數(shù)據(jù)================================================ 
  28.         Map data = new HashMap(); 
  29.               data.put("commitTime", gwclwxsqBean.getCommitTime()); 
  30.               data.put("driver", gwclwxsqBean.getDriver()); 
  31.               data.put("carId", gwclwxsqBean.getCarId()); 
  32.               data.put("carType", gwclwxsqBean.getCarType()); 
  33.               data.put("repairAddress", gwclwxsqBean.getRepairAddress()); 
  34.               data.put("repairCost",gwclwxsqBean.getRepairCost()); 
  35.               data.put("project", gwclwxsqBean.getProject()); 
  36.               data.put("fwbzzxfzrYj", gwclwxsqBean.getFwbzzxfzrYj()); 
  37.               data.put("fgldspYj", gwclwxsqBean.getFgldspYj()); 
  38.               data.put("remarks", gwclwxsqBean.getRemarks());            
  39.          // 7遍歷data 給pdf表單表格賦值 
  40.         for (String key : data.keySet()) { 
  41.             form.setField(key,data.get(key).toString()); 
  42.         } 
  43.         ps.setFormFlattening(true);        
  44.         log.info("*******************PDF導出成功***********************"); 
  45.     } catch (Exception e) {          log.error("*******************PDF導出失敗***********************"); 
  46.         e.printStackTrace(); 
  47.     } finally { 
  48.         try { 
  49.             ps.close(); 
  50.             reader.close(); 
  51.             os.close(); 
  52.         } catch (Exception e) { 
  53.             e.printStackTrace(); 
  54.         } 
  55.     } 
  56.     return null

 3 測試

Java實現(xiàn)Excel生成和數(shù)據(jù)插入、導出

這個比較簡單,直接上代碼(假定你的實體類、查詢什么的都已經寫好)注意:實體類一個是你自己的數(shù)據(jù)實體類還有一個是你導出時表格中對應的實體類。100道Java中高級面試題匯總

我們以一個真實的公司業(yè)務來舉個例子(一個統(tǒng)計疫情登記人員信息的Excel導出功能)

a.表頭對應實體類ExportYqfkdj.java

  1. import lombok.Data; 
  2.  
  3. /** 
  4.  * description:  
  5.  * @author: zhouhong 
  6.  * @version: V1.0.0 
  7.  * @date: 2021年1月14日 下午3:05:54 
  8.  */ 
  9. @Data 
  10. public class ExportYqfkdj { 
  11.     /** 
  12.      * 序號 
  13.      */ 
  14.     private Integer xuhao; 
  15.     /** 
  16.      * 姓名 
  17.      */ 
  18.     private String xingming;   
  19.     /** 
  20.      * 證件號碼 
  21.      */ 
  22.     private String zjhm; 
  23.     /** 
  24.      * 聯(lián)系電話 
  25.      */ 
  26.     private String lxdh;     
  27.     /** 
  28.      * 申請人工作單位 
  29.      */ 
  30.     private String sqrGzdw;     
  31.     /** 
  32.      * 是否接觸過疑似病例 
  33.      */ 
  34.     private String sfjcgysbl; 
  35.     /** 
  36.      * 當前是否與居家隔離人員同住 
  37.      */ 
  38.     private String sfyjjglrytz;     
  39.     /** 
  40.      * 當前狀態(tài) 
  41.      */ 
  42.     private String dqzt; 
  43.     /** 
  44.      * 當前健康狀態(tài) 
  45.      */ 
  46.     private String dqjkzt; 
  47.  
  48.     /** 
  49.      * 當前體溫 
  50.      */ 
  51.     private String dqtw; 
  52.     /** 
  53.      * 當前所在地址 
  54.      */ 
  55.     private String dqszdz; 
  56.     /** 
  57.      * 當前居住地址 
  58.      */ 
  59.     private String dqjzdz; 
  60.     /** 
  61.      * 提交時間 
  62.      * */ 
  63.     private String tjsj; 

 b.Service層

  1. /** 
  2.  * 導出 
  3.  * @param yqfkdjBean 
  4.  * @author zhouhong 
  5.  * @return  
  6.  * @throws Exception 
  7.  */ 
  8. @Transactional(rollbackFor = { Exception.class }) 
  9. public DataResult exporYqfkdj(YqfkdjBean yqfkdjBean) throws Exception { 
  10.     DataResult result = new DataResult(); 
  11.     List list = new ArrayList(); 
  12.     try { 
  13.         /* 查詢導出信息 */ 
  14.         result = getYqfkMhCXQuery(yqfkdjBean); 
  15.         SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmssSSS"); 
  16.         for (int i = 0; i < result.getTotalcount(); i++) { 
  17.             ExportYqfkdj dmKhfwdcDtjlZxDto = new ExportYqfkdj(); 
  18.             dmKhfwdcDtjlZxDto = ObjectUtil.parsePojo(result.getResults().get(i), ExportYqfkdj.class); 
  19.             dmKhfwdcDtjlZxDto.setXuhao(i + 1); 
  20.             list.add(dmKhfwdcDtjlZxDto); 
  21.         } 
  22.         String filepath = "D:/疫情防控信息" + df.format(new Date()) + ".xlsx"
  23.         if (System.getProperty(YqfkdjUtils.Wjdz.NAME).toLowerCase().startsWith(YqfkdjUtils.Wjdz.LI) 
  24.                 || System.getProperty(YqfkdjUtils.Wjdz.NAME).toLowerCase().startsWith(YqfkdjUtils.Wjdz.LIN)) { 
  25.             filepath = "/home/Tomcat/temp/" + df.format(new Date()) + ".xlsx"
  26.         } 
  27.         EasyExcel.write(filepath, ExportYqfkdj.class).head(head()).sheet().doWrite(list); 
  28.         result.setResults(list); 
  29.         result.setSuccess(true); 
  30.         result.setMsg(filepath); 
  31.     } catch (Exception e) { 
  32.         result.setSuccess(false); 
  33.         result.setMsg(YqfkdjUtils.Cytx.DCSB); 
  34.         e.printStackTrace(); 
  35.         throw e; 
  36.     } 
  37.     return result; 
  38. /** 
  39.  * 疫情防控信息導出表頭 
  40.  * @author zhouhong 
  41.  * @return List<list> 
  42.  */</list 
  43. private List<list> head() { 
  44.     List<list> list = new ArrayList<list>(); 
  45.     List head0 = new ArrayList(); 
  46.     head0.add("序號"); 
  47.     List head1 = new ArrayList(); 
  48.     head1.add("姓名"); 
  49.     List head2 = new ArrayList(); 
  50.     head2.add("證件號碼"); 
  51.     List head3 = new ArrayList(); 
  52.     head3.add("聯(lián)系電話"); 
  53.     List head4 = new ArrayList(); 
  54.     head4.add("工作所在單位"); 
  55.     List head5 = new ArrayList(); 
  56.     head5.add("是否接觸疑似病例"); 
  57.     List head6 = new ArrayList(); 
  58.     head6.add("是否與隔離人員同住"); 
  59.     List head7 = new ArrayList(); 
  60.     head7.add("當前狀態(tài)"); 
  61.     List head8 = new ArrayList(); 
  62.     head8.add("當前健康狀態(tài)"); 
  63.     List head9 = new ArrayList(); 
  64.     head9.add("體溫(°C)"); 
  65.     List head10 = new ArrayList(); 
  66.     head10.add("當前所在地址"); 
  67.     List head11 = new ArrayList(); 
  68.     head11.add("當前居住地址"); 
  69.     List head12 = new ArrayList(); 
  70.     head12.add("提交時間"); 
  71.     list.add(head0); 
  72.     list.add(head1); 
  73.     list.add(head2); 
  74.     list.add(head3); 
  75.     list.add(head4); 
  76.     list.add(head5); 
  77.     list.add(head6); 
  78.     list.add(head7); 
  79.     list.add(head8); 
  80.     list.add(head9); 
  81.     list.add(head10); 
  82.     list.add(head11); 
  83.     list.add(head12); 
  84.     return list; 
  85. </list</list</list 

 c.Controller層

  1. @RegisterToSMP(serviceDisplay = "疫情防控查詢導出"
  2. @RequestMapping(value = "/DM/yqfkdj/gr/yqfkdjdc$m=export.service", method = RequestMethod.POST) 
  3. public void exportKhfxxx(@RequestBody YqfkdjBean yqfkdjBean, HttpServletResponse resp) throws Exception { 
  4.     DataResult result = new DataResult(); 
  5.     try { 
  6.         SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmssSSS"); 
  7.         result = yqfkdjService.exporYqfkdj(yqfkdjBean); 
  8.         String filepath = result.getMsg().replace("\""""); 
  9.         File file = new File(filepath); 
  10.         String filename = "疫情防控信息" + df.format(new Date()) + ".xlsx"
  11.         InputStream fis = new BufferedInputStream(new FileInputStream(filepath)); 
  12.         byte[] buffer = new byte[fis.available()]; 
  13.         fis.read(buffer); 
  14.         fis.close(); 
  15.         resp.reset(); 
  16.         resp.setHeader("Content-Disposition"
  17.                 "attachment;filename=" + new String(filename.replaceAll(" """).getBytes("gbk"))); 
  18.         resp.setHeader("Content-Length""" + file.length()); 
  19.         OutputStream os = new BufferedOutputStream(resp.getOutputStream()); 
  20.         resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
  21.         // 輸出文件 
  22.         os.write(buffer); 
  23.         os.flush(); 
  24.         os.close(); 
  25.     } catch (Exception e) { 
  26.         e.printStackTrace(); 
  27.         log.info(YqfkdjUtils.Cytx.DCSB); 
  28.         throw e; 
  29.     } 

 d.測試

已經全部完成PDF和Excel的生成、插入、導出功能。

 

責任編輯:姜華 來源: IT技術分享社區(qū)
相關推薦

2023-02-25 10:04:21

JavaExcel導出功能

2024-12-05 08:27:20

2023-02-03 08:21:30

excelMySQL

2020-09-22 09:41:09

前端

2012-11-28 11:14:39

IBMdW

2009-08-07 12:57:03

C#讀取Excel

2020-12-02 11:56:16

Java注解Excel

2012-02-22 09:44:21

Java

2021-03-11 08:24:48

Javapoi數(shù)據(jù)脫敏

2022-05-11 09:02:27

Python數(shù)據(jù)庫Excel

2009-06-26 10:43:57

生成EXCELJSF

2022-07-08 10:11:04

探查數(shù)據(jù)治理數(shù)據(jù)質量

2024-11-29 12:58:13

2009-08-12 16:39:50

C#向Excel插入數(shù)

2023-12-19 22:44:45

PythonPDFExcel

2020-12-18 10:40:00

ExcelJava代碼

2009-07-28 10:01:16

ASP.NET Exc

2012-09-19 10:14:12

Visual Stud

2021-11-15 04:00:07

Linux 內核動態(tài)

2009-09-17 08:47:00

Linq插入數(shù)據(jù)
點贊
收藏

51CTO技術棧公眾號