word的docx中的文字图片替换说明.docx
- 文档编号:30656698
- 上传时间:2023-08-19
- 格式:DOCX
- 页数:23
- 大小:26.59KB
word的docx中的文字图片替换说明.docx
《word的docx中的文字图片替换说明.docx》由会员分享,可在线阅读,更多相关《word的docx中的文字图片替换说明.docx(23页珍藏版)》请在冰豆网上搜索。
word的docx中的文字图片替换说明
1,需要的jar:
2,替换docx文档的文字、图片实例
*注意事项:
*word中的替换的文字replaceStr一定是从普通txt文本中粘贴过来的,这样才可以保证这些replaceStr的所有属性一致
*才能保证这些replaceStr在同一个XWPFRun中。
publicclassWordTest2{
StringtemplatePathX="D:
/temp/打印样本/poi/打印样本.docx";
StringsavePath="D:
/temp/打印样本/poi/打印样本-temp.docx";
//image
StringlogoImagePath="D:
/temp/打印样本/forest_logo.png";
StringIconImagePath="D:
/temp/打印样本/icon.jpg";
@Test
publicvoidtestDocx(){
try{
WordDocxUtilwordDocxUtil=newWordDocxUtil(templatePathX);
//ArrayList
//for(StringreplaceEle:
replaceEles){
//System.out.println(replaceEle);
//}
//替换文字
//Map
//map.put("${orderId}","B123123");
//map.put("${boxName}","王五");
//map.put("${course-1}","语文");
//map.put("${score}","85");
//wordDocxUtil.replaceText(map);
//单个文字替换
//wordDocxUtil.replaceText("${course}","语文");
//正则表达式文字替换
//wordDocxUtil.replaceTextByRegex("\\$\\{course-\\d\\}","[-_-]");
//替换图片
//Map
//imageMap.put("width","50");
//imageMap.put("height","50");
//imageMap.put("imageType",WordDocxUtil.getSuffix(logoImagePath));
//imageMap.put("content",WordDocxUtil.inputStream2ByteArray(newFileInputStream(logoImagePath),true));
//wordDocxUtil.replaceImage("${forestLogo}",imageMap);
//
//imageMap=newHashMap
//imageMap.put("width","50");
//imageMap.put("height","50");
//imageMap.put("imageType",WordDocxUtil.getSuffix(IconImagePath));
//imageMap.put("content",WordDocxUtil.inputStream2ByteArray(newFileInputStream(IconImagePath),true));
//wordDocxUtil.replaceImage("${icon}",imageMap);
//setComboboxValue("paytype","1,3,5,6");
//setComboboxValue("makeType","aa,vv");
wordDocxUtil.save(savePath);
}catch(Exceptione){
e.printStackTrace();
}
}
}
2,导入docx文档的操作帮助类
packagecom.util;
importjava.io.ByteArrayInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Map;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
importorg.apache.poi.POIXMLDocument;
importorg.apache.poi.xwpf.usermodel.UnderlinePatterns;
importorg.apache.poi.xwpf.usermodel.VerticalAlign;
importorg.apache.poi.xwpf.usermodel.XWPFDocument;
importorg.apache.poi.xwpf.usermodel.XWPFParagraph;
importorg.apache.poi.xwpf.usermodel.XWPFRun;
importorg.apache.poi.xwpf.usermodel.XWPFTable;
importorg.apache.poi.xwpf.usermodel.XWPFTableCell;
importorg.apache.poi.xwpf.usermodel.XWPFTableRow;
importorg.apache.xmlbeans.XmlException;
importorg.apache.xmlbeans.XmlToken;
importorg.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
importorg.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
importorg.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
/**
*@authorlonglin
*注意事项:
*1,替换的特殊文字replaceStr一定是从普通txt文本中粘贴过来的,这样才可以保证这些replaceStr的所有属性一致
*才能保证这些replaceStr在同一个XWPFRun中。
*/
publicclassWordDocxUtil{
XWPFDocumentdocument=null;
Stringsuffix;
publicWordDocxUtil(StringfilePath){
try{
String[]p=filePath.split("\\.");
//判断文件扩展名
if(p.length>0&&p[p.length-1].equalsIgnoreCase("docx")){
suffix=p[p.length-1];
document=newXWPFDocument(POIXMLDocument.openPackage(filePath));
}
}catch(IOExceptione){
e.printStackTrace();
}
}
/**
*返回Docx中需要替换的特殊字符,没有重复项推荐传入正则表达式参数"\\$\\{[^{}]+\\}
*@paramregex
*@returnDocx中需要替换的特殊字符
*/
publicArrayList
ArrayList
//遍历段落
Iterator
while(itPara.hasNext()){
XWPFParagraphparagraph=(XWPFParagraph)itPara.next();
al.addAll(getReplaceElements(regex,paragraph));
}
//遍历表
Iterator
while(itTable.hasNext()){
XWPFTabletable=(XWPFTable)itTable.next();
intrcount=table.getNumberOfRows();
for(inti=0;i XWPFTableRowrow=table.getRow(i); List for(XWPFTableCellcell: cells){ List for(XWPFParagraphparagraph: paraList){ al.addAll(getReplaceElements(regex,paragraph)); } } } } returnal; } /** *返回Docx中需要替换的特殊字符,没有重复项推荐传入正则表达式参数"\\$\\{[^{}]+\\} *@paramregex *@paramal *@paramparagraph */ privateArrayList //System.out.println("===================="); ArrayList List for(inti=0;i XWPFRunrun=runs.get(i); StringrunString=run.getText(run.getTextPosition()); //System.out.println("run["+i+"]: "+runString); if(runString! =null){ Patternpattern=Ppile(regex); Matchermatcher=pattern.matcher(runString); while(matcher.find()){ if(! al.contains(matcher.group())){ al.add(matcher.group()); } } } } returnal; } /** *把word文档中key替换为value *@parammap需要替换的文字如: 把${name}替换为“小明” *@return */ publicbooleanreplaceText(Map try{ //替换段落中的指定文字 Iterator while(itPara.hasNext()){ XWPFParagraphparagraph=(XWPFParagraph)itPara.next(); replaceText(map,paragraph); } //替换表格中的指定文字 Iterator while(itTable.hasNext()){ XWPFTabletable=(XWPFTable)itTable.next(); intrcount=table.getNumberOfRows(); for(inti=0;i XWPFTableRowrow=table.getRow(i); List for(XWPFTableCellcell: cells){ List for(XWPFParagraphparagraph: paraList){ replaceText(map,paragraph); } } } } returntrue; }catch(Exceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } returnfalse; } /** *把XWPFParagraph中key替换为value *@parammap需要替换的文字如: 把${name}替换为“小明” *@paramparagraph */ privatevoidreplaceText(Map List for(inti=0;i XWPFRunrun=runs.get(i); StringoneparaString=run.getText(run.getTextPosition()); if(oneparaString! =null){ for(Map.Entry map.entrySet()){ oneparaString=oneparaString.replace(entry.getKey(),entry.getValue()); } run.setText(oneparaString,0); } } } /** *根据正则表达式替换字符串 *@paramregex *@paramnewText *@return */ publicbooleanreplaceText(StringoldText,StringnewText){ try{ Map replaceMap.put(oldText,newText); returnreplaceText(replaceMap); }catch(Exceptione){ e.printStackTrace(); } returnfalse; } /** *根据正则表达式替换字符串 *@paramregex *@paramnewText *@return */ publicbooleanreplaceTextByRegex(Stringregex,StringnewText){ try{ Map List for(StringreplaceEle: replaceEles){ map.put(replaceEle,newText); } returnreplaceText(map); }catch(Exceptione){ e.printStackTrace(); } returnfalse; } /** * *@paramimageReplaceStr被图片替换的文字 *@paramimageMap图片数据需要包括: *width: 图片宽 *height: 图片高 *imageType: 图片类型 *content: 图片的具体数据(二进制数据) *@return */ publicbooleanreplaceImage(StringimageReplaceStr,Map try{ //替换段落中的指定文字 Iterator while(itPara.hasNext()){ XWPFParagraphparagraph=(XWPFParagraph)itPara.next(); replaceImage(imageReplaceStr,imageMap,paragraph); } //替换表格中的指定文字 Iterator while(itTable.hasNext()){ XWPFTabletable=(XWPFTable)itTable.next(); intrcount=table.getNumberOfRows(); for(inti=0;i XWPFTableRowrow=table.getRow(i); List for(XWPFTableCellcell: cells){ StringcellTextString=cell.getText(); if(cellTextString.indexOf(imageReplaceStr)>-1){ List for(XWPFParagraphparagraph: paraList){ replaceImage(imageReplaceStr,imageMap,paragraph); } } } } } returntrue; }catch(Exceptione){ e.printStackTrace(); } returnfalse; } /** *在XWPFParagraph中替换图片 *@paramimageReplaceStr被图片替换的文字 *@paramimageMap图片数据: *width: 图片宽 *height: 图片高 *imageType: 图片类型 *content: 图片的具体数据(二进制数据) *@paramparagraph *@throwsException */ privatevoidreplaceImage(StringimageReplaceStr,Map List for(inti=0;i XWPFRunrun=runs.get(i); StringoneparaString=run.getText(run.getTextPosition()); if(oneparaString! =null){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- word docx 中的 文字 图片 替换 说明