java word类型_java WordUtils word文档工具类

packagecom.sicdt.library.core.utils;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.util.List;importjava.util.Map;importjava.util.Set;importorg.apache.poi.hwpf.HWPFDocument;importorg.apache.poi.hwpf.usermodel.Range;importorg.apache.poi.xwpf.converter.core.XWPFConverterException;importorg.apache.poi.xwpf.converter.pdf.PdfConverter;importorg.apache.poi.xwpf.converter.pdf.PdfOptions;importorg.apache.poi.xwpf.usermodel.XWPFDocument;importorg.apache.poi.xwpf.usermodel.XWPFParagraph;importorg.apache.poi.xwpf.usermodel.XWPFRun;/***

*@authorzhenwei.shi

**/

public classDocxUtils {/***

* 描 述: doc内容改变

* 作 者: shizhenwei

* 历 史: (版本) 作者 时间 注释

*

*@paramis

* doc文档模板

*@paramparams

* key value 将模板里的可以替换为响应VALUE

*@return*@throwsIOException*/

public static byte[] docContentChange(InputStream is, Map params) throwsIOException {

HWPFDocument document= newHWPFDocument(is);

Range range=document.getRange();

Set keys =params.keySet();for(String key : keys) {

range.replaceText("{{"+key.toString()+"}}", params.get(key));

}

ByteArrayOutputStream baos= newByteArrayOutputStream();

document.write(baos);byte[] bytes =baos.toByteArray();

document.close();

baos.close();returnbytes;

}/***
描 述: docx内容改变

*
作 者: shizhenwei

*
历 史: (版本) 作者 时间 注释

*@paramis docx文档模板

*@paramparams key value 将模板里的可以替换为响应VALUE

*@return*@throwsIOException

*@throwsXWPFConverterException*/

public static byte[] docxContentChange(InputStream is,Map params) throwsXWPFConverterException, IOException{

XWPFDocument document= newXWPFDocument(is);

List list =document.getParagraphs();for(XWPFParagraph paragraph : list){

String regex= "(\\w|\\W)*\\{\\{\\w+\\}\\}(\\w|\\W)*";//{{string}}匹配

if(!paragraph.getText().matches(regex)){continue;

}

List runs =paragraph.getRuns();

loop :for(int i=0; i

XWPFRun run=runs.get(i);if(!run.text().matches(regex)){continue;

}if(null==params || params.keySet().size()<1){

run.setText("",0);continue;

}

Set 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);continueloop;

}

}

run.setText("",0);

}

}

ByteArrayOutputStream baos= newByteArrayOutputStream();

document.write(baos);byte[] bytes =baos.toByteArray();

document.close();

baos.close();returnbytes;

}/***
描 述: 将docx字节数组流转换为pdf字节数组流

*
作 者: shizhenwei

*
历 史: (版本) 作者 时间 注释

*@paramdocxBytes docx文档字节数组

*@return*@throwsXWPFConverterException

*@throwsIOException

* 注:需在部署系统安装word对应的中文字体*/

public static byte[] docx2pdf(byte[] docxBytes) throwsXWPFConverterException, IOException{

PdfOptions options=PdfOptions.create();

XWPFDocument document= new XWPFDocument(newByteArrayInputStream(docxBytes));

ByteArrayOutputStream baos= newByteArrayOutputStream();

PdfConverter.getInstance().convert(document, baos, options);returnbaos.toByteArray();

}/***
描 述: 将Word模板流改变内容后转换为pdf字节数组流

*
作 者: shizhenwei

*
历 史: (版本) 作者 时间 注释

*@paramis docx文档输入流

*@paramparams key value 将模板里的可以替换为响应VALUE

*@return*@throwsIOException

*@throwsXWPFConverterException

* * 注:需在部署系统安装word对应的中文字体*/

public static byte[] docx2pdf(InputStream is,Map params) throwsXWPFConverterException, IOException{

XWPFDocument document= newXWPFDocument(is);

List list =document.getParagraphs();for(XWPFParagraph paragraph : list){

String regex= "(\\w|\\W)*\\{\\{\\w+\\}\\}(\\w|\\W)*";//{{string}}匹配

if(!paragraph.getText().matches(regex)){continue;

}

List runs =paragraph.getRuns();for(int i=0; i

XWPFRun run=runs.get(i);if(!run.text().matches(regex)){continue;

}

Set 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= newByteArrayOutputStream();

PdfOptions options=PdfOptions.create();

PdfConverter.getInstance().convert(document, baos, options);byte[] bytes =baos.toByteArray();

document.close();

baos.close();returnbytes;

}/***

*
描 述: String replaceAll方法默认正则 {{}} 对特殊字符进行转义,如 {} == \\{\\}

*
作 者: shizhenwei

*
历 史: (版本) 作者 时间 注释

*@paramkey

*@return

*/

public staticString getReplaceAllKey(String key){

String afterKey= "";for(int i=0; i

afterKey+="\\{";

}else if('}'==key.charAt(i)){

afterKey+="\\}";

}else{

afterKey+=key.charAt(i);

}

}returnafterKey;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值