JAVA實現(xiàn)PDF和EXCEL生成和數(shù)據(jù)動態(tài)插入以及導(dǎo)出
點擊上方 java項目開發(fā) ,選擇 星標(biāo) 公眾號
重磅資訊,干貨,第一時間送達(dá)
一、序言
二、Java 實現(xiàn) PDF 的生成和數(shù)據(jù)動態(tài)插入、導(dǎo)出功能
1、第一步:PDF 制作模板





2、代碼的編寫(假定我們實體類什么的都已經(jīng)編寫完成、數(shù)據(jù)通過前端傳入獲取、模板位置在 E 盤根目錄下名字為:車輛維修審批單. pdf)
導(dǎo)入 jar 包:
<!-- PDF導(dǎo)出--><!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13</version></dependency>
實現(xiàn)生成 PDF、數(shù)據(jù)插入、導(dǎo)出
public String exportPdf( GwclwxsqBean gwclwxsqBean , HttpServletResponse response) throws UnsupportedEncodingException {// 1.指定解析器System.setProperty("javax.xml.parsers.DocumentBuilderFactory","com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");String file;String path="e:/";response.setContentType("application/pdf");response.setHeader("Content-Disposition", "attachment;fileName="+ URLEncoder.encode(filename, "UTF-8"));OutputStream os = null;PdfStamper ps = null;PdfReader reader = null;try {os = response.getOutputStream();// 2 讀入pdf表單reader = new PdfReader(path+ "/"+filename);// 3 根據(jù)表單生成一個新的pdfps = new PdfStamper(reader, os);// 4 獲取pdf表單AcroFields form = ps.getAcroFields();// 5給表單添加中文字體 這里采用系統(tǒng)字體。不設(shè)置的話,中文可能無法顯示BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",BaseFont.IDENTITY_H, BaseFont.EMBEDDED);form.addSubstitutionFont(bf);// 6查詢數(shù)據(jù)================================================Map<String, String> data = new HashMap<String, String>();data.put("commitTime", gwclwxsqBean.getCommitTime());data.put("driver", gwclwxsqBean.getDriver());data.put("carId", gwclwxsqBean.getCarId());data.put("carType", gwclwxsqBean.getCarType());data.put("repairAddress", gwclwxsqBean.getRepairAddress());data.put("repairCost",gwclwxsqBean.getRepairCost());data.put("project", gwclwxsqBean.getProject());data.put("fwbzzxfzrYj", gwclwxsqBean.getFwbzzxfzrYj());data.put("fgldspYj", gwclwxsqBean.getFgldspYj());data.put("remarks", gwclwxsqBean.getRemarks());// 7遍歷data 給pdf表單表格賦值for (String key : data.keySet()) {form.setField(key,data.get(key).toString());}ps.setFormFlattening(true);log.info("*******************PDF導(dǎo)出成功***********************");} catch (Exception e) { log.error("*******************PDF導(dǎo)出失敗***********************");e.printStackTrace();} finally {try {ps.close();reader.close();os.close();} catch (Exception e) {e.printStackTrace();}}return null;}
3. 測試


二、Java 實現(xiàn) Excel 生成和數(shù)據(jù)插入、導(dǎo)出
1. 表頭對應(yīng)實體類 ExportYqfkdj.java:
import lombok.Data;/*** description:* @author: zhouhong* @version: V1.0.0* @date: 2021年1月14日 下午3:05:54*/public class ExportYqfkdj {/*** 序號*/private Integer xuhao;/*** 姓名*/private String xingming;/*** 證件號碼*/private String zjhm;/*** 聯(lián)系電話*/private String lxdh;/*** 申請人工作單位*/private String sqrGzdw;/*** 是否接觸過疑似病例*/private String sfjcgysbl;/*** 當(dāng)前是否與居家隔離人員同住*/private String sfyjjglrytz;/*** 當(dāng)前狀態(tài)*/private String dqzt;/*** 當(dāng)前健康狀態(tài)*/private String dqjkzt;/*** 當(dāng)前體溫*/private String dqtw;/*** 當(dāng)前所在地址*/private String dqszdz;/*** 當(dāng)前居住地址*/private String dqjzdz;/*** 提交時間* */private String tjsj;}
b.Service 層
/*** 導(dǎo)出* @param yqfkdjBean* @author zhouhong* @return* @throws Exception*/@Transactional(rollbackFor = { Exception.class })public DataResult exporYqfkdj(YqfkdjBean yqfkdjBean) throws Exception {DataResult result = new DataResult();List<ExportYqfkdj> list = new ArrayList<ExportYqfkdj>();try {/* 查詢導(dǎo)出信息 */result = getYqfkMhCXQuery(yqfkdjBean);SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmssSSS");for (int i = 0; i < result.getTotalcount(); i++) {ExportYqfkdj dmKhfwdcDtjlZxDto = new ExportYqfkdj();dmKhfwdcDtjlZxDto = ObjectUtil.parsePojo(result.getResults().get(i), ExportYqfkdj.class);dmKhfwdcDtjlZxDto.setXuhao(i + 1);list.add(dmKhfwdcDtjlZxDto);}String filepath = "D:/疫情防控信息" + df.format(new Date()) + ".xlsx";if (System.getProperty(YqfkdjUtils.Wjdz.NAME).toLowerCase().startsWith(YqfkdjUtils.Wjdz.LI)|| System.getProperty(YqfkdjUtils.Wjdz.NAME).toLowerCase().startsWith(YqfkdjUtils.Wjdz.LIN)) {filepath = "/home/Tomcat/temp/" + df.format(new Date()) + ".xlsx";}EasyExcel.write(filepath, ExportYqfkdj.class).head(head()).sheet().doWrite(list);result.setResults(list);result.setSuccess(true);result.setMsg(filepath);} catch (Exception e) {result.setSuccess(false);result.setMsg(YqfkdjUtils.Cytx.DCSB);e.printStackTrace();throw e;}return result;}/*** 疫情防控信息導(dǎo)出表頭* @author zhouhong* @return List<List<String>>*/private List<List<String>> head() {List<List<String>> list = new ArrayList<List<String>>();List<String> head0 = new ArrayList<String>();head0.add("序號");List<String> head1 = new ArrayList<String>();head1.add("姓名");List<String> head2 = new ArrayList<String>();head2.add("證件號碼");List<String> head3 = new ArrayList<String>();head3.add("聯(lián)系電話");List<String> head4 = new ArrayList<String>();head4.add("工作所在單位");List<String> head5 = new ArrayList<String>();head5.add("是否接觸疑似病例");List<String> head6 = new ArrayList<String>();head6.add("是否與隔離人員同住");List<String> head7 = new ArrayList<String>();head7.add("當(dāng)前狀態(tài)");List<String> head8 = new ArrayList<String>();head8.add("當(dāng)前健康狀態(tài)");List<String> head9 = new ArrayList<String>();head9.add("體溫(°C)");List<String> head10 = new ArrayList<String>();head10.add("當(dāng)前所在地址");List<String> head11 = new ArrayList<String>();head11.add("當(dāng)前居住地址");List<String> head12 = new ArrayList<String>();head12.add("提交時間");list.add(head0);list.add(head1);list.add(head2);list.add(head3);list.add(head4);list.add(head5);list.add(head6);list.add(head7);list.add(head8);list.add(head9);list.add(head10);list.add(head11);list.add(head12);return list;}
c.Controller 層
@RegisterToSMP(serviceDisplay = "疫情防控查詢導(dǎo)出")@RequestMapping(value = "/DM/yqfkdj/gr/yqfkdjdc$m=export.service", method = RequestMethod.POST)public void exportKhfxxx(@RequestBody YqfkdjBean yqfkdjBean, HttpServletResponse resp) throws Exception {DataResult result = new DataResult();try {SimpleDateFormat df = new SimpleDateFormat("yyyyMMddhhmmssSSS");result = yqfkdjService.exporYqfkdj(yqfkdjBean);String filepath = result.getMsg().replace("\"", "");File file = new File(filepath);String filename = "疫情防控信息" + df.format(new Date()) + ".xlsx";InputStream fis = new BufferedInputStream(new FileInputStream(filepath));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();resp.reset();resp.setHeader("Content-Disposition","attachment;file)));resp.setHeader("Content-Length", "" + file.length());OutputStream os = new BufferedOutputStream(resp.getOutputStream());resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");// 輸出文件os.write(buffer);os.flush();os.close();} catch (Exception e) {e.printStackTrace();log.info(YqfkdjUtils.Cytx.DCSB);throw e;}}
d. 測試

怎么接私貨?這個渠道你100%有用!請收藏!
評論
圖片
表情
