java根据模板实现填充word内容并转换为pdf

 更新时间:2025年04月08日 10:10:01   作者:ByteX  
这篇文章主要为大家详细介绍了java如何根据模板实现填充word内容并转换为pdf,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

1.word模板填充内容

使用EasyPoi写入Word文档。

import cn.afterturn.easypoi.word.WordExportUtil;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.poi.xwpf.usermodel.XWPFDocument;

import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


public class WriteWordtemplate {


    public static void main(String[] args) throws Exception {
        Map<String, Object> params = createDate();
        String sourceFile = "d:/temp/模版word3.docx";
        String targetFile = "d:/temp/输出结果3.docx";
        FileOutputStream fos = null;
        try {
            //获取模板文档
            File templateFile = new File(sourceFile);
            System.out.println(templateFile.getName());
            // 写入word
            XWPFDocument doc = WordExportUtil.exportWord07(templateFile.getPath(), params);
            fos = FileUtils.openOutputStream(new File(targetFile));
            doc.write(fos);
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            IOUtils.closeQuietly(fos);
        }
    }

    private static Map<String, Object> createDate() {

        //填充数据
        List<WordExportBatch> resultList = new ArrayList<>();
        WordExportBatch wordExport = new WordExportBatch();
        WordExportBatch wordExport1 = new WordExportBatch();
        wordExport.setCreateDate("2022/9/30");
        wordExport1.setCreateDate("2022/9/28");
        wordExport.setNumber("11");
        wordExport.setExMoneny("11");
        wordExport.setExFunc("支付宝");
        wordExport1.setNumber("15");
        wordExport.setAmount("1234.5");
        wordExport1.setAmount("2345.77");
        wordExport.setEndDate("2022/12/31");
        wordExport1.setEndDate("2022/11/30");
        wordExport.setType("支付宝");
        wordExport1.setType("微信");
        wordExport1.setExMoneny("22");
        wordExport1.setExFunc("微信");
        resultList.add(wordExport);
        resultList.add(wordExport1);
        //准备数据
        Map<String, Object> params = new HashMap<>();
        params.put("number", "112");
        params.put("amount", "1234.5");
        params.put("endDate", "2022/11/30");
        params.put("resultList", resultList);
        return params;
    }

}

pom依赖可以参考:使用EasyPoi实现word文档生成和段落循环

2.把word转换为pdf

word生成pdf的方法比较多,调研了常用的方式

一种方式是部署一台windowserver,对外提供接口来进行生成,能最大程度还原格式。

第二种方式就是利用jodconverter,会有少许的失真。

现在介绍的是基于jodconverter把word转换为PDF。首先引入jar包

        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-local</artifactId>
            <version>4.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.jodconverter</groupId>
            <artifactId>jodconverter-spring-boot-starter</artifactId>
            <version>4.2.2</version>
        </dependency>

在配置文件中加入如下配置

jodconverter:
  local:
    enabled: true             # 启用本地模式
    office-home: /opt/libreoffice7.5    # LibreOffice 的安装路径
    max-tasks-per-process: 10 # 每个 Office 进程处理的最大任务数
    port-numbers: 8202        # LibreOffice 后台服务使用的端口号,可修改

在处理类中注入,之所以使用@Lazy是因为加载的使用会报错,让它延迟加载。

     @Lazy
   @Autowired
   private DocumentConverter converter;
    
 public void wordConvertToPdf(File wordFile, File pdfFile) {
        try {
            logger.info("word转换pdf开始");
            converter.convert(wordFile).to(pdfFile).execute();
            logger.info("word转换pdf结束");
        } catch (Exception e) {
            logger.error("word转pdf异常", e);
        }
    }

3.后续使用

之前写过word模板生成段落和生成表格的段落。

结合起来就能生成相对完整的word了。后续如果需要盖章什么的直接拿生成的pdf文件就可以了。

到此这篇关于java根据模板实现填充word内容并转换为pdf的文章就介绍到这了,更多相关java模板填充word内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现的properties文件动态修改并自动保存工具类

    Java实现的properties文件动态修改并自动保存工具类

    这篇文章主要介绍了Java实现的properties文件动态修改并自动保存工具类,可实现针对properties配置文件的相关修改与保存功能,需要的朋友可以参考下
    2017-11-11
  • 简单了解JAVA内存区域效果知识

    简单了解JAVA内存区域效果知识

    这篇文章主要介绍了简单了解JAVA内存区域效果知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 解决表单post,get到springMVC后台乱码的问题

    解决表单post,get到springMVC后台乱码的问题

    下面小编就为大家分享一篇解决表单post,get到springMVC后台乱码的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • 浅谈Java8 的foreach跳出循环break/return

    浅谈Java8 的foreach跳出循环break/return

    这篇文章主要介绍了Java8 的foreach跳出循环break/return,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • SpringMVC拦截器超详细解读

    SpringMVC拦截器超详细解读

    SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。 依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用
    2022-07-07
  • Java排序算法之堆排思想及代码实现

    Java排序算法之堆排思想及代码实现

    今天小编就为大家分享一篇关于Java排序算法之堆排思想及代码实现,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • IntelliJ IDEA Project窗口的一些设置详解

    IntelliJ IDEA Project窗口的一些设置详解

    这篇文章主要介绍了IntelliJ IDEA Project窗口的一些设置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • SpringBoot之HandlerInterceptor拦截器的使用详解

    SpringBoot之HandlerInterceptor拦截器的使用详解

    这篇文章主要介绍了SpringBoot之HandlerInterceptor拦截器的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • 详解Java中方法重写和方法重载的6个区别

    详解Java中方法重写和方法重载的6个区别

    方法重写和方法重载都是面向对象编程中,那么方法重写和方法重载有哪些区别,本文就详细的来介绍一下,感兴趣的可以了解一下
    2022-01-01
  • springboot的maven多模块混淆jar包的实现方法

    springboot的maven多模块混淆jar包的实现方法

    springboot可以使用proguard-maven-plugin 这个插件 在 pom.xml 中自定义proguard 的指令,本文基于 springboot + maven + proguard 的maven多模块架构进行代码混淆,需要的朋友可以参考下
    2024-03-03

最新评论