|
|
|
@@ -1,6 +1,7 @@ |
|
|
|
package com.iformall.utils; |
|
|
|
|
|
|
|
import cn.afterturn.easypoi.word.WordExportUtil; |
|
|
|
import com.iformall.domain.vo.WordDocTableVo; |
|
|
|
import org.apache.commons.io.FileUtils; |
|
|
|
import org.apache.commons.lang3.StringUtils; |
|
|
|
import org.apache.poi.xwpf.usermodel.*; |
|
|
|
@@ -36,7 +37,7 @@ public class WordUtil { |
|
|
|
* @param request HttpServletRequest |
|
|
|
* @param response HttpServletResponse |
|
|
|
*/ |
|
|
|
public static void exportWord(String templatePath, String temDir, String fileName, String exportFileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response,List<Map<String,String>> rowsParams) { |
|
|
|
public static void exportWord(String templatePath, String temDir, String fileName, String exportFileName, Map<String, Object> params, HttpServletRequest request, HttpServletResponse response, WordDocTableVo wordDocTableVo) { |
|
|
|
Assert.notNull(templatePath, "模板路径不能为空"); |
|
|
|
Assert.notNull(temDir, "临时文件路径不能为空"); |
|
|
|
Assert.notNull(exportFileName, "导出文件名不能为空"); |
|
|
|
@@ -58,8 +59,8 @@ public class WordUtil { |
|
|
|
|
|
|
|
|
|
|
|
XWPFDocument doc = WordExportUtil.exportWord07(templatePath, params); |
|
|
|
if(!CollectionUtils.isEmpty(rowsParams)) |
|
|
|
insertValueToTable(doc,rowsParams,0); |
|
|
|
if(wordDocTableVo != null) |
|
|
|
insertValueToTable(doc,wordDocTableVo); |
|
|
|
|
|
|
|
String tmpPath = temDir + fileName; |
|
|
|
FileOutputStream fos = new FileOutputStream(tmpPath); |
|
|
|
@@ -88,26 +89,30 @@ public class WordUtil { |
|
|
|
} catch (Exception e) { |
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 循环填充表格内容 |
|
|
|
* @param xwpfDocument |
|
|
|
* @param params |
|
|
|
* @param tableIndex |
|
|
|
* @throws Exception |
|
|
|
*/ |
|
|
|
public static void insertValueToTable(XWPFDocument xwpfDocument, List<Map<String,String>> params, int tableIndex) throws Exception { |
|
|
|
public static void insertValueToTable(XWPFDocument xwpfDocument, WordDocTableVo wordDocTableVo) throws Exception { |
|
|
|
List<XWPFTable> tableList = xwpfDocument.getTables(); |
|
|
|
XWPFTable table = tableList.get(tableIndex); |
|
|
|
XWPFTable table = tableList.get(wordDocTableVo.getTableIndex()); |
|
|
|
List<XWPFTableRow> rows = table.getRows(); |
|
|
|
if(rows.size()<2){ |
|
|
|
throw new Exception("tableIndex对应表格应该为2行"); |
|
|
|
} |
|
|
|
|
|
|
|
int rowIndex = wordDocTableVo.getRowIndex(); |
|
|
|
XWPFTableRow tmpRow = rows.get(rowIndex); |
|
|
|
List<XWPFTableCell> cellList = tmpRow.getTableCells(); |
|
|
|
|
|
|
|
for (List<String> stringList : wordDocTableVo.getParams()) { |
|
|
|
for (int i = 0; i < stringList.size(); i++) { |
|
|
|
cellList.get(i).setText(stringList.get(i)); |
|
|
|
} |
|
|
|
table.addRow(tmpRow,rowIndex); |
|
|
|
rowIndex++; |
|
|
|
} |
|
|
|
|
|
|
|
table.addRow(rows.get(2),2); |
|
|
|
|
|
|
|
// //模板的那一行 |
|
|
|
// XWPFTableRow tmpRow = rows.get(2); |
|
|
|
@@ -145,161 +150,7 @@ public class WordUtil { |
|
|
|
// table.removeRow(2); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 复制模板行的属性 |
|
|
|
* @param tmpCell |
|
|
|
* @param cell |
|
|
|
* @param text |
|
|
|
* @throws Exception |
|
|
|
*/ |
|
|
|
public static void setCellText(XWPFTableCell tmpCell, XWPFTableCell cell,String text) throws Exception { |
|
|
|
CTTc cttc2 = tmpCell.getCTTc(); |
|
|
|
CTTcPr ctPr2 = cttc2.getTcPr(); |
|
|
|
CTTc cttc = cell.getCTTc(); |
|
|
|
CTTcPr ctPr = cttc.addNewTcPr(); |
|
|
|
if (ctPr2.getTcW() != null) { |
|
|
|
ctPr.addNewTcW().setW(ctPr2.getTcW().getW()); |
|
|
|
} |
|
|
|
if (ctPr2.getVAlign() != null) { |
|
|
|
ctPr.addNewVAlign().setVal(ctPr2.getVAlign().getVal()); |
|
|
|
} |
|
|
|
if (cttc2.getPList().size() > 0) { |
|
|
|
CTP ctp = cttc2.getPList().get(0); |
|
|
|
if (ctp.getPPr() != null) { |
|
|
|
if (ctp.getPPr().getJc() != null) { |
|
|
|
cttc.getPList().get(0).addNewPPr().addNewJc() |
|
|
|
.setVal(ctp.getPPr().getJc().getVal()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (ctPr2.getTcBorders() != null) { |
|
|
|
ctPr.setTcBorders(ctPr2.getTcBorders()); |
|
|
|
} |
|
|
|
|
|
|
|
XWPFParagraph tmpP = tmpCell.getParagraphs().get(0); |
|
|
|
XWPFParagraph cellP = cell.getParagraphs().get(0); |
|
|
|
XWPFRun tmpR = null; |
|
|
|
if (tmpP.getRuns() != null && tmpP.getRuns().size() > 0) { |
|
|
|
tmpR = tmpP.getRuns().get(0); |
|
|
|
} |
|
|
|
XWPFRun cellR = cellP.createRun(); |
|
|
|
cellR.setText(text); |
|
|
|
// 复制字体信息 |
|
|
|
if (tmpR != null) { |
|
|
|
if(!cellR.isBold()){ |
|
|
|
cellR.setBold(tmpR.isBold()); |
|
|
|
} |
|
|
|
cellR.setItalic(tmpR.isItalic()); |
|
|
|
cellR.setUnderline(tmpR.getUnderline()); |
|
|
|
cellR.setColor(tmpR.getColor()); |
|
|
|
cellR.setTextPosition(tmpR.getTextPosition()); |
|
|
|
if (tmpR.getFontSize() != -1) { |
|
|
|
cellR.setFontSize(tmpR.getFontSize()); |
|
|
|
} |
|
|
|
if (tmpR.getFontFamily() != null) { |
|
|
|
cellR.setFontFamily(tmpR.getFontFamily()); |
|
|
|
} |
|
|
|
if (tmpR.getCTR() != null) { |
|
|
|
if (tmpR.getCTR().isSetRPr()) { |
|
|
|
CTRPr tmpRPr = tmpR.getCTR().getRPr(); |
|
|
|
if (tmpRPr.isSetRFonts()) { |
|
|
|
CTFonts tmpFonts = tmpRPr.getRFonts(); |
|
|
|
CTRPr cellRPr = cellR.getCTR().isSetRPr() ? cellR |
|
|
|
.getCTR().getRPr() : cellR.getCTR().addNewRPr(); |
|
|
|
CTFonts cellFonts = cellRPr.isSetRFonts() ? cellRPr |
|
|
|
.getRFonts() : cellRPr.addNewRFonts(); |
|
|
|
cellFonts.setAscii(tmpFonts.getAscii()); |
|
|
|
cellFonts.setAsciiTheme(tmpFonts.getAsciiTheme()); |
|
|
|
cellFonts.setCs(tmpFonts.getCs()); |
|
|
|
cellFonts.setCstheme(tmpFonts.getCstheme()); |
|
|
|
cellFonts.setEastAsia(tmpFonts.getEastAsia()); |
|
|
|
cellFonts.setEastAsiaTheme(tmpFonts.getEastAsiaTheme()); |
|
|
|
cellFonts.setHAnsi(tmpFonts.getHAnsi()); |
|
|
|
cellFonts.setHAnsiTheme(tmpFonts.getHAnsiTheme()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
// 复制段落信息 |
|
|
|
cellP.setAlignment(tmpP.getAlignment()); |
|
|
|
cellP.setVerticalAlignment(tmpP.getVerticalAlignment()); |
|
|
|
cellP.setBorderBetween(tmpP.getBorderBetween()); |
|
|
|
cellP.setBorderBottom(tmpP.getBorderBottom()); |
|
|
|
cellP.setBorderLeft(tmpP.getBorderLeft()); |
|
|
|
cellP.setBorderRight(tmpP.getBorderRight()); |
|
|
|
cellP.setBorderTop(tmpP.getBorderTop()); |
|
|
|
cellP.setPageBreak(tmpP.isPageBreak()); |
|
|
|
if (tmpP.getCTP() != null) { |
|
|
|
if (tmpP.getCTP().getPPr() != null) { |
|
|
|
CTPPr tmpPPr = tmpP.getCTP().getPPr(); |
|
|
|
CTPPr cellPPr = cellP.getCTP().getPPr() != null ? cellP |
|
|
|
.getCTP().getPPr() : cellP.getCTP().addNewPPr(); |
|
|
|
// 复制段落间距信息 |
|
|
|
CTSpacing tmpSpacing = tmpPPr.getSpacing(); |
|
|
|
if (tmpSpacing != null) { |
|
|
|
CTSpacing cellSpacing = cellPPr.getSpacing() != null ? cellPPr |
|
|
|
.getSpacing() : cellPPr.addNewSpacing(); |
|
|
|
if (tmpSpacing.getAfter() != null) { |
|
|
|
cellSpacing.setAfter(tmpSpacing.getAfter()); |
|
|
|
} |
|
|
|
if (tmpSpacing.getAfterAutospacing() != null) { |
|
|
|
cellSpacing.setAfterAutospacing(tmpSpacing |
|
|
|
.getAfterAutospacing()); |
|
|
|
} |
|
|
|
if (tmpSpacing.getAfterLines() != null) { |
|
|
|
cellSpacing.setAfterLines(tmpSpacing.getAfterLines()); |
|
|
|
} |
|
|
|
if (tmpSpacing.getBefore() != null) { |
|
|
|
cellSpacing.setBefore(tmpSpacing.getBefore()); |
|
|
|
} |
|
|
|
if (tmpSpacing.getBeforeAutospacing() != null) { |
|
|
|
cellSpacing.setBeforeAutospacing(tmpSpacing |
|
|
|
.getBeforeAutospacing()); |
|
|
|
} |
|
|
|
if (tmpSpacing.getBeforeLines() != null) { |
|
|
|
cellSpacing.setBeforeLines(tmpSpacing.getBeforeLines()); |
|
|
|
} |
|
|
|
if (tmpSpacing.getLine() != null) { |
|
|
|
cellSpacing.setLine(tmpSpacing.getLine()); |
|
|
|
} |
|
|
|
if (tmpSpacing.getLineRule() != null) { |
|
|
|
cellSpacing.setLineRule(tmpSpacing.getLineRule()); |
|
|
|
} |
|
|
|
} |
|
|
|
// 复制段落缩进信息 |
|
|
|
CTInd tmpInd = tmpPPr.getInd(); |
|
|
|
if (tmpInd != null) { |
|
|
|
CTInd cellInd = cellPPr.getInd() != null ? cellPPr.getInd() |
|
|
|
: cellPPr.addNewInd(); |
|
|
|
if (tmpInd.getFirstLine() != null) { |
|
|
|
cellInd.setFirstLine(tmpInd.getFirstLine()); |
|
|
|
} |
|
|
|
if (tmpInd.getFirstLineChars() != null) { |
|
|
|
cellInd.setFirstLineChars(tmpInd.getFirstLineChars()); |
|
|
|
} |
|
|
|
if (tmpInd.getHanging() != null) { |
|
|
|
cellInd.setHanging(tmpInd.getHanging()); |
|
|
|
} |
|
|
|
if (tmpInd.getHangingChars() != null) { |
|
|
|
cellInd.setHangingChars(tmpInd.getHangingChars()); |
|
|
|
} |
|
|
|
if (tmpInd.getLeft() != null) { |
|
|
|
cellInd.setLeft(tmpInd.getLeft()); |
|
|
|
} |
|
|
|
if (tmpInd.getLeftChars() != null) { |
|
|
|
cellInd.setLeftChars(tmpInd.getLeftChars()); |
|
|
|
} |
|
|
|
if (tmpInd.getRight() != null) { |
|
|
|
cellInd.setRight(tmpInd.getRight()); |
|
|
|
} |
|
|
|
if (tmpInd.getRightChars() != null) { |
|
|
|
cellInd.setRightChars(tmpInd.getRightChars()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |