我的编程空间,编程开发者的网络收藏夹
学习永远不晚

java按照模板导出pdf或者word

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

java按照模板导出pdf或者word

一、java按照模板导出pdf

(一)制作模板

 1、在word里制作模板

        因为PDF常用的软件不支持编辑,所以先用Word工具,如WPS或者Office新建一个空白Word文档,里面制作出自己想要的样式。

将Word转换成PDF形式

         将设置好的Word文档转换成PDF形式,保存起来。

编辑PDF准备表单 

        用Adobe Acrobat DC 软件打开保存好的PDF模板文件,点击右侧的准备表单按钮

        接下来进行数据源配置,在要显示图像的区域,点击鼠标右键,选择文本域,设定好图像的显示位置,并指定数据源字段。需要注意的是,配置的数据源字段必须与Java中的实体类对象的字段名保持一致。

         配置完成之后保存pdf文件,留作模板使用。

(二)java代码编写

导入依赖 

    com.itextpdf    itextpdf    5.5.13    com.itextpdf    itext-asian    5.2.0

实体类

import lombok.Data;@Datapublic class MsaBusinessVO {        private String total;        private String lastToatl;        private String dealNum;        private String lastDealNum;        private String completeNum;        private String lastCompleteNum;        private String afterSales;        private String lastAfterSales;}

service层代码实现

