導(dǎo)入jar包:
復(fù)制代碼
<!-- PDF導(dǎo)出-->
<!-- https://mvnrepository.com/artifact/com.itextpdf/itextpdf -->
<dependency>
? ? <groupId>com.itextpdf</groupId>
? ? <artifactId>itextpdf</artifactId>
? ? <version>5.5.13</version>
</dependency>
復(fù)制代碼
實現(xiàn)生成PDF座每、數(shù)據(jù)插入葵诈、導(dǎo)出
復(fù)制代碼
? ? ? ? @RegisterToSMP(serviceDisplay = "預(yù)覽頁面PDF下載")? ? ?
? ? ? ? @RequestMapping(value = "/DM/gwclwxsq/qygl/exportPDF$m=query.service",method =RequestMethod.POST)
? ? ? ? public String exportPdf(@RequestBody GwclwxsqBean gwclwxsqBean , HttpServletResponse response) throws UnsupportedEncodingException {? ? ? ? ? ?
? ? ? ? ? ? // 1.指定解析器
? ? ? ? ? ? System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
? ? ? ? ? ? ? ? ? ? "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
? ? ? ? ? ? String filename="車輛維修審批單.pdf";
? ? ? ? ? ? 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ù)表單生成一個新的pdf
? ? ? ? ? ? ? ? ps = 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;
? ? ? ? }
復(fù)制代碼
3.測試
二辩稽、Java實現(xiàn)Excel生成和數(shù)據(jù)插入惧笛、導(dǎo)出
這個比較簡單,直接上代碼(假定你的實體類逞泄、查詢什么的都已經(jīng)寫好)注意:實體類一個是你自己的數(shù)據(jù)實體類還有一個是你導(dǎo)出時表格中對應(yīng)的實體類
我們以一個真實的公司業(yè)務(wù)來舉個例子(一個統(tǒng)計疫情登記人員信息的Excel導(dǎo)出功能)
1.表頭對應(yīng)實體類ExportYqfkdj.java:
復(fù)制代碼
import lombok.Data;
/**
* description:
* @author: zhouhong
* @version: V1.0.0
* @date: 2021年1月14日 下午3:05:54
*/
@Data
public class ExportYqfkdj {
? ? /**
? ? * 序號
? ? */
? ? private Integer xuhao;
? ? /**
? ? * 姓名
? ? */
? ? private String xingming;?
? ? /**
? ? * 證件號碼
? ? */
? ? private String zjhm;
? ? /**
? ? * 聯(lián)系電話
? ? */
? ? private String lxdh;? ?
? ? /**
? ? * 申請人工作單位
? ? */
? ? private String sqrGzdw;? ?
? ? /**
? ? * 是否接觸過疑似病例
? ? */
? ? private String sfjcgysbl;
? ? /**
? ? * 當前是否與居家隔離人員同住
? ? */
? ? private String sfyjjglrytz;? ?
? ? /**
? ? * 當前狀態(tài)
? ? */
? ? private String dqzt;
? ? /**
? ? * 當前健康狀態(tài)
? ? */
? ? private String dqjkzt;
? ? /**
? ? * 當前體溫
? ? */
? ? private String dqtw;
? ? /**
? ? * 當前所在地址
? ? */
? ? private String dqszdz;
? ? /**
? ? * 當前居住地址
? ? */
? ? private String dqjzdz;
? ? /**
? ? * 提交時間
? ? * */
? ? private String tjsj;
}
復(fù)制代碼
b.Service層
復(fù)制代碼
? ? /**
? ? * 導(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("當前狀態(tài)");
? ? ? ? List<String> head8 = new ArrayList<String>();
? ? ? ? head8.add("當前健康狀態(tài)");
? ? ? ? List<String> head9 = new ArrayList<String>();
? ? ? ? head9.add("體溫(°C)");
? ? ? ? List<String> head10 = new ArrayList<String>();
? ? ? ? head10.add("當前所在地址");
? ? ? ? List<String> head11 = new ArrayList<String>();
? ? ? ? head11.add("當前居住地址");
? ? ? ? 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;
? ? }
復(fù)制代碼
c.Controller層
復(fù)制代碼
? ? @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;filename=" + new String(filename.replaceAll(" ", "").getBytes("gbk")));
? ? ? ? ? ? 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;
? ? ? ? }
? ? }
深圳網(wǎng)站建設(shè)www.sz886.com