读word模板批量生成制式文件

这篇具有很好参考价值的文章主要介绍了读word模板批量生成制式文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、Maven依赖

  <dependency>
    <groupId>fr.opensagres.xdocreport</groupId>
    <artifactId>fr.opensagres.xdocreport.core</artifactId>
    <version>2.0.2</version>
  </dependency>
  <dependency>
    <groupId>fr.opensagres.xdocreport</groupId>
    <artifactId>fr.opensagres.xdocreport.document</artifactId>
    <version>2.0.2</version>
  </dependency>
  <dependency>
    <groupId>fr.opensagres.xdocreport</groupId>
    <artifactId>fr.opensagres.xdocreport.template</artifactId>
    <version>2.0.2</version>
  </dependency>
  <dependency>
    <groupId>fr.opensagres.xdocreport</groupId>
    <artifactId>fr.opensagres.xdocreport.document.docx</artifactId>
    <version>2.0.2</version>
  </dependency>
  <dependency>
    <groupId>fr.opensagres.xdocreport</groupId>
    <artifactId>fr.opensagres.xdocreport.template.freemarker</artifactId>
    <version>2.0.2</version>
  </dependency>

2、.docx或.doc格式的word模板准备

  1. 创建.docx文件,编写内容

读word模板批量生成制式文件,# java,java,word

  1. 添加编辑域

按Ctrl+F9,创建编辑域
读word模板批量生成制式文件,# java,java,word
右击,选择编辑域
读word模板批量生成制式文件,# java,java,word
选择邮件合并,修改域代码要注意域代码的格式为:MERGEFIELD ${name}name为需要填充的内容。
读word模板批量生成制式文件,# java,java,word
        依次类推,填上所有的编辑域,调整文档格式等,就完成了word文档准备。
        之后需要代码读word模板转数据流,进行代码域的变量批量替换,重新写文件就完成的word文件生成工作。

3、读word模板,批量替换代码域,生成文件,demo

package com.dongzi.utils.word;

import fr.opensagres.xdocreport.core.XDocReportException;
import fr.opensagres.xdocreport.document.IXDocReport;
import fr.opensagres.xdocreport.document.registry.XDocReportRegistry;
import fr.opensagres.xdocreport.template.IContext;
import fr.opensagres.xdocreport.template.TemplateEngineKind;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

/**
 * 读word模板,生成数据
 */
public class ReadWordTemplate {
	
    public static void main(String[] args) throws IOException, XDocReportException {
        // 从resources/template中获取word模板数据
        IXDocReport ixDocReport = readWord("info.docx");
        IContext context = ixDocReport.createContext();
        // set value
        // putTemplateValue_1(context);
        // putTemplateValue_2(context);
        putTemplateValue_3(context);


        // =============

        FileOutputStream out = new FileOutputStream("D:/temp/docx模板输出.docx");
        ixDocReport.process(context, out);
        out.flush();
        out.close();
    }

    public static IXDocReport readWord(String fileName) throws IOException, XDocReportException {
        // 读模板的方式
        // 方式1:通过URL加载
//        URL url = ClassLoader.getSystemClassLoader().getResource("template/" + fileName);
//        assert url != null;
//        InputStream in_1 = url.openStream();

        // 方式2:系统资源转数据流
        InputStream in_2 = ClassLoader.getSystemResourceAsStream("template/" + fileName);

        // 方式3:spring的类加载器,获取资源
//        ClassPathResource pathResource = new ClassPathResource("template/" + fileName);
//        InputStream in_3 = pathResource.getInputStream();

        return XDocReportRegistry.getRegistry().loadReport(in_2, TemplateEngineKind.Freemarker);
    }

    // 设置docx模板值
    public static void putTemplateValue_1(IContext context) {
        // docx文档模板读取,必须要预先再模板里面设置文本域,Ctrl+F9
        /*
            1. Ctrl+F9,打开编辑域
            2. 域选择“邮件合并”,域代码为:MERGEFIELD ${yourAddress}
            3. 页面展示的格式为:«${yourAddress}»,模板可替换
         */
        context.put("yourName", "孙悟空");
        context.put("yourAge", "500");
        context.put("yourAddress", "花果山水帘洞");
    }

    public static void putTemplateValue_2(IContext context) {
        // 生成数据
        Map<String, Object> mapValues = new HashMap<>();
        mapValues.put("yourName", "齐天大圣");
        mapValues.put("yourAge", 36000);
        mapValues.put("yourAddress", "花果山水帘洞");
        //
        context.putMap(mapValues);
    }

    public static void putTemplateValue_3(IContext context) {
        // 生成数据
        Map<String, Object> mapValues = new HashMap<>();
        mapValues.put("yourName", "派大星");
        mapValues.put("yourAge", 36000);
        mapValues.put("yourAddress", "黄土高坡");

        for (int i = 1; i <= 10; i++) {
            mapValues.put("index_" + i, i);
            mapValues.put("value_" + i, i + 2);
        }
        //
        context.putMap(mapValues);
    }

}

4、结果展示

读word模板批量生成制式文件,# java,java,word
至此,整个模板读取生成过程全部结束。文章来源地址https://www.toymoban.com/news/detail-683889.html

到了这里,关于读word模板批量生成制式文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Uipath 读取Word模板实现录用通知书PDF批量生成

    本文主要讲解如何使用Uipath 读取Excel 面试人员信息表,读取Word模板,再批量生成录用通知书PDF文件,该自动化大大提高了HR 的工作效率。 注:本方案实现采用无代码模式,通过拖拉控件实现。 本示例采用简单的序列流程图实现,如下图: 注:实际开发采用企业级开发框架

    2024年02月21日
    浏览(33)
  • itextpdf实现word模板生成文件

    使用word模板生成文件,如下图,将左侧的模板生成为右侧的填充word文档。 引入依赖 创建模板,创建一份template2.docx文件,内容如下 编写代码 编写测试用例,并执行测试用例 生成得到被填充出来的文件。

    2024年02月11日
    浏览(49)
  • SpringBoot整合FreeMarker生成word表格文件(使用FTL模板)

    一,什么是FreeMarker,FTL模板? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 它不是面向最终用户的,而是一个Java类库,是一款程序员可以嵌入他们所开发产品的组件。 模板编写为

    2024年03月24日
    浏览(56)
  • Java的POI-word模板生成目录自动更新--完美解决

    目录问题: 解决word模板目录在第一次打开不更新就不显示目录问题的原因:之前是通过动态替换域代码toc的形式,生成了一段域代码放置在Word的目录行,打开的时候无法直接触发渲染和更新。 方案:通过插入-文档组件-域组件-目录和索引,将当前的模板的目录直接生成到文

    2024年02月11日
    浏览(37)
  • Java使用poi-tl生成word模板-动态数据列表

    Java使用poi-tl生成word模板-动态数据列表 第一步,添加poi-tl的依赖 第二步,准备word模板文件             模板中文本信息可以用    {{  }}   标签指定             例如在word文档中写入:{{var}} //会将word文档中的对位置的标签替换为map中的数据             模板

    2024年02月14日
    浏览(52)
  • 根据模板动态生成word(一)使用freemarker生成word

    @ 目录 一、准备模板 1、创建模板文件 2、处理模板 2.1 处理普通文本 2.2 处理表格 2.3 处理图片 二、项目代码 1、引入依赖 2、生成代码 三、验证生成word 首先先建立一个word文件,输入模板内容freemaker的内容,下面是本次演示的word文件。 然后将word文件另存为 .xml 文件,然后再

    2024年02月13日
    浏览(85)
  • Java实现打包压缩文件或文件夹生成zip以实现多文件批量下载

    有时候在系统中需要一次性下载多个文件,但逐个下载文件比较麻烦。这时候,最好的解决办法是将所有文件打包成一个压缩文件,然后下载这个压缩文件,这样就可以一次性获取所有所需的文件了。 下面是一个名为CompressUtil的工具类的代码,它提供了一些方法来处理文件压

    2024年02月06日
    浏览(58)
  • java 使用POI-TL根据word模版,生成word文件,含图片,富文本。

    1.引入mavna坐标` 2 .poi-tl-ext插件主要用于富文本内容格式在word展现 3.word模版创建 3.具体代码实现 4.本文的miniourl路径实质为网络路径的文件。

    2024年02月16日
    浏览(68)
  • JAVA使用POI对Word docx模板文件替换数据工具类并通过浏览器下载到本地

    需求:需要上传一个带有占位符的模板至数据库保存,然后解析模板的占位符,通过类计算结果替换模板中的占位符,并且保存至本地 难点:1.由于我数据库保存是本地保存,并没有path 所以获取模板的path是个难点 2.如何使用计算类,由于我的类是和占位符绑定的,什么样的

    2024年02月16日
    浏览(48)
  • 根据模板动态生成word(三)使用poi-tl生成word

    @ 目录 一、前言 1、什么是poi-tl 2、官方信息 2.1 源码仓库 2.2 中文文档 2.3 开源协议 3、poi-tl的优势 3.1 poi-tl和其他模板引擎的对比 3.2 poi-tl Word模板引擎支持的功能 二、基本的使用配置 1、引入依赖 1.1 Maven 1.2 Gradle 2、配置 2.1 新建配置 2.2 标签前后缀替换 2.3 加载模板 2.4 填充数

    2024年02月13日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包