先说下先说下
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.12</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.12</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.8</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.8</version> </dependency><!-- 生成图片--> <decendity> <groupId> org.jfree </groupId> <ARTIFACTID> JFREECHART </artifactid> <版本> <版本> 1.0.19 </version> </dependenty> <dependency> <dependency> <! - 支持插入图片->> <groupId> org.docx4j </groupId> </groupId> </groupId> </groupififactid> </groudifactid> docx4j </atrifention>
示例,下图
如上图,“ $ 1”为“ 1231”,在指定位置插入书签,并命名,“测试”,插入的图片如下
本人也没太过多去研究,亲测通过有效,在这分享下
1.Demo
import java.awt.Font;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.math.BigInteger;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Set;import org.apache.poi.POIXMLDocument;import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.util.IOUtils;import org.apache.poi.xwpf.usermodel.xwpfdocument; import org.apache.poi.xwpf.usermodel.xwpfparagraph; import org.apache.poi.xwpf.usermodel.usermodel.xwpfrun.xwpfrun; import org.doccx4j.draj.traj.traj.traj.traj.traj.traj.traj.traj.traj.traversalutly; org.docx4j.dml.wordprocessingDrawing.Inline;import org.docx4j.finders.RangeFinder;import org.docx4j.openpackaging.packages.WordprocessingMLPackage;import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;import org.docx4j.wml.Body;import org.docx4j.wml.BooleanDefaultTrue;import org.docx4j.wml.CTBookmark;import org.docx4j.wml.Color;import org.docx4j.wml.Document;import org.docx4j.wml.Drawing;import org.docx4j.wml.HpsMeasure;import org.docx4j.wml.ObjectFactory;import org.docx4j.wml.P;import org.docx4j.wml.R;import org.docx4j.wml.rpr; import org.jfree.chart.chartfactory; import org.jfree.chart.chart.chart.chart.chart.chart.chart.chart.chart.chart.chart.chart.chart.jfree.jfree.jfreechart; import org.jfree.jfree.chart.chart.chart.labels.labels.labels of org.jfree.chart.title.title.textTitle; import org.jfree.data.general.defaultpiedataset; import com.aisino.qysin.qysss.common.common.common.constant.errorconstant; import com.aisino.aisino.aisino.qysino.qysss.common.common.exiption.sysexection.sysexection; com.aisino.qysds.service.iexportbgservice; import com.google.common.collect.maps; public class exportBgServiceImpl {public static void main(string string [] args [] map.put(“ $ 1”,“ 1231”); xwpfdocument document = new xwpfdocument(poixmldocument.openpackage(“ d://tp//test.docx”));迭代器<xwpfparagraph> itpara = document.getParagraphSiterator(); while(itpara.hasnext()){xwpfParagraph paragraph =(xwpfParagraph)itpara.next(); list <xwpfrun> runs = paragraph.getRuns(); for(int i = 0; i <runs.size(); i ++){字符串oneParasTring = runs.gets.get(i).getText(runs.get(i).getTextposition()); for(map.entry <string,string> entry:map.entryset()){if(oneparastring.equals(entry.getKey())){OneParasTring = OneParasTring = OneParastring.replace.replace(entry.getKey(),entry.getValue()); }} runs.get(i).setText(OneParastring,0); }} fileOutputStream utstream = null; outstream = new FileOutputStream(“ d://tp//test1.docx”); document.write(totream); outStream.close();//-----------------------------------这块为生成图片 和 插入图片 DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue(“修改类”,1); dataset.setValue(“提示类”,1); dataset.setValue(“校验不通过”,3); dataset.setValue(“正常类”,3); jfreechart图表= ChartFactory.CreatePiechArt3D(null,DataSet,true,false,false); Chart.GetLegend()。SetItemFont(new Font(“黑体”,Font.Bold,15)); //设置图例类别字体// texttitle title = new texttitle(titlestring); // title.setfont(new font(“黑体”,font.italic,20)); //设置标题字体// chart.settitle(title); PiePlot PiePlot =(PiePlot)Chart.GetPlot(); Demalformat df =新的Demalformat(“ 0.00%”); numberFormat nf = numberFormat.getInstance(); StandardPiesectionLabelgenerator =新的StandardPiesectionLabelGenerator(“ {0} {2}”,NF,DF); //获得standardPiesectionLabelgenerator对象,// // {0}表示设置百分比PIEPLOT.SETLABELFONT(new Font(“黑体”,Font.italic,15)); //设置饼图中类别字体PIEPLOT.SETNODATAMESSAGE(“此时并没有任何数据可用”); pieplot.setcircular(false); pieplot.setlabelgap(0.02d); pieplot.setignorenullvalues(true); // pieplot.setignorezerovalues(true); //设置不显示负值或零值字符串fname =“ pie.png”;文件文件=新文件(“ d:// tp”,fname); if(file.exists()){file.delete(); }尝试{ChartUtility.SaveChartAspNG(文件,图表,800,500);文件file2 =新文件(“ d://tp//test1.docx”); WordProcessingmlpackage wpackage = WordProcessingmlpackage.load(new FileInputStream(file2)); maindocumentPart mainDocumentPart = wpackage.getMainDocumentPart();文档wmldoc =(文档)maindocumentPart.getJaxBelement();身体= wmldoc.getbody(); //提取正文中所有段落列表<Object>段落= body.getContent(); //提取书签并创建书签的游标测距仪rt =新测距仪(“ ctbookmark”,“ ctmarkuprange”);新的Traversalutil(段落,RT); for(ctbookmark bm:rt.getStarts()){if(bm.getName()。equals(“ test”)){// test test test test为word文档中预设的word inputStream InputStream InputStream = new fileInputStream = new fileInputStream(file);字节[]字节= ioutils.tobytearray(inputstream); binaryPartabsTractImage imagePart = binaryPartabStractImage.CreateImagePart(wpackage,bytes);内联= imagePart.CreateImageInline(null,null,0,1,false,10000); //这里的100000不是正常屏幕大小,用于设置插入图片的大小p p =(p)(bm.getParent()); ObjectFactory Factory = new ObjectFactory(); // r对象是匿名的复杂类型,然而我并不知道具体啥意思//绘图理解为画布?绘图绘图= factory.createdrawing(); draw.getanchorinline()。add(inline); run.getContent()。add(绘图); p.getContent()。add(run); }} wpackage.save(new FileOutputStream(new File(“ d://tp//test1.docx”)))); } catch(ioexception e){}}}}最后效果图如下:
总结
以上所述是小编给大家介绍的java替换word文档文字并指定位置插入图片,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!