void generateMsaBusiness(String id,HttpServletResponse response) throws UnsupportedEncodingException;
@Overridepublic void generateMsaBusiness(String id,HttpServletResponse response) throws UnsupportedEncodingException {    //通过id获取msaBusinessVO    MsaBusinessVO msaBusinessVO = msaBusinessDao.getMsaBusinessInfo(id);    // 模板名称    String templateName = "msaBusiness.pdf";    String path = "/static/template/";    //String path = "";    // 获取操作系统名称,根据系统名称确定模板存放的路径        // 生成导出PDF的文件名称    String fileName = "海事行政执法业务数据统计"+msaBusinessVO.getStartDate()+"至"+msaBusinessVO.getEndDate()+".pdf";    fileName = URLEncoder.encode(fileName, "UTF-8");    // 设置响应头    response.setContentType("application/force-download");    response.setHeader("Content-Disposition",            "attachment;fileName=" + fileName);    OutputStream out = null;    ByteArrayOutputStream bos = null;    PdfStamper stamper = null;    PdfReader reader = null;    try {        // 保存到本地        // out = new FileOutputStream(fileName);        // 输出到浏览器端        out = response.getOutputStream();        // 读取PDF模板表单        reader = new PdfReader(path + templateName);        // 字节数组流,用来缓存文件流        bos = new ByteArrayOutputStream();        // 根据模板表单生成一个新的PDF        stamper = new PdfStamper(reader, bos);        // 获取新生成的PDF表单        AcroFields form = stamper.getAcroFields();        // 给表单生成中文字体,这里采用系统字体,不设置的话,中文显示会有问题        //BaseFont font = BaseFont.createFont("C:/WINDOWS/Fonts/SIMSUN.TTC,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);        BaseFont bf = BaseFont.createFont("/static/fonts/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);        form.addSubstitutionFont(bf);        // 装配数据        this.setMsaBusinessToForm(form, msaBusinessVO);        // 表明该PDF不可修改        stamper.setFormFlattening(true);        // 关闭资源        stamper.close();        // 将ByteArray字节数组中的流输出到out中(即输出到浏览器)        Document doc = new Document();        PdfCopy copy = new PdfCopy(doc, out);        doc.open();        //改成这样就不会只显示一页了。        PdfImportedPage importPage = null;        ///循环是处理成品只显示一页的问题        for (int i=1;i<=reader.getNumberOfPages();i++){            importPage = copy.getImportedPage(new PdfReader(bos.toByteArray()), i);            copy.addPage(importPage);        }        doc.close();        log.info("*****************************PDF导出成功*********************************");    } catch (Exception e) {        e.printStackTrace();    } finally {        try {            if (out != null) {                out.flush();                out.close();            }            if (reader != null) {                reader.close();            }        } catch (Exception e) {            e.printStackTrace();        }    }}public void setMsaBusinessToForm(AcroFields form,MsaBusinessVO msaBusinessVO) throws DocumentException, IOException {        form.setField("total",msaBusinessVO.getTotal());//进出港船舶总艘次    form.setField("lastTotal",msaBusinessVO.getLastTotal());//进出港船舶总艘次(去年同期)    form.setField("dealNum",msaBusinessVO.getDealNum());//进出港报告内河船艘次    form.setField("lastDealNum",msaBusinessVO.getLastDealNum());//进出港报告内河船艘次(去年同期)    form.setField("completeNum",msaBusinessVO.getCompleteNum());//进出港报告海船艘次    form.setField("lastCompleteNum",msaBusinessVO.getLastCompleteNum());//进出港报告海船艘次(去年同期)    form.setField("afterSales",msaBusinessVO.getAfterSales());//进出口岸查验船舶艘次    form.setField("lastAfterSales",msaBusinessVO.getLastAfterSales());//进出口岸查验船舶艘次(去年同期)}

Controller层代码实现

@GetMapping("/generateMsaBusiness")public void generateMsaBusiness(String id,HttpServletResponse response){    try {        msaBusinessService.generateMsaBusiness(id,response);    } catch (UnsupportedEncodingException e) {        e.printStackTrace();    }}

二、java按照模板导出word

(一)制作模板

word模板文件处理,如下图所示在word 文档中填值的地方写入占位变量,值得注意的是,word中的占位变量要与java代码中写入的元素名称保持一致。

 2、将word文档另存为xml文件,编辑如下图,找到填写的占位,修改为${total}格式

 3、将文件后缀名改为.ftl文件 ,留作模板使用。

 (二)java代码编写

引入依赖

    org.freemarker    freemarker    2.3.28    compile

service层代码实现

void exportSimpleWord(Map param);
@Override@Transactional(rollbackFor = Exception.class)public void exportSimpleWord(Map param){        //param.put("total",total);    //param.put("lastTotal",lastTotal);             try {        // 要填充的数据 dataMap, 注意map的key要和word中${xxx}的xxx一致        //Configuration用于读取ftl文件        Configuration configuration = new freemarker.template.Configuration(Configuration.VERSION_2_3_23);        System.out.println(configuration.getVersion());        configuration.setDefaultEncoding("utf-8");        //指定路径的第一种方式(根据某个类的相对路径指定)        configuration.setClassForTemplateLoading(this.getClass(), "/static/template/");        // 输出文档路径及名称        File outFile = new File("D:/附件"+new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())+".doc");        //以utf-8的编码读取ftl文件  名字要正确,最好不要放在本地,可能会出现找不到。        Template t1 = configuration.getTemplate("unpackCheck.ftl", "utf-8");        // Template t =  configuration.getTemplate("a.ftl","utf-8");        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);        t1.process(param, out);        out.close();    }catch (IOException e) {        e.printStackTrace();    } catch (TemplateException e) {        e.printStackTrace();    }}

Controller层代码实现

@PostMapping("/exportSimpleWord")public void exportSimpleWord(@RequestBody Map param) {    dangerCompareService.exportSimpleWord(param);}

来源地址:https://blog.csdn.net/weixin_40052304/article/details/130859464

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

java按照模板导出pdf或者word

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

asp.net 按指定模板导出word,pdf实例代码

这篇文章介绍了asp.net 按指定模板导出word,pdf实例代码,有需要的朋友可以参考一下
2022-11-15

java 导出word,java根据提供word模板导出word文档

本文主要讲解,利用poi-tl在word中动态生成表格行,进行文字、图片填充。一共提供了两种方式,1.基于本地文件 2.基于网络文件 本文讲解思路,1.先看示例,2. 示例对应的代码展示 3. 基本概念讲解(api自行查阅文档)。 这
2023-08-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录