导入依赖
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
替换文本内容
word模板
替换代码
public static void replaceWordText() throws Exception {
Map<String, String> map = new HashMap<>();
map.put("${contName}", "测试合同");
map.put("${endDate}", "2023-05-16");
map.put("${contCode}", "000123");
map.put("${initiatorName}", "需求方姓名");
map.put("${participantName}", "服务方姓名");
map.put("${participantUser}", "服务方联系人");
map.put("${deliveryDate}", "2023-05-16");
map.put("${address}", "重庆市万州区弹子镇");
map.put("${tradeMoney}", "9999");
OPCPackage opcPackage = POIXMLDocument.openPackage("C:\\Users\\admin\\Desktop\\合同文件_模板.docx");
XWPFDocument doc = new XWPFDocument(opcPackage);
List<XWPFParagraph> paragraphList = doc.getParagraphs();
for (XWPFParagraph par : paragraphList) {
List<XWPFRun> runs = par.getRuns();
for (XWPFRun run : runs) {
String text = run.getText(0);
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
if (text.indexOf(key) != -1) {
Object value = entry.getValue();
text = text.replace(key, value.toString());
run.setText(text, 0);
}
}
}
}
File file = new File("C:\\Users\\admin\\Desktop\\合同文件_替换1.docx");
FileOutputStream fileOutputStream = new FileOutputStream(file);
doc.write(fileOutputStream);
}
替换后word文件
替换表格内容
word模板
替换代码
public static void replaceWordTable() throws Exception {
Map<String, String> map = new HashMap<>();
map.put("${tradeMoney}", "9999");
map.put("${pay1}", "40");
map.put("${pay2}", "40");
map.put("${pay3}", "20");
DecimalFormat decimalFormat = new DecimalFormat("0.00");
double pay1Money = Integer.valueOf(map.get("${tradeMoney}")) * (Integer.valueOf(map.get("${pay1}")) / 100.0);
double pay2Money = Integer.valueOf(map.get("${tradeMoney}")) * (Integer.valueOf(map.get("${pay2}")) / 100.0);
double pay3Money = Integer.valueOf(map.get("${tradeMoney}")) * (Integer.valueOf(map.get("${pay3}")) / 100.0);
map.put("${pay1Money}", decimalFormat.format(pay1Money));
map.put("${pay2Money}", decimalFormat.format(pay2Money));
map.put("${pay3Money}", decimalFormat.format(pay3Money));
OPCPackage opcPackage = POIXMLDocument.openPackage("C:\\Users\\admin\\Desktop\\合同文件_模板.docx");
XWPFDocument document = new XWPFDocument(opcPackage);
List<XWPFTable> tables = document.getTables();
for (int i = 0; i < tables.size(); i++) {
XWPFTable table = tables.get(i);
if (table.getRows().size() > 1) {
String cellText = table.getText();
if (StringUtils.isNotBlank(cellText) && cellText.contains("${")){
List<XWPFTableRow> rows = table.getRows();
eachTable(rows, map);
}
}
}
File file = new File("C:\\Users\\admin\\Desktop\\合同文件_替换.docx");
FileOutputStream fileOutputStream = new FileOutputStream(file);
document.write(fileOutputStream);
}
public static void eachTable(List<XWPFTableRow> rows, Map<String, String> textMap) {
for (XWPFTableRow row : rows) {
List<XWPFTableCell> cells = row.getTableCells();
for (XWPFTableCell cell : cells) {
String cellText = cell.getText();
if (StringUtils.isNotBlank(cellText) && cellText.contains("${")) {
List<XWPFParagraph> paragraphs = cell.getParagraphs();
for (XWPFParagraph paragraph : paragraphs) {
List<XWPFRun> runs = paragraph.getRuns();
for (XWPFRun run : runs) {
run.setText(textMap.get(run.toString()),0);
}
}
}
}
}
}
替换表格内容后word文件
插入表格
word模板
插入代码
public static void insertWordTable() throws Exception {
List<String> row1 = new ArrayList<>();
row1.add("付款节点");
row1.add("付款比例");
row1.add("付款金额");
row1.add("付款状态");
List<String> row2 = new ArrayList<>();
row2.add("合同签署完毕");
row2.add("40%");
row2.add("400");
row2.add("未支付");
List<String> row3 = new ArrayList<>();
row3.add("生产完成");
row3.add("40%");
row3.add("400");
row3.add("未支付");
List<String> row4 = new ArrayList<>();
row4.add("产品验收完毕");
row4.add("20%");
row4.add("200");
row4.add("未支付");
List<List<String>> rowData = new ArrayList<>();
rowData.add(row2);
rowData.add(row3);
rowData.add(row4);
OPCPackage opcPackage = POIXMLDocument.openPackage("C:\\Users\\admin\\Desktop\\合同文件_模板.docx");
XWPFDocument doc = new XWPFDocument(opcPackage);
List<XWPFParagraph> paragraphList = doc.getParagraphs();
for (int p=0;p<paragraphList.size();p++) {
List<XWPFRun> runs = paragraphList.get(p).getRuns();
for (int r=0;r<runs.size();r++) {
String text = runs.get(r).getText(0);
if (text!=null){
if(text.indexOf("${table}")>=0){
XmlCursor cursor = paragraphList.get(p).getCTP().newCursor();
XWPFTable newTable = doc.insertNewTbl(cursor);
CTTblPr tblPr = newTable.getCTTbl().getTblPr();
tblPr.getTblW().setType(STTblWidth.DXA);
tblPr.getTblW().setW(new BigInteger("8500"));
newTable.getRow(0).getCell(0).setText(row1.get(0));
for (int i=1;i<row1.size();i++){
newTable.getRow(0).createCell().setText(row1.get(i));
}
for (int i=0;i<rowData.size();i++){
XWPFTableRow row = newTable.createRow();
for (int j=0;j<rowData.get(i).size();j++){
row.getCell(j).setText(rowData.get(i).get(j));
}
}
paragraphList.get(p).removeRun(0);
}
}
}
}
File file = new File("C:\\Users\\admin\\Desktop\\合同文件_替换.docx");
FileOutputStream fileOutputStream = new FileOutputStream(file);
doc.write(fileOutputStream);
}
插入表格后word文件
插入图片
word模板
插入代码
public static void insertWordImage() throws Exception {
OPCPackage opcPackage = POIXMLDocument.openPackage("C:\\Users\\admin\\Desktop\\合同文件_模板.docx");
XWPFDocument doc = new XWPFDocument(opcPackage);
List<XWPFParagraph> paragraphList = doc.getParagraphs();
for (int p = 0; p < paragraphList.size(); p++) {
List<XWPFRun> runs = paragraphList.get(p).getRuns();
for (int r = 0; r < runs.size(); r++) {
String text = runs.get(r).getText(0);
if (text != null) {
if (text.indexOf("${pic}") >= 0) {
runs.get(r).addBreak();
String picPath="C:\\Users\\admin\\Desktop\\111.png";
runs.get(r).addPicture(new FileInputStream(picPath),Document.PICTURE_TYPE_PNG,picPath, Units.toEMU(450),Units.toEMU(300));
runs.get(r).addBreak(BreakType.TEXT_WRAPPING);
runs.get(r).setText("",0);
}
}
}
}
doc.write(new FileOutputStream("C:\\Users\\admin\\Desktop\\合同文件_图片.docx"));
}
插入图片后word文件