java通过word模板生成word文档

介绍

上次公司项目需要一个生成word文档的功能,有固定的模板根据业务填充数据即可,由于从来没做过,项目也比较着急于是去网上找有没有合适的工具类,找了好几种,看到其中有freeMark模板生成比较靠谱于是采用这个,正常生成成功了还挺高兴的于是修改优化部署测试,出问题了,由于我一直使用wps可以正常打开,但是同事使用office打不开,于是各种查找原因都没好,于是只能转变思路又试了两种还是不好用,直到发现这款模板生成 poi-tl 真的做的很不错,而且是国人写的,关于学习这个东西还是看官方文档的好。
文档地址: http://deepoove.com/poi-tl

源码

源码查看规则
源码位置: blog-study:static-utils - word
在源码里可以完整的操作

代码展示

public static void main(String[] args) {        //模板、文件、图片路径        String workPath=System.getProperty("user.dir") + "/static-utils/src/main/resources/word/";        String templateName="test.docx";        Map<String, Object> datas = new HashMap<String, Object>() {            {                //文本                put("name","xiaoguo");                put("sex","男");                put("year","20200105");                put("hello","xiaoguo写于2020年一月");

                //自定义表格                RowRenderData header = RowRenderData.build(new TextRenderData("1C86EE", "姓名"), new TextRenderData("1C86EE", "学历"));                RowRenderData row0 = RowRenderData.build("张三", "研究生");                RowRenderData row1 = RowRenderData.build("李四", "博士");                RowRenderData row2 = RowRenderData.build("王五", "博士后");                put("tables", new MiniTableRenderData(header, Arrays.asList(row0, row1, row2)));

                //自定义有序列表                put("testText", new NumbericRenderData(NumbericRenderData.FMT_DECIMAL, new ArrayList<TextRenderData>() {                    {                        add(new TextRenderData("Plug-in grammar"));                        add(new TextRenderData("Supports word text, header..."));                        add(new TextRenderData("Not just templates, but also style templates"));                    }                }));

                //网落图片                put("picture", new PictureRenderData(200, 150, ".jpg", BytePictureUtils.getUrlBufferedImage("https://gss3.bdstatic.com/7Po3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike116%2C5%2C5%2C116%2C38/sign=61c551093f6d55fbd1cb7e740c4b242f/d8f9d72a6059252d937820d3369b033b5ab5b9fd.jpg")));                //本地图片                put("picture2", new PictureRenderData(200, 150, ".jpg", BytePictureUtils.getLocalByteArray(new File(workPath + "c1.jpg"))));

            }        };

        generateWord(datas, workPath + templateName, workPath);    }

    /**     * 通过word模板并生成word文档     *     * @param paramData    参数数据     * @param templatePath word模板地址加模板文件名字     * @param outFilePath  输出文件地址(不带文件名字)     * @return 生成的word文件     */    public static File generateWord(Map<String, Object> paramData, String templatePath, String outFilePath) {        String outFileName = "word_" + System.currentTimeMillis() + "_" + random.nextInt(100) + ".doc";        return generateWord(paramData, templatePath, outFilePath, outFileName);    }

    /**     * 通过word模板并生成word文档     *     * @param paramData    参数数据     * @param templatePath word模板地址加模板文件名字     * @param outFilePath  输出文件地址(不带文件名字)     * @param outFileName  输出文件名字     * @return 生成的word文件     */    public static File generateWord(Map<String, Object> paramData, String templatePath, String outFilePath, String outFileName) {        //判断输出文件路径和文件名是否含有指定后缀        outFilePath = CommonUtil.addIfNoSuffix(outFilePath, "/", "\\");        outFileName = CommonUtil.addIfNoSuffix(outFileName, ".doc", ".docx");        //解析word模板        XWPFTemplate template = XWPFTemplate.compile(templatePath).render(paramData);        //输出文件        FileOutputStream out = null;        File outFile = new File(outFilePath + outFileName);        try {            out = new FileOutputStream(outFile);            template.write(out);            out.flush();        } catch (IOException e) {            log.error("生成word写入文件失败", e);        } finally {            if (template != null) {                try {                    template.close();                } catch (IOException e) {                    e.printStackTrace();                }            }            if (out != null) {                try {                    out.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }        return outFile;    }

原文地址:https://www.cnblogs.com/chunyun/p/12153085.html

时间: 2024-10-15 18:23:46

java通过word模板生成word文档的相关文章

Java iText使用PDF模板生成PDF文档

我们系统需要生成一个可以打印的PDF文档,老板给了我一个Word文档,按照这个Word文档的格式生成PDF文档. 第一步:下载AdobeAcrobat DC,必须使用这个来制作from域. 第二步:使用AdobeAcrobat DC将Word导成PDF文档. 第三步:由于还要加水印的效果,所以还是使用AdobeAcrobat DC来添加水印,非常方便: 添加水印的方法:使用AdobeAcrobat DC打开PDF文档,"工具"->"编辑PDF"->&qu

使用java Apache poi 根据word模板生成word报表

项目开发过程中,客户提出一堆导出报表的需求,需要导出word格式,页眉还需要加上客户公司的logo,试了几种方案,最后选择了用 Apache poi 加上自定义标签的方式实现. 目前功能还比较简单,一些复杂的表格做不了,但是已经基本满足项目需求了. 使用poi读取word模板,替换word中的{text}标签,并根据自定义标签循环生成表格或表格中的行. 代码示例下载:https://download.csdn.net/download/u012775558/10306308 注意,仅支持docx

java 解析excle和生成excle文档

只贴出关键代码,其他一概论之 java解析excle文件: Workbook book = Workbook.getWorkbook(new File(fileName)) ; //filename为需要解析的excle  Sheet sheet = book.getSheet(0);  int rows = sheet.getRows(); int celllength = sheet.getRow(0).length;//只获取标题这么多列的数据,其他的就不管了 List<List> al

【Java】使用Eclipse生成API文档

据说某些公司需要员工们不仅要写好程序,而且要写好API,对于一些编程大神来说,写API是一件麻烦的事情, 其实Eclipse能够轻松地生成API来忽悠人,尤其是你讨厌的根本不会写代码的上司. 当然,这些API根本就不知道有什么用,还不如当面跟你的队友好好解释一下每一句是干什么的,还不如在你的Java文件中注释好每一句话. 1.对于你要生成的API的工程或者某个JAVA文件点右键,选择Export... 2.在弹出的窗口中找到了Javadoc,点下一步-- 3.之后设置好要导出的类的权限与导出目录

利用模板导出文件(二)之jacob利用word模板导出word文件(Java2word)

先下载jacob.jar包. 解压后将jacob.dll放到windows/system32以下或\jre\bin以下. 将jacob.jar增加项目. 这样项目的环境基本上搭建完毕,接下来就是书写相关的代码: /** * 传入数据为HashMap对象,对象中的Key代表word模板中要替换的字段.Value代表用来替换的值. * word模板中全部要替换的字段(即HashMap中的Key)以特殊字符开头和结尾. * 如:$code$.$date$--.以免执行错误的替换. * 全部要替换为图片

利用OpenXml生成Word2007文档

一.OpenXml简介 利用C#生成Word文档并非一定要利用OpenXml技术,至少可以使用微软提供的Office相关组件来编程,不过对于Office2007(确切的说是Word.Excel和PowerPoint2007)及以上版本,微软提供了这些信息组织的另外一种思路:OpenXml技术. OpenXml是微软office2007及之后版本里,对Office信息内容(Word.Excel和PowerPoint)的一种组织方式,当你创建一个Word2007文档:XXX.docx后,它实际上是一

使用模板生成word文档

使用poi-tl根据模板生成word文档,在porm.xml中添加poi-tl依赖,直接上代码 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Map; import com.deepoove.poi.XWPFTemplate; import com.deepoove.poi.render.RenderAPI; import com.thinkge

C#,WPF使用word模板导出word文档

使用word模板导出word文档,首先需要在word模板中插入书签: 根据创建的书签名和位置,将需要写入的内容插入到word文件中. 需要引用  Microsoft.Office.Interop.Word;在添加引用-程序集中搜索可以找到. using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Windows; usin

java根据模板生成word文件

原文:java根据模板生成word文件 源代码下载地址:http://www.zuidaima.com/share/1550463664884736.htm AVA生成word模板程序步骤 1. 将freemarker-2.3.13.jar复制到项目\WEB-INF\lib目录下 2. 编辑模板文件 (1) 将DOC文件另存为xml文件,将xml文件在eclipse环境下打开,右键选"源"→"格式".此处注意xml文件属性是UTF-8. (2) 将xml文件中需要替