当前时间为2019-5-15
环境jdk8
poi4.1(有很多别的包 防止后续来参考的弄错包 我给你们打包好了 放在下面链接中 )
刚到新的公司 就接到了 一个这样的需求 通过java把word模板填充数值变为一个word文件 (一想就想到了poi)并且要转为pdf格式 (这里就不做分析了 看下一篇有讲解)
然后就开始着手 我用的是poi的4.1
创建项目-建造类-导入包-写方法
/**
* 用一个docx文档作为模板,然后替换其中的内容,再写入目标文档中。
* 赵海鹏 2019-5-15
* @throws Exception
*/
@Test
public void testTemplateWrite() throws Exception {
//获取值直接写入新的word中
Map<String, Object> params = new HashMap<String, Object>();
params.put("", "");
params.put("", "");
params.put("", "");
params.put("", "");
params.put("", "");
params.put("", "");
String filePath = "D:\\需要读取的docx路径.docx";
InputStream is = new FileInputStream(filePath);
XWPFDocument doc = new XWPFDocument(is);
//替换段落里面的变量
this.replaceInPara(doc, params);
//替换表格里面的变量
this.replaceInTable(doc, params);
//最文末创建一个任意行表格
//这里我加的这个动态获取是因为我们是web项目这个模板下面需要表格还是动态的 所以测试时候我就先随便给了两个值 h j。
//控制h行j列
int h=3;
int j=5;
XWPFTable table1 = doc.createTable(h, j);
table1.setWidth(100);
// 获取到刚刚插入的行
XWPFTableRow row0 = table1.getRow(1);
//合并单元格(这个是个公共方法 我写在了下面)
mergeCellsHorizontal(table1,0,0,4);
// 设置单元格内容
row0.getCell(0).addParagraph().createRun().setText("这里是写表格的表头文字");
row0.getCell(0).addParagraph().createRun().setBold(true);//加粗
//设置样式