JAVA实现PDF和EXCEL生成和数据动态插入以及导出

导入jar包:

复制代码

    com.itextpdf

    itextpdf

    5.5.13

复制代码

实现生成PDF、数据插入、导出

复制代码

        @RegisterToSMP(serviceDisplay = "预览页面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 根据表单生成一个新的pdf

                ps = new PdfStamper(reader, os);

                // 4 获取pdf表单

                AcroFields form = ps.getAcroFields();

                // 5给表单添加中文字体 这里采用系统字体。不设置的话,中文可能无法显示

                BaseFont bf = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1",

                              BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

                form.addSubstitutionFont(bf);

                // 6查询数据================================================

                Map data = new HashMap();

                      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导出成功***********************");

            } catch (Exception e) {

          log.error("*******************PDF导出失败***********************");

                e.printStackTrace();

            } finally {

                try {

                    ps.close();

                    reader.close();

                    os.close();

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

            return null;

        }

复制代码

3.测试

二、Java实现Excel生成和数据插入、导出

这个比较简单,直接上代码(假定你的实体类、查询什么的都已经写好)注意:实体类一个是你自己的数据实体类还有一个是你导出时表格中对应的实体类

我们以一个真实的公司业务来举个例子(一个统计疫情登记人员信息的Excel导出功能)

1.表头对应实体类ExportYqfkdj.java:

复制代码

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;

    /**

    * 联系电话

    */

    private String lxdh;   

    /**

    * 申请人工作单位

    */

    private String sqrGzdw;   

    /**

    * 是否接触过疑似病例

    */

    private String sfjcgysbl;

    /**

    * 当前是否与居家隔离人员同住

    */

    private String sfyjjglrytz;   

    /**

    * 当前状态

    */

    private String dqzt;

    /**

    * 当前健康状态

    */

    private String dqjkzt;

    /**

    * 当前体温

    */

    private String dqtw;

    /**

    * 当前所在地址

    */

    private String dqszdz;

    /**

    * 当前居住地址

    */

    private String dqjzdz;

    /**

    * 提交时间

    * */

    private String tjsj;

}

复制代码

b.Service层

复制代码

    /**

    * 导出

    * @param yqfkdjBean

    * @author zhouhong

    * @return

    * @throws Exception

    */

    @Transactional(rollbackFor = { Exception.class })

    public DataResult exporYqfkdj(YqfkdjBean yqfkdjBean) throws Exception {

        DataResult result = new DataResult();

        List list = new ArrayList();

        try {

            /* 查询导出信息 */

            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;

    }

    /**

    * 疫情防控信息导出表头

    * @author zhouhong

    * @return List>

    */

    private List> head() {

        List> list = new ArrayList>();

        List head0 = new ArrayList();

        head0.add("序号");

        List head1 = new ArrayList();

        head1.add("姓名");

        List head2 = new ArrayList();

        head2.add("证件号码");

        List head3 = new ArrayList();

        head3.add("联系电话");

        List head4 = new ArrayList();

        head4.add("工作所在单位");

        List head5 = new ArrayList();

        head5.add("是否接触疑似病例");

        List head6 = new ArrayList();

        head6.add("是否与隔离人员同住");

        List head7 = new ArrayList();

        head7.add("当前状态");

        List head8 = new ArrayList();

        head8.add("当前健康状态");

        List head9 = new ArrayList();

        head9.add("体温(°C)");

        List head10 = new ArrayList();

        head10.add("当前所在地址");

        List head11 = new ArrayList();

        head11.add("当前居住地址");

        List head12 = new ArrayList();

        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 = "疫情防控查询导出")

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

        }

    }

深圳网站建设www.sz886.com

你可能感兴趣的:(JAVA实现PDF和EXCEL生成和数据动态插入以及导出)