在服务器上有一份模板合同,我需要点击不同的合同的时候,用该合同的内容填充到模板合同并下载
在模板合同中需要填充的内容都用${}代替了
请问如何实现呀?
这些都要导入吗?还是只需要导入poi-3.17就可以了?
这几个需要导入哪个呀
在服务器上有一份模板合同,我需要点击不同的合同的时候,用该合同的内容填充到模板合同并下载
在模板合同中需要填充的内容都用${}代替了
请问如何实现呀?
这些都要导入吗?还是只需要导入poi-3.17就可以了?
这几个需要导入哪个呀
@fongjava 回答的已经很好了,
我再补充一个更强大的方案
commons-el 不仅能实现一些简单的变量替换,还能对表达式进行运算。
参见
http://commons.apache.org/dor...
例子
https://www.programcreek.com/...
如果还觉得不够可以试试FreeMarker
XWPFTemplate template = XWPFTemplate.compile("~/file.docx").render(datas);
参见github项目:https://github.com/Sayi/poi-tl
普通文本,渲染数据为:String或者TextRenderData
图片,渲染数据为:PictureRenderData
可以用freemarker实现,之前的一个项目,要生成word报告,最开始想用word模板编辑器,后来觉得复杂了,且效果不好。最后改成freemarker,效果不错,可以在模板中调成自己想要的内容格式,然后导出xml。
字符串替换用 ${string}
表格循环用标签
<#list userList as user>
姓名:${user.userName},性别:${user.sex}
</#list>
可以直接用正则表达式来进行替换,可以试试看Spire.Doc for Java控件,它的代码操作简单,效果也很好。以下是相关代码示例,可以参考下。
import com.spire.doc.*;
import java.util.regex.Pattern;
public class Test {
public static void main(String[] args) throws Exception {
//加载示例文档
Document document = new Document();
document.loadFromFile("Sample.docx");
//匹配以#开头,数字结尾的字符并用Spire.Doc替换
Pattern c = Pattern.compile ("^#(.*?)\\d$");
document.replace(c,"Spire.Doc");
//匹配【】内的字符并用Spire.Doc for Java替换
Pattern c2 = Pattern.compile("【[\\s\\S]*】");
document.replace(c2, "Spire.Doc for Java");
//保存文档
document.saveToFile("Result.docx", FileFormat.Docx_2013);
}
}
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
处理Word可以使用poi,
如何替换使用下面三个类就好了。
使用方法:
运行结果:

Screen Shot 2017-12-26 at 11.43.29