java word 数据填充_整理关于Java进行word文档的数据动态数据填充

JAVA生成word优缺点对比

所用技术

优点

缺点

Jacob

功能强大

代码量大,设置样式繁琐;需要windows平台支持,无法跨平台

Apache POI

读写excel功能强大、操作简单

一般只用它读取word,能够创建简单的word,不能设置样式,功能太少

Java2word

功能强大,操作简单

能满足一般要求,不支持07格式,国人开发的,参考资料较多,需要windows平台支持

iText

功能全,能满足一般要求

不能直接生成或操作doc文档,只能生成rtf格式的文档,rtf也可以用word打开

JSP

操作简单,代码量少

能把当前页面导出简单的word,不能设置样式,美观性差,无法操作word

XML(最佳)

代码量少,样式、内容容易控制,打印不变形,完全符合office标准

需要提前设计好word模板,把需要替换的地方用特殊标记标出来

JAVA生成pdf优缺点对比

所用技术

优点

缺点

openoffice

本身就是office软件,很容易设计一些文档模板,支持java调用实现word转换成pdf

需要先安装,设计好pdf模板样式,然后用程序来填充那些预留好的变量

itext

能满足要求,本身提供了一些api

无法识别很多html的tag和attribute,无法识别css,需要用其api函数来设置样式

Jasper Report

能满足要求,市面上使用的比较多,相关文档多

复杂,很难完全掌握,需要先设计模板,强依赖于IDE进行可视化编辑

flying sauser(最佳)

能解析html和css输出成image、pdf等格式,操作简单,api强大

需要编写freemarker或velocity模板,打造html,勾画pdf的样式

二、然后我们看下使用freemarker 来对word进行的动态填充的流程

1.准备word文档(最好用office2007 如果用别的版本低版本的会打不开)

(1)提前把你要用的文档再word上做好

02448a8f805f0c05dd14f2c78c8000e9.png

(2)然后把文档另存为xml

0ae0c532233e28fb5827176311306a52.png

(3)然后用打开xml文件,再网上找一个xml文件 格式化在线就可以格式化,记得转完xml文件之后不要用word再打开,切记)

后面会得到一个这样的文件。

308e07b0eea4e72fd5584f666a2efb3e.png

(4)拿到之后找到你要替换值得地方写上freemarker标签${}就可以了

8cea22121fab4fd30318d3588c32a2d0.png

(5) 修改完毕将模板文件的后缀改为 .ftl   注意:一定不要用word打开ftl模板文件,否则xml内容会发生变化,导致前面的工作白做了。  可以使用其他的编辑器打开

837f63f24bb7474848518056ef58f4a7.png

(6)接下来就是转化填充了

e90b1a7e0fa89b350919c934ce5f5556.png

接下来就是总结了:

其实吧,我个人感觉这个freemarker框架没有多大卵用,说白了就是一个字符的替换,其实就是将doc转xml文件,然后替换可以将内部的文字替换,替换完,再输出保存到doc文件,感觉这个框架并没有任何啥特别的,自己就可以写,不过,这种轮子别人造好了,咱们确实拿来用就可以了。

但是,我们的目标并不是为了完成任务而去做一件事,我们更期望懂是什么?怎么做?为什么? 这是我们的核心

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中,可以使用 Apache POI 库来操作 Word 文档。要实现动态填充数据,可以使用 Word 模板和占位符。具体步骤如下: 1. 创建 Word 模板,并在需要填充数据的位置添加占位符,例如 ${name}。 2. 使用 Apache POI 打开模板文件,并读取文件中的内容。 3. 将读取到的内容转换为一个 XWPFDocument 对象。 4. 使用 XWPFDocument 对象中的方法,查找并替换所有的占位符,例如使用 replaceAll 方法将 ${name} 替换为具体的数据。 5. 保存修改后的 Word 文档。 下面是一个示例代码,演示如何实现动态填充数据: ``` import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; public class WordFiller { public static void main(String[] args) throws IOException { // 读取 Word 模板 FileInputStream fis = new FileInputStream("template.docx"); XWPFDocument doc = new XWPFDocument(fis); // 填充数据 Map<String, String> data = new HashMap<>(); data.put("name", "张三"); data.put("age", "20"); for (XWPFParagraph p : doc.getParagraphs()) { String text = p.getText(); for (String key : data.keySet()) { if (text.contains("${" + key + "}")) { text = text.replace("${" + key + "}", data.get(key)); } } p.setText(text); } // 保存 Word 文档 FileOutputStream fos = new FileOutputStream("output.docx"); doc.write(fos); fos.close(); doc.close(); } } ``` 在代码中,我们首先读取了一个名为 template.docx 的 Word 模板文件。然后,我们定义了一个存储数据的 Map 对象,并将需要填充数据存储在其中。接下来,我们遍历文档中的所有段落,查找并替换所有的占位符。最后,我们将修改后的文档保存到一个名为 output.docx 的文件中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值