java WordUtils word文档工具类
package com.sicdt.library.core.utils;import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.Set;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.xwpf.converter.core.XWPFConverterException;
public class WordUtils {
/**
* <br>
* 描 述: doc内容改变 <br>
* 作 者: shizhenwei <br>
* 历 史: (版本) 作者 时间 注释
*
* @param is
* doc文档模板
* @param params
* key value 将模板里的可以替换为响应VALUE
* @return
* @throws IOException
*/
public static byte[] docContentChange(InputStream is, Map<String, String> params) throws IOException {
HWPFDocument document = new HWPFDocument(is);
Range range = document.getRange();
Set<String> keys = params.keySet();
for (String key : keys) {
range.replaceText(key, params.get(key));
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
document.write(baos);
byte[] bytes = baos.toByteArray();
document.close();
baos.close();
return bytes;
}
/**
* <br>
* 描 述: docx内容改变 <br>
* 作 者: shizhenwei <br>
* 历 史: (版本) 作者 时间 注释
*
* @param is
* docx文档模板
* @param params
* key value 将模板里的可以替换为响应VALUE
* @return
* @throws IOException
* @throws XWPFConverterException
*/
public static byte[] docxContentChange(InputStream is, Map<String, String> params)
throws XWPFConverterException, IOException {
return DocxUtils.docxContentChange(is, params);
}
/**
* <br>
* 描 述: 将docx字节数组流转换为pdf字节数组流 <br>
* 作 者: shizhenwei <br>
* 历 史: (版本) 作者 时间 注释
*
* @param docxBytes
* docx文档字节数组
* @return
* @throws XWPFConverterException
* @throws IOException
* 注:需在部署系统安装word对应的中文字体
*/
public static byte[] docx2pdf(byte[] docxBytes) throws XWPFConverterException, IOException {
return DocxUtils.docx2pdf(docxBytes);
}
/**
* <br>
* 描 述: 将Word模板流改变内容后转换为pdf字节数组流 <br>
* 作 者: shizhenwei <br>
* 历 史: (版本) 作者 时间 注释
*
* @param is
* docx文档输入流
* @param params
* key value 将模板里的可以替换为响应VALUE
* @return
* @throws IOException
* @throws XWPFConverterException
* * 注:需在部署系统安装word对应的中文字体
*/
public static byte[] docx2pdf(InputStream is, Map<String, String> params)
throws XWPFConverterException, IOException {
return DocxUtils.docx2pdf(is, params);
}
}
package com.sicdt.library.core.utils;import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.usermodel.Range;
import org.apache.poi.xwpf.converter.core.XWPFConverterException;
import org.apache.poi.xwpf.converter.pdf.PdfConverter;
import org.apache.poi.xwpf.converter.pdf.PdfOptions;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
/**
*
* @author zhenwei.shi
*
*/
public class DocxUtils {
/**
* <br>
* 描 述: doc内容改变 <br>
* 作 者: shizhenwei <br>
* 历 史: (版本) 作者 时间 注释
*
* @param is
* doc文档模板
* @param params
* key value 将模板里的可以替换为响应VALUE
* @return
* @throws IOException
*/
public static byte[] docContentChange(InputStream is, Map<String, String> params) throws IOException {
HWPFDocument document = new HWPFDocument(is);
Range range = document.getRange();
Set<String> keys = params.keySet();
for (String key : keys) {
range.replaceText("{{"+key.toString()+"}}", params.get(key));
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
document.write(baos);
byte[] bytes = baos.toByteArray();
document.close();
baos.close();
return bytes;
}
/**
* <br>描 述: docx内容改变
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
* @param is docx文档模板
* @param params key value 将模板里的可以替换为响应VALUE
* @return
* @throws IOException
* @throws XWPFConverterException
*/
public static byte[] docxContentChange(InputStream is,Map<String,String> params) throws XWPFConverterException, IOException{
XWPFDocument document = new XWPFDocument(is);
List<XWPFParagraph> list = document.getParagraphs();
for(XWPFParagraph paragraph : list){
String regex = "(\\w|\\W)*\\{\\{\\w+\\}\\}(\\w|\\W)*";//{{string}}匹配
if(!paragraph.getText().matches(regex)){
continue;
}
List<XWPFRun> runs = paragraph.getRuns();
loop : for(int i=0; i<runs.size(); i++){
XWPFRun run = runs.get(i);
if(!run.text().matches(regex)){
continue;
}
if(null==params || params.keySet().size()<1){
run.setText("",0);
continue;
}
Set<String> keySet = params.keySet();
for(String key : keySet){
if(run.text().contains(key)){
String text = run.text().replaceAll(getReplaceAllKey("{{"+key.toString()+"}}"), params.get(key));
run.setText(text,0);
continue loop;
}
}
run.setText("",0);
}
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
document.write(baos);
byte[] bytes = baos.toByteArray();
document.close();
baos.close();
return bytes;
}
/**
* <br>描 述: 将docx字节数组流转换为pdf字节数组流
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
* @param docxBytes docx文档字节数组
* @return
* @throws XWPFConverterException
* @throws IOException
* 注:需在部署系统安装word对应的中文字体
*/
public static byte[] docx2pdf(byte[] docxBytes) throws XWPFConverterException, IOException{
PdfOptions options = PdfOptions.create();
XWPFDocument document = new XWPFDocument(new ByteArrayInputStream(docxBytes));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfConverter.getInstance().convert(document, baos, options);
return baos.toByteArray();
}
/**
* <br>描 述: 将Word模板流改变内容后转换为pdf字节数组流
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
* @param is docx文档输入流
* @param params key value 将模板里的可以替换为响应VALUE
* @return
* @throws IOException
* @throws XWPFConverterException
* * 注:需在部署系统安装word对应的中文字体
*/
public static byte[] docx2pdf(InputStream is,Map<String, String> params) throws XWPFConverterException, IOException{
XWPFDocument document = new XWPFDocument(is);
List<XWPFParagraph> list = document.getParagraphs();
for(XWPFParagraph paragraph : list){
String regex = "(\\w|\\W)*\\{\\{\\w+\\}\\}(\\w|\\W)*";//{{string}}匹配
if(!paragraph.getText().matches(regex)){
continue;
}
List<XWPFRun> runs = paragraph.getRuns();
for(int i=0; i<runs.size(); i++){
XWPFRun run = runs.get(i);
if(!run.text().matches(regex)){
continue;
}
Set<String> keySet = params.keySet();
for(String key : keySet){
key = "{{"+key+"}}";
if(run.text().contains(key)){
String text = run.text().replaceAll(getReplaceAllKey(key), params.get(key));
run.setText(text,0);
}
}
}
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfOptions options = PdfOptions.create();
PdfConverter.getInstance().convert(document, baos, options);
byte[] bytes = baos.toByteArray();
document.close();
baos.close();
return bytes;
}
/**
*
* <br>描 述: String replaceAll方法默认正则 {{}} 对特殊字符进行转义,如 {} == \\{\\}
* <br>作 者: shizhenwei
* <br>历 史: (版本) 作者 时间 注释
* @param key
* @return
*/
public static String getReplaceAllKey(String key){
String afterKey = "";
for(int i=0; i<key.length(); i++){
if('{'==key.charAt(i)){
afterKey+="\\{";
}else if('}'==key.charAt(i)){
afterKey+="\\}";
}else{
afterKey+=key.charAt(i);
}
}
return afterKey;
}
}
以上是 java WordUtils word文档工具类 的全部内容, 来源链接: utcz.com/z/393976.html