package com.tq.platform.comm.utils;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STVerticalJc;
public class SetFileInfo {
public static void main(String[] args) throws Exception {
Map<String, String> parm = new HashMap<String, String>();
parm.put("replace_contract_no", "2018年皖农担字第X00472号");
parm.put("man_y", "王彬(340421196905063057)");
parm.put("conpanyName", "安徽省农业信贷融资担保有限公司");
parm.put("copr_bank_name", "中国农业银行股份有限公司凤台县支行-001");
parm.put("credit_money_repeat_up", "借款人民币叁拾万圆整");
parm.put("top_contract_no", "保证合同编号-王彬");
parm.put("family_address", "安徽合肥体育中心");
parm.put("operator_name", "王彬");
parm.put("link_telephone", "18711111111");
parm.put("conpanyName", "安徽省农业信贷融资担保有限公司");
searchAndReplace("D://委托保证合同模板.docx", "D://委托保证合同.docx", parm);
}
/**
* 可替换word中段落对应的关键字
*/
@SuppressWarnings("resource")
public static void searchAndReplace(String srcPath, String destPath, Map<String, String> map) {
try {
File fxx = new File(srcPath);
InputStream isxxx = new FileInputStream(fxx);
byte[] xxxx = new byte[isxxx.available()];
isxxx.read(xxxx);
CustomXWPFDocument document = new CustomXWPFDocument(new ByteArrayInputStream(xxxx));
String property = System.getProperty("line.separator");
// 替换段落中的指定文字
Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();
while (itPara.hasNext()) {
XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
List<XWPFRun> run = paragraph.getRuns();
for (int i = 0; i < run.size(); i++) {
if (run.get(i).getText(run.get(i).getTextPosition()) != null
&& run.get(i).getText(run.get(i).getTextPosition()).trim().equals(key)) {
System.out
.println(run.get(i).getText(run.get(i).getTextPosition()).replaceAll(property, ""));
// 参数0表示生成的文字是要从哪一个地方开始放置,设置文字从位置0开始就可以把原来的文字全部替换掉了
run.get(i).setText(map.get(key), 0);
}
}
}
}
FileOutputStream outStream = null;
outStream = new FileOutputStream(destPath);
document.write(outStream);
outStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 替换段落关键词以及动态增加表格并设置值到表格中(此方法在Linux下把word转PDF也可以正常显示)
*/
public static void docIntentionGuarantee(String templatePath, String outPath, List<Map<String, Object>> list,
Map<String, Object> map) {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(templatePath);
XWPFDocument doc = new XWPFDocument(in);
// 替换段落中的指定文字
Iterator<XWPFParagraph> itPara = doc.getParagraphsIterator();
while (itPara.hasNext()) {
XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
List<XWPFRun> run = paragraph.getRuns();
for (int i = 0; i < run.size(); i++) {
if (run.get(i).getText(run.get(i).getTextPosition()) != null
&& run.get(i).getText(run.get(i).getTextPosition()).trim().equals(key)) {
// 参数0表示生成的文字是要从哪一个地方开始放置,设置文字从位置0开始就可以把原来的文字全部替换掉了
run.get(i).setText((String) map.get(key), 0);
}
}
}
}
// 获取所有表格
List<XWPFTable> tables = doc.getTables();
// 这里简单取第一个表格
XWPFTable table = tables.get(0);
//addOrRemoveRow(table,3,1,list);
// 获取到刚刚插入的行
XWPFTableRow sourceRow = table.getRow(0);
for (int i = 0; i < list.size(); i++) {
Map<String, Object> map3 = list.get(i);
XWPFTableRow targetRow = table.insertNewTableRow(1);
targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr());
List<XWPFTableCell> cellList = sourceRow.getTableCells();
if (null == cellList) {
return;
}
XWPFTableCell sourceCell = cellList.get(0);
XWPFTableCell cell = targetRow.addNewTableCell();
// 列属性
cell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());
// 段落属性
cell.getParagraphs().get(0).getCTP().setPPr(sourceCell.getParagraphs().get(0).getCTP().getPPr());
cell.setText(list.size() - i+"");
XWPFTableCell sourceCell1 = cellList.get(1);
XWPFTableCell cell1 = targetRow.addNewTableCell();
// 列属性
cell1.getCTTc().setTcPr(sourceCell1.getCTTc().getTcPr());
// 段落属性
cell1.getParagraphs().get(0).getCTP().setPPr(sourceCell1.getParagraphs().get(0).getCTP().getPPr());
cell1.setText((String) map3.get("operator_name"));
XWPFTableCell sourceCell2 = cellList.get(2);
XWPFTableCell cell2 = targetRow.addNewTableCell();
// 列属性
cell2.getCTTc().setTcPr(sourceCell2.getCTTc().getTcPr());
// 段落属性
cell2.getParagraphs().get(0).getCTP().setPPr(sourceCell2.getParagraphs().get(0).getCTP().getPPr());
cell2.setText(String.valueOf(((BigDecimal) map3.get("credit_money_repeat")).intValue()));
}
XWPFTableRow targetRow = table.insertNewTableRow(list.size() + 1);
targetRow.getCtRow().setTrPr(sourceRow.getCtRow().getTrPr());
List<XWPFTableCell> cellList = sourceRow.getTableCells();
if (null == cellList) {
return;
}
XWPFTableCell sourceCell = cellList.get(0);
XWPFTableCell cell = targetRow.addNewTableCell();
// 列属性
cell.getCTTc().setTcPr(sourceCell.getCTTc().getTcPr());
// 段落属性
cell.getParagraphs().get(0).getCTP().setPPr(sourceCell.getParagraphs().get(0).getCTP().getPPr());
cell.setText("合计");
XWPFTableCell sourceCell1 = cellList.get(1);
XWPFTableCell cell1 = targetRow.addNewTableCell();
// 列属性
cell1.getCTTc().setTcPr(sourceCell1.getCTTc().getTcPr());
// 段落属性
cell1.getParagraphs().get(0).getCTP().setPPr(sourceCell1.getParagraphs().get(0).getCTP().getPPr());
cell1.setText("");
XWPFTableCell sourceCell2 = cellList.get(2);
XWPFTableCell cell2 = targetRow.addNewTableCell();
// 列属性
cell2.getCTTc().setTcPr(sourceCell2.getCTTc().getTcPr());
// 段落属性
cell2.getParagraphs().get(0).getCTP().setPPr(sourceCell2.getParagraphs().get(0).getCTP().getPPr()
POI替换word模板中的关键字
需积分: 37 63 浏览量
2018-12-03
09:37:33
上传
评论
收藏 4KB ZIP 举报
bao_yu122
- 粉丝: 0
- 资源: 4
最新资源
- main.c
- Unity 创建快捷方式自动启动
- 一分钟一条原创视频,蹭热点撸收益,条条爆款,狂撸各大平台,轻松日入1000+-教程网盘链接提取码下载 .txt
- 51单片机实现万年历,包括闹钟的设置与秒表功能(汇编)
- STM32单片机FPGA毕设电路原理论文报告铁合金电炉单片机电力监控系统的研究
- STM32单片机FPGA毕设电路原理论文报告贴片元件封装机的智能控制系统设计
- STM32单片机FPGA毕设电路原理论文报告体育高考投篮自动测试系统的设计与实现
- STM32单片机FPGA毕设电路原理论文报告提高放疗精度的单片机控制方法
- C++ matplot学习及demo实操
- STM32单片机FPGA毕设电路原理论文报告提高单晶炉加热电源控制电路精度的研究
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