Java 生成 Word 的几种方案

参考

​ 主要有这么一些工具可以使用 Jacob、Apache POI、Java2word、iText,还有一种方法是使用XML作为模板。

​ 使用 XML 的思路:先用 office 编辑好word的样式,然后另存为xml,将xml翻译为FreeMarker模板,最后用java来解析 FreeMarker模板 并输出 Word 文档。经测试这样方式生成的word文档完全符合 office 标准,样式、内容控制非常便利,打印也不会变形,生成的文档和office中编辑文档完全一样。 ===> 参考

  • Jacob 和 Java2word需要服务器端支持 office,相对麻烦。
  • Apache POI 功能较少。===> 参考

​ 这里推荐一个刚刚发现的产品,由成都冰蓝科技开发的产品 Spire,可以用于操作各种文档,目前我只体验过 Spire.Doc for Java,个人认为使用简单,功能强大,对样式的支持非常好(虽然Spire主要面向企业提供产品,但是也提供了免费使用的产品)。

使用 Spire.Doc 替换 Word 模板中占位符

这里使用 Maven 下载 Spire.Doc 也可以直接下载 jar 包 ==> 参考

1️⃣:首先引入 Maven 依赖

​ 在 Maven 的官方仓库或者阿里云镜像仓库中是没有 Spire 依赖的,所以需要配置 Spire 自己的一个仓库源。

<repositories><repository><id>com.e-iceblue</id><url>https://repo.e-iceblue.cn/repository/maven-public/</url></repository>
</repositories>

​ 以下就是 Spire.Doc for Java 的依赖

<!--spire.doc 操作word文档-->
<dependency><groupId>e-iceblue</groupId><artifactId>spire.doc.free</artifactId><version>3.9.0</version>
</dependency>

2️⃣:设计一个Word模板,此文档中存在占位符

3️⃣:编码

public class TestSpireWord {@Testpublic void generateAndReplaceText() {Document doc = new Document();doc.loadFromFile("F:\\yourlocation\\template.docx", FileFormat.Docx);Map<String, String> map = new HashMap<>();map.put("${name}", "张山");map.put("${birthday}", "2021-10-18");map.put("${result}", "成功");map.put("${col}", "第一列");map.put("${col1}", "第二列");map.put("${col2}", "第三列");replaceSpecialWord(doc, map);// 保存为文件doc.saveToFile("F:\\yourlocation\\result.docx",FileFormat.Docx);// 或者保存至输出流中//ByteArrayOutputStream os = new ByteArrayOutputStream();//doc.saveToStream(os, FileFormat.Docx);}/*** 替换Word文件中 ${} 标识的特殊字符* <br>* <strong>注意:如果存在部分特殊表示无法替换,请尝试将 ${} 的整个字符串复制到word中,有可能word没有将${}识别为一个整体</strong>* @param doc: Sprire Document* @param map: 占位符${} 与 需要替换的为字符串的对应关系*/public void replaceSpecialWord(Document doc, Map<String, String> map) {// 正则表达式,匹配所有的占位符 ${}Pattern pattern = Pattern.compile("\\$\\{.*?}");// 根据正则表达式获取所有文本TextSelection[] allPattern = doc.findAllPattern(pattern);// 逐个替换占位符for (TextSelection textSelection : allPattern) {String tmp = map.get(textSelection.getSelectedText());System.out.print(textSelection.getSelectedText());int res = doc.replace(textSelection.getSelectedText(), tmp, true, true);System.out.println(": " + res);}}
}

最终结果:

// 控制台输出
${name}: 1
${birthday}: 1
${result}: 1
${col}: 1
${col1}: 1
${col2}: 1

​ 可以看到使用 Spire.Doc for Java 替换占位符十分简单,并且不会破坏模板的原有样 式。

​ 如果需要了解 Spire.Doc for Java 的更多操作,参考 ===> 官方文档

Java操作Word文档相关推荐

  1. Java操作word文档将docx转换为pdf格式

    Java操作word文档将docx转换为pdf格式 一.整体说明 在上传 Office 课件时,格式有:doc,docx,xls,xlsx,ppt,pptx,程序需要将其 转换成 pdf 格式, 才能 ...

  2. java操作word文档(文字,图片,表格添加以及替换操作)

    注:本文由于个人工作需要,有对多个他人博文进行借鉴,但是多数博文都只是讲到了小部分,例如图片/表格的操作,都只有根据书签进行替换,比较片面,本人有总结到根据文字进行图片/表格的替换,希望可以帮到更多有 ...

  3. Java 操作 word 文档 (三)段落Paragraphs,文本加粗、斜体、字体、字体大小、复杂文本

    目录 1.段落标签 2.引入 docx4j 2.1 引入 docx4j 的 maven 依赖 2.2 加载文档 2.3 获取段落中的文本 3.<w:r> 的属性 4.设置文本字体与大小 4 ...

  4. Java 操作 word 文档 (二)初识 WordprocessingML 标签

    在初识 word 文档 一文中,简单的介绍了一下 word 文档的格式.本文简单介绍 document.xml 文件中的 WordprocessingML 标签(本文简称 WordML) ,后续的文章 ...

  5. spire.doc 让java操作word文档更简单优雅

    Spire.Doc for Java 是一款专业的 Java Word 组件,开发人员使用它可以轻松地将 Word 文档创建.读取.编辑.转换和打印等功能集成到自己的 Java 应用程序中.作为一款完 ...

  6. Java操作Word文档添加水印(文字/图片)

    水印是一种常用于各种文档的声明.防伪手段,一般可设置文字水印或者加载图片作为水印.以下内容将分享通过Java编程给Word文档添加水印效果的方法. 使用工具:Free Spire.Doc for Ja ...

  7. java操作word文档,深度解析,值得收藏

    Java虚拟机内存模型 Java虚拟机内存模型中定义的访问操作与物理计算机处理的基本一致! Java中通过多线程机制使得多个任务同时执行处理,所有的线程共享JVM内存区域main memory,而每个 ...

  8. java将WORD文档转换成pdf文件

    总结对jacob和Itext学习总结.本文试验的是将WORD转换成PDF文件. 实现思路 一.先将WORD文档转换成HMTL文件格式(参阅我的前一文<JAVA操作WORD文档). 二.用流读取H ...

  9. java拼接word文档

    #java拼接word文档 说到java操作word 文档,其实网上都已经讲的很多了.我就不再一一赘述了,这里我只记录下使用 docx4j 拼接word文档,使用jacob 调用word 进程生成或者 ...

最新文章

  1. 基于OpenCV的网络实时视频流传输
  2. oracle之TNS:无监听程序解决办法
  3. 2015年9月13日-9月15日课程作业(sed、awk)
  4. 最舒适的路线 第六届
  5. apache php mysql下载_linux+apache+php+mysql 安装
  6. 10投屏后没有声音_手机投屏到电视没有声音?
  7. 关于修改了virc(增加了:set nu)但是vim行号还是不显示的问题
  8. JavaWeb --第一章Web基本概念
  9. PL2303 Windows8.1驱动的问题
  10. silverlight---游戏中的人工智能之追逐与闪躲
  11. C# 一次性获取二维数组中的一维数组数据
  12. Oracle数据库管理之创建和删除数据库
  13. 人行地区代码一览表_世界各国和地区名称代码表
  14. for循环及判断语句的20个经典习题
  15. 安卓外置SD卡linux,Android获取机身存储、内置SD卡与外置TF卡路径
  16. 词向量介绍以及Word2Vec的pytorch实现
  17. java 中prehandle_Spring MVC中拦截器HandlerInterceptorAdapter中的preHandle方法
  18. 【Mysql】Mysql GTID复制进程出现异常,出现断点
  19. 【实战场景】商城-折扣活动设计方案
  20. 数学之美番外篇:平凡而又神奇的贝叶斯方法(转自刘未鹏)

热门文章

  1. Camera Shading介绍
  2. android如何用真机测试,android studio如何使用真机测试app
  3. FileNotFoundException: http:\localhos46087125.jpg (文件名、目录名或卷标语法不正确
  4. 给大家推荐一个大大的萌妹子,算是我学计算机以来遇到的最喜欢的妹子吧!23333333
  5. 社会化媒体营销方案简介
  6. 404 Note Found队 Alpha7
  7. 2017年大数据从业者又要涨工资了!
  8. ZeroDivisionError: integer division or modulo by zero
  9. mars3d中时间的转换
  10. 阿里开放平台接入——开放平台注册与API调用