先說下先說下
<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文檔文字並指定位置插入圖片,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持! ,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!