添加谐波报告功能
This commit is contained in:
@@ -0,0 +1,141 @@
|
||||
package com.njcn.harmonic.utils;
|
||||
|
||||
/**
|
||||
* @author hongawen
|
||||
* @date: 2020/8/20 13:36
|
||||
*/
|
||||
public class ClearPathUtil {
|
||||
|
||||
/**
|
||||
* 针对漏洞,新增的特殊字符替换的扫描方法
|
||||
*/
|
||||
public static String cleanString(String str) {
|
||||
if (str == null){
|
||||
return null;
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < str.length(); ++i) {
|
||||
sb.append(cleanChar(str.charAt(i)));
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
private static char cleanChar(char ch) {
|
||||
|
||||
// 0 - 9
|
||||
for (int i = 48; i < 58; ++i) {
|
||||
if (ch == i) {
|
||||
return (char) i;
|
||||
}
|
||||
}
|
||||
|
||||
// 'A' - 'Z'
|
||||
for (int i = 65; i < 91; ++i) {
|
||||
if (ch == i) {
|
||||
return (char) i;
|
||||
}
|
||||
}
|
||||
|
||||
// 'a' - 'z'
|
||||
for (int i = 97; i < 123; ++i) {
|
||||
if (ch == i) {
|
||||
return (char) i;
|
||||
}
|
||||
}
|
||||
|
||||
// other valid characters
|
||||
switch (ch) {
|
||||
case '/':
|
||||
return '/';
|
||||
case '.':
|
||||
return '.';
|
||||
case '-':
|
||||
return '-';
|
||||
case '_':
|
||||
return '_';
|
||||
case ',':
|
||||
return ',';
|
||||
case ' ':
|
||||
return ' ';
|
||||
case '!':
|
||||
return '!';
|
||||
case '@':
|
||||
return '@';
|
||||
case '#':
|
||||
return '#';
|
||||
case '$':
|
||||
return '$';
|
||||
case '%':
|
||||
return '%';
|
||||
case '^':
|
||||
return '^';
|
||||
case '&':
|
||||
return '&';
|
||||
case '*':
|
||||
return '*';
|
||||
case '(':
|
||||
return '(';
|
||||
case ')':
|
||||
return ')';
|
||||
case '+':
|
||||
return '+';
|
||||
case '=':
|
||||
return '=';
|
||||
case ':':
|
||||
return ':';
|
||||
case ';':
|
||||
return ';';
|
||||
case '?':
|
||||
return '?';
|
||||
case '"':
|
||||
return '"';
|
||||
case '<':
|
||||
return '<';
|
||||
case '>':
|
||||
return '>';
|
||||
case '`':
|
||||
return '`';
|
||||
case '\\':
|
||||
return '/';
|
||||
case 'I':
|
||||
return 'I';
|
||||
case 'Ⅱ':
|
||||
return 'Ⅱ';
|
||||
case 'Ⅲ':
|
||||
return 'Ⅲ';
|
||||
case 'Ⅳ':
|
||||
return 'Ⅳ';
|
||||
case 'Ⅴ':
|
||||
return 'Ⅴ';
|
||||
case 'Ⅵ':
|
||||
return 'Ⅵ';
|
||||
case 'Ⅶ':
|
||||
return 'Ⅶ';
|
||||
case 'Ⅷ':
|
||||
return 'Ⅷ';
|
||||
case 'Ⅸ':
|
||||
return 'Ⅸ';
|
||||
|
||||
case 'V':
|
||||
return 'V';
|
||||
case 'X':
|
||||
return 'X';
|
||||
case 'Ⅹ':
|
||||
return 'Ⅹ';
|
||||
}
|
||||
if (isChineseChar(ch)){
|
||||
return ch;
|
||||
}
|
||||
return '%';
|
||||
}
|
||||
|
||||
// 根据Unicode编码判断中文汉字和符号
|
||||
private static boolean isChineseChar(char c) {
|
||||
Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
|
||||
return ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|
||||
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
|
||||
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
|
||||
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
package com.njcn.harmonic.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.poi.openxml4j.opc.OPCPackage;
|
||||
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
||||
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
|
||||
import org.apache.xmlbeans.XmlException;
|
||||
import org.apache.xmlbeans.XmlToken;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
|
||||
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
@Slf4j
|
||||
public class CustomXWPFDocument extends XWPFDocument {
|
||||
// 日志记录
|
||||
public CustomXWPFDocument(InputStream in) throws IOException {
|
||||
super(in);
|
||||
}
|
||||
|
||||
public CustomXWPFDocument() {
|
||||
super();
|
||||
}
|
||||
|
||||
public CustomXWPFDocument(OPCPackage pkg) throws IOException {
|
||||
super(pkg);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param id
|
||||
* @param width
|
||||
* 宽
|
||||
* @param height
|
||||
* 高
|
||||
* @param paragraph
|
||||
* 段落
|
||||
*/
|
||||
public void createPicture(int id, int width, int height,String blipId, XWPFParagraph paragraph) {
|
||||
final int EMU = 9525;
|
||||
width *= EMU;
|
||||
height *= EMU;
|
||||
// String blipId = getAllPictures().get(id).getPackageRelationship().getId();
|
||||
CTInline inline = paragraph.createRun().getCTR().addNewDrawing().addNewInline();
|
||||
String picXml = "" + "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"
|
||||
+ " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
|
||||
+ " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
|
||||
+ " <pic:nvPicPr>" + " <pic:cNvPr id=\"" + id + "\" name=\"Generated\"/>"
|
||||
+ " <pic:cNvPicPr/>" + " </pic:nvPicPr>" + " <pic:blipFill>"
|
||||
+ " <a:blip r:embed=\"" + blipId
|
||||
+ "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"
|
||||
+ " <a:stretch>" + " <a:fillRect/>" + " </a:stretch>"
|
||||
+ " </pic:blipFill>" + " <pic:spPr>" + " <a:xfrm>"
|
||||
+ " <a:off x=\"0\" y=\"0\"/>" + " <a:ext cx=\"" + width + "\" cy=\""
|
||||
+ height + "\"/>" + " </a:xfrm>" + " <a:prstGeom prst=\"rect\">"
|
||||
+ " <a:avLst/>" + " </a:prstGeom>" + " </pic:spPr>"
|
||||
+ " </pic:pic>" + " </a:graphicData>" + "</a:graphic>";
|
||||
|
||||
inline.addNewGraphic().addNewGraphicData();
|
||||
XmlToken xmlToken = null;
|
||||
try {
|
||||
xmlToken = XmlToken.Factory.parse(picXml);
|
||||
} catch (XmlException xe) {
|
||||
log.error("生成报表发生异常,异常是"+xe.getMessage());
|
||||
}
|
||||
inline.set(xmlToken);
|
||||
|
||||
inline.setDistT(0);
|
||||
inline.setDistB(0);
|
||||
inline.setDistL(0);
|
||||
inline.setDistR(0);
|
||||
|
||||
CTPositiveSize2D extent = inline.addNewExtent();
|
||||
extent.setCx(width);
|
||||
extent.setCy(height);
|
||||
|
||||
CTNonVisualDrawingProps docPr = inline.addNewDocPr();
|
||||
docPr.setId(id);
|
||||
docPr.setName("图片" + id);
|
||||
docPr.setDescr("测试");
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.njcn.harmonic.utils;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.Socket;
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* @author wr
|
||||
* @description
|
||||
* @date 2023/4/10 17:39
|
||||
*/
|
||||
@Slf4j
|
||||
public class PubUtils {
|
||||
public static boolean createFile(String destFileName) {
|
||||
File file = new File(destFileName);
|
||||
if (file.exists()) {
|
||||
log.warn("创建单个文件" + destFileName + "失败,目标文件已存在!");
|
||||
return false;
|
||||
}
|
||||
if (destFileName.endsWith(File.separator)) {
|
||||
log.warn("创建单个文件" + destFileName + "失败,目标文件不能为目录!");
|
||||
return false;
|
||||
}
|
||||
//判断目标文件所在的目录是否存在
|
||||
if (!file.getParentFile().exists()) {
|
||||
//如果目标文件所在的目录不存在,则创建父目录
|
||||
log.warn("目标文件所在目录不存在,准备创建它!");
|
||||
if (!file.getParentFile().mkdirs()) {
|
||||
log.warn("创建目标文件所在目录失败!");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//创建目标文件
|
||||
try {
|
||||
if (file.createNewFile()) {
|
||||
log.warn("创建单个文件" + destFileName + "成功!");
|
||||
return true;
|
||||
} else {
|
||||
log.warn("创建单个文件" + destFileName + "失败!");
|
||||
return false;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.warn("创建单个文件" + destFileName + "失败!" + e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 读取配置文件
|
||||
*
|
||||
* @param cl 类名字
|
||||
* @param strPropertiesName 配置文件名称
|
||||
*/
|
||||
public static Properties readProperties(ClassLoader cl, String strPropertiesName) {
|
||||
Properties pros = new Properties();
|
||||
InputStream in = null;
|
||||
try {
|
||||
in = cl.getResourceAsStream(strPropertiesName);
|
||||
pros.load(in);
|
||||
} catch (Exception e) {
|
||||
log.error("读取配置文件失败失败:" + e.getMessage());
|
||||
} finally {
|
||||
if (in != null) {
|
||||
PubUtils.safeClose(in, "安全关闭读取配置文件失败,异常为:");
|
||||
}
|
||||
}
|
||||
return pros;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安全关闭InputStream
|
||||
*
|
||||
* @param s
|
||||
*/
|
||||
public static void safeClose(InputStream s, String strError) {
|
||||
if (s != null) {
|
||||
try {
|
||||
s.close();
|
||||
} catch (IOException e) {
|
||||
log.error(strError + e.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,360 @@
|
||||
package com.njcn.harmonic.utils;
|
||||
|
||||
import org.apache.poi.xwpf.usermodel.*;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.servlet.http.HttpSession;
|
||||
import java.io.*;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.*;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
|
||||
public class WordUtil2 {
|
||||
// 日志记录
|
||||
private static final Logger logger = LoggerFactory.getLogger(WordUtil2.class);
|
||||
|
||||
public void getWord(String path, Map<String, Object> params, String fileName, HttpServletResponse response, HttpSession session)
|
||||
throws Exception {
|
||||
path = ClearPathUtil.cleanString(path);
|
||||
File file = new File(path);
|
||||
InputStream inStream = null;
|
||||
CustomXWPFDocument doc = null;
|
||||
//读取报告模板
|
||||
try {
|
||||
inStream = new FileInputStream(file);
|
||||
doc = new CustomXWPFDocument(inStream);
|
||||
this.replaceInTable(doc, params); // 替换表格里面的变量
|
||||
this.replaceInPara(doc, params); // 替换文本里面的变量
|
||||
} catch (IOException e) {
|
||||
logger.error("获取报告模板异常,原因为:" + e.toString());
|
||||
} finally {
|
||||
if (null != inStream) {
|
||||
inStream.close();
|
||||
}
|
||||
}
|
||||
// //读取配置文件
|
||||
// Properties pros = PubUtils.readProperties(getClass().getClassLoader(), "java.properties");
|
||||
// String tmpPath = pros.get("TMP_PATH").toString() +File.separator+ "offlinereoprt";
|
||||
// tmpPath= ClearPathUtil.cleanString(tmpPath);
|
||||
// OutputStream os = null;
|
||||
// File tmpfile = new File(tmpPath);
|
||||
// if(!tmpfile.exists()){
|
||||
// tmpfile.mkdir();
|
||||
// }
|
||||
// tmpPath = tmpPath +File.separator+ fileName;
|
||||
// tmpPath= ClearPathUtil.cleanString(tmpPath);
|
||||
// File tmp = new File(tmpPath);
|
||||
// if(tmp.exists()){
|
||||
// tmp.delete();
|
||||
// }
|
||||
// PubUtils.createFile(tmpPath);
|
||||
try {
|
||||
// os = new FileOutputStream(tmpPath);
|
||||
// if (doc != null) {
|
||||
// doc.write(os);
|
||||
// }
|
||||
ServletOutputStream outputStream = response.getOutputStream();
|
||||
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
|
||||
response.setContentType("application/octet-stream;charset=UTF-8");
|
||||
doc.write(outputStream);
|
||||
outputStream.close();
|
||||
|
||||
// session.setAttribute("tmpPath", tmpPath);
|
||||
// session.setAttribute("fileName", fileName);
|
||||
} catch (Exception e) {
|
||||
session.setAttribute("tmpPath", "");
|
||||
session.setAttribute("fileName", "");
|
||||
logger.error("输出稳态报告异常,原因为:" + e.toString());
|
||||
} finally {
|
||||
// if (os != null) {
|
||||
// os.close();
|
||||
// }
|
||||
if (doc != null) {
|
||||
doc.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换段落里面的变量
|
||||
*
|
||||
* @param doc 要替换的文档
|
||||
* @param params 参数
|
||||
*/
|
||||
private void replaceInPara(CustomXWPFDocument doc, Map<String, Object> params) {
|
||||
Iterator<XWPFParagraph> iterator = doc.getParagraphsIterator();
|
||||
List<XWPFParagraph> paragraphList = new ArrayList<>();
|
||||
XWPFParagraph para;
|
||||
while (iterator.hasNext()) {
|
||||
para = iterator.next();
|
||||
paragraphList.add(para);
|
||||
}
|
||||
processParagraphs(paragraphList, params, doc);
|
||||
}
|
||||
|
||||
private void replaceInTable(CustomXWPFDocument doc, Map<String, Object> params) {
|
||||
Iterator<XWPFTable> it = doc.getTablesIterator();
|
||||
while (it.hasNext()) {
|
||||
XWPFTable table = it.next();
|
||||
List<XWPFTableRow> rows = table.getRows();
|
||||
for (XWPFTableRow row : rows) {
|
||||
List<XWPFTableCell> cells = row.getTableCells();
|
||||
for (XWPFTableCell cell : cells) {
|
||||
List<XWPFParagraph> paragraphListTable = cell.getParagraphs();
|
||||
processParagraphs(paragraphListTable, params, doc);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void processParagraphs(List<XWPFParagraph> paragraphList, Map<String, Object> param,
|
||||
CustomXWPFDocument doc) {
|
||||
if (paragraphList != null && paragraphList.size() > 0) {
|
||||
for (XWPFParagraph paragraph : paragraphList) {
|
||||
List<XWPFRun> runs = paragraph.getRuns();
|
||||
if (runs.size() > 0) {
|
||||
for (XWPFRun run : runs) {
|
||||
String bflag = "";
|
||||
String text = run.getText(0);
|
||||
if (text != null) {
|
||||
boolean isSetText = false;
|
||||
for (Entry<String, Object> entry : param.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
if (text.indexOf(key) != -1) {
|
||||
isSetText = true;
|
||||
Object value = entry.getValue();
|
||||
if (value instanceof String) {// 文本替换
|
||||
text = text.replace(key, value.toString());
|
||||
} else if (value instanceof Map) {// 图片替换
|
||||
text = text.replace(key, "");
|
||||
Map pic = (Map) value;
|
||||
int width = Integer.parseInt(pic.get("width").toString());
|
||||
int height = Integer.parseInt(pic.get("height").toString());
|
||||
int picType = getPictureType(pic.get("type").toString());
|
||||
byte[] byteArray = (byte[]) pic.get("content");
|
||||
ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteArray);
|
||||
try {
|
||||
String s = doc.addPictureData(byteInputStream, picType);
|
||||
|
||||
doc.createPicture(doc.getAllPictures().size() - 1, width, height,
|
||||
s,paragraph);
|
||||
bflag = "break";
|
||||
} catch (Exception e) {
|
||||
logger.error("文本替换发生异常,异常是" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (isSetText) {
|
||||
run.setText(text, 0);
|
||||
}
|
||||
}
|
||||
if (bflag == "break") {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换段落里面的变量
|
||||
*
|
||||
* @param para 要替换的段落
|
||||
* @param params 参数
|
||||
*/
|
||||
private void replaceInPara(XWPFParagraph para, Map<String, Object> params, CustomXWPFDocument doc) {
|
||||
List<XWPFRun> runs;
|
||||
Matcher matcher;
|
||||
// if (this.matcher(para.getParagraphText()).find()) {
|
||||
runs = para.getRuns();
|
||||
int start = -1;
|
||||
int end = -1;
|
||||
String str = "";
|
||||
for (int i = 0; i < runs.size(); i++) {
|
||||
XWPFRun run = runs.get(i);
|
||||
String runText = run.toString();
|
||||
if ('$' == runText.charAt(0) && '{' == runText.charAt(1)) {
|
||||
start = i;
|
||||
}
|
||||
if ((start != -1)) {
|
||||
str += runText;
|
||||
}
|
||||
if ('}' == runText.charAt(runText.length() - 1)) {
|
||||
if (start != -1) {
|
||||
end = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = start; i <= end; i++) {
|
||||
para.removeRun(i);
|
||||
i--;
|
||||
end--;
|
||||
}
|
||||
|
||||
for (Entry<String, Object> entry : params.entrySet()) {
|
||||
String key = entry.getKey();
|
||||
if (str.indexOf(key) != -1) {
|
||||
Object value = entry.getValue();
|
||||
if (value instanceof String) {
|
||||
str = str.replace(key, value.toString());
|
||||
para.createRun().setText(str, 0);
|
||||
break;
|
||||
} else if (value instanceof Map) {
|
||||
str = str.replace(key, "");
|
||||
Map pic = (Map) value;
|
||||
int width = Integer.parseInt(pic.get("width").toString());
|
||||
int height = Integer.parseInt(pic.get("height").toString());
|
||||
int picType = getPictureType(pic.get("type").toString());
|
||||
byte[] byteArray = (byte[]) pic.get("content");
|
||||
ByteArrayInputStream byteInputStream = new ByteArrayInputStream(byteArray);
|
||||
try {
|
||||
// int ind = doc.addPicture(byteInputStream,picType);
|
||||
// doc.createPicture(ind, width , height,para);
|
||||
String s = doc.addPictureData(byteInputStream, picType);
|
||||
doc.createPicture(doc.getAllPictures().size() - 1, width, height,s, para);
|
||||
para.createRun().setText(str, 0);
|
||||
break;
|
||||
} catch (Exception e) {
|
||||
logger.error("文件替换发生异常,异常是" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// }
|
||||
}
|
||||
|
||||
/**
|
||||
* 为表格插入数据,行数不够添加新行
|
||||
*
|
||||
* @param table 需要插入数据的表格
|
||||
* @param tableList 插入数据集合
|
||||
*/
|
||||
private static void insertTable(XWPFTable table, List<String[]> tableList) {
|
||||
// 创建行,根据需要插入的数据添加新行,不处理表头
|
||||
for (int i = 0; i < tableList.size(); i++) {
|
||||
XWPFTableRow row = table.createRow();
|
||||
}
|
||||
// 遍历表格插入数据
|
||||
List<XWPFTableRow> rows = table.getRows();
|
||||
int length = table.getRows().size();
|
||||
for (int i = 1; i < length - 1; i++) {
|
||||
XWPFTableRow newRow = table.getRow(i);
|
||||
List<XWPFTableCell> cells = newRow.getTableCells();
|
||||
for (int j = 0; j < cells.size(); j++) {
|
||||
XWPFTableCell cell = cells.get(j);
|
||||
String s = tableList.get(i - 1)[j];
|
||||
cell.setText(s);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 替换表格里面的变量
|
||||
*
|
||||
* @param doc 要替换的文档
|
||||
* @param params 参数
|
||||
*/
|
||||
private void replaceInTable(CustomXWPFDocument doc, Map<String, Object> params, List<String[]> tableList) {
|
||||
Iterator<XWPFTable> iterator = doc.getTablesIterator();
|
||||
XWPFTable table;
|
||||
List<XWPFTableRow> rows;
|
||||
List<XWPFTableCell> cells;
|
||||
List<XWPFParagraph> paras;
|
||||
while (iterator.hasNext()) {
|
||||
table = iterator.next();
|
||||
if (table.getRows().size() > 1) {
|
||||
// 判断表格是需要替换还是需要插入,判断逻辑有$为替换,表格无$为插入
|
||||
if (this.matcher(table.getText()).find()) {
|
||||
rows = table.getRows();
|
||||
for (XWPFTableRow row : rows) {
|
||||
cells = row.getTableCells();
|
||||
for (XWPFTableCell cell : cells) {
|
||||
paras = cell.getParagraphs();
|
||||
for (XWPFParagraph para : paras) {
|
||||
this.replaceInPara(para, params, doc);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
insertTable(table, tableList); // 插入数据
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 正则匹配字符串
|
||||
*
|
||||
* @param str
|
||||
* @return
|
||||
*/
|
||||
private Matcher matcher(String str) {
|
||||
Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", Pattern.CASE_INSENSITIVE);
|
||||
Matcher matcher = pattern.matcher(str);
|
||||
return matcher;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据图片类型,取得对应的图片类型代码
|
||||
*
|
||||
* @param picType
|
||||
* @return int
|
||||
*/
|
||||
private static int getPictureType(String picType) {
|
||||
int res = CustomXWPFDocument.PICTURE_TYPE_PICT;
|
||||
if (picType != null) {
|
||||
if (picType.equalsIgnoreCase("image/png")) {
|
||||
res = CustomXWPFDocument.PICTURE_TYPE_PNG;
|
||||
} else if (picType.equalsIgnoreCase("image/dib")) {
|
||||
res = CustomXWPFDocument.PICTURE_TYPE_DIB;
|
||||
} else if (picType.equalsIgnoreCase("image/emf")) {
|
||||
res = CustomXWPFDocument.PICTURE_TYPE_EMF;
|
||||
} else if (picType.equalsIgnoreCase("image/jpg") || picType.equalsIgnoreCase("image/jpeg")) {
|
||||
res = CustomXWPFDocument.PICTURE_TYPE_JPEG;
|
||||
} else if (picType.equalsIgnoreCase("image/wmf")) {
|
||||
res = CustomXWPFDocument.PICTURE_TYPE_WMF;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭输入流
|
||||
*
|
||||
* @param is
|
||||
*/
|
||||
private void close(InputStream is) {
|
||||
if (is != null) {
|
||||
try {
|
||||
is.close();
|
||||
} catch (IOException e) {
|
||||
logger.error("关闭输入流发生异常,异常是" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭输出流
|
||||
*
|
||||
* @param os
|
||||
*/
|
||||
private void close(OutputStream os) {
|
||||
if (os != null) {
|
||||
try {
|
||||
os.close();
|
||||
} catch (IOException e) {
|
||||
logger.error("关闭输出流发生异常,异常是" + e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user