先说下 需要的依赖包
<dependency> <proupId> org.apache.poi </rompuprid> <letifactive> poi-excelant </ artifactid> <version> 3.12 </ version> </dependency> <dependency> <proupId> org.apache.poi </proupId> <Artifactid> Poi-ScratchPad </RetifActid> <version> 3.12 <version version> </pteridency> <version> 3.12 <version> </préquence> </ptetifactid> <version> 3.12 <version version> </pterence>> <version> 3.12 <version version> </pteridency> <version> 3.12 <version> </préquence> <ProupId> org.apache.poi </rom grouped> <Artifactid> Poi-ooxml </ artifactive> <version> 3.8 </ version> </dependency> <pedigency> <proupId> org.apache.poi </prouprid> <Artifactid> poi-oooxml-schemas </ artifactid> <version> 3.8 </ version> <dependency> <proupId> org.jfree </proupId> <Artifactid> jfreeChart </ artifactid> <version> 1.0.19 </-version> </ Dependency> <Dedency> <! - 支持插入图片 -> <proupId> org.docx4j </proupId> <eRtifactid> docx4j </ artifactid> <Dusion>> 3.3.1 <frérity> docx4j </tatifactid> <Dursed>> 3.3.1 <fri version>
示例 , 下图
如上图 , 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 需要替换的字符串地方 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 并命名 , 插入的图片如下 插入的图片如下
本人也没太过多去研究 , 亲测通过有效 , 在这分享下
1.Demo
Importer 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. 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. org.apache.poi.xwpf.usermodel.xwpfDocument; import org.apache.poi.xwpf.usermodel.xwpfparagraph; import org.apache.poi.xwpf.usermodel.xwpfrun; import org.docx4j.traversalutil; Importer; import; org.docx4j.dml.wordprocessingDrawing.inline; import org.docx4j.finders.RangeFinder; import org.docx4j.openpackaging.packages.wordprocessingmlpackage; import org.docx4j.openpacking.parts.wordprocessingml.binaryPartabsusimage; org.docx4j.openpackaging.parts.wordprocessingml.mainDocumentPart; import org.docx4j.wml.body; import org.docx4j.wml.boolAndefaultTrue; 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; org.docx4j.wml.rpr; import org.jfree.chart.chartfactory; import org.jfree.chart.chartutilities; import org.jfree.chart.jfreechart; import org.jfree.chart.labels.standardPiesectionLabelGener; org.jfree.chart.title.texttitle; import org.jfree.data.general.defaultpiedataset; import com.aisino.qysds.common.conastant.errorconstants; import com.aisino.qysds.common.exception.sysexception; importer com.aisino.qysds.svice com.google.common.collect.maps; public class exportbgServiceImpl {public static void main (string [] args) lève exception {map <string, string> map = maps.newhashmap (); map.put ("1 $", "1231"); XWPFDocument Document = new XWPFDocument (POIXMLDocument.openPackage ("D: //tp//test.docx")); Iterator <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 ++) {String OneParasTring = runs.get (i) .getText (runs.get (i) .getTextPosition ()); for (map.entry <string, string> entrée: map.entrySet ()) {if (oneParastring.equals (entry.getKey ())) {oneParastring = oneParastring.replace (entry.getKey (), entry.getValue ()); }} runs.get (i) .setText (oneParastring, 0); }} FileOutputStream outstream = null; outStream = new FileOutputStream ("d: //tp//test1.docx"); Document.Write (Outstream); outstream.close (); // ----------------------------------- 这块为生成图片 和 插入图片 DAUTTPIEDATATASET DataSet = new defaultPiedataSet (); DataSet.SetValue ("修改类", 1); DataSet.SetValue ("提示类", 1); DataSet.SetValue ("校验不通过", 3); DataSet.SetValue ("正常类", 3); Jfreechart chart = chartFactory.CreatePieChart3d (null, jeu de données, 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 (); Decimalformat df = new Decimalformat ("0,00%"); NumberFormat nf = NumberFormat.getInstance (); StandardPiesectionLabelGenerator Generator = new StandardPiesectionLabelGenerator ("{0} {2}", nf, df); // 获得 Section StandardPiesectionLabelGenerator 对象, 生成的格式 , // {0} 表示 Section 名 , {1} 表示 Section 的值 , {2} 表示百分比。可以自定义设置百分比 PIEPLOT.SetLabelfont (New Font ("黑体", Font.italic, 15)); // 设置饼图中类别字体 Pieplot.SetNodataSSAGE ("此时并没有任何数据可用"); PIEPLOT.SetCircular (false); Pieplot.setLabelgap (0,02d); PIEPLOT.SETIGNORENULLVALUES (true); // 设置不显示空位 PIEPLOT.SetIgnoreZELOINGUES (true); // 设置不显示负值或零值 String fname = "PIE.PNG"; File file = new File ("d: // tp", fname); if (file.exists ()) {file.delete (); } essayez {chartUtiability.saveChartaspng (fichier, graphique, 800, 500); Fichier file2 = nouveau fichier ("d: //tp//test1.docx"); WordProcessingMlPackage WPackage = WordProcessingMlPackage.load (new FileInputStream (File2)); MainDocumentPart MainDocumentPart = wpackage.getMainDocumentPart (); Document wmldoc = (document) MainDocumentPart.getJaxBelement (); Body Body = wmldoc.getBody (); // 提取正文中所有段落 list <object> paragraphs = body.getContent (); // 提取书签并创建书签的游标 RangeFinder rt = new RangeFinder ("ctBookmark", "ctmarkuprange"); Nouveau Traversalutil (paragraphes, RT); pour (ctbookmark bm: rt.getStarts ()) {if (bm.getName (). equals ("test")) {// 这里的 test 为 word 文档中预设的 书签名 inputStream inputStream = new FileInputStream (file); octet [] bytes = ioutils.tobytearray (inputStream); BinaryPartAbsttracTImage ImagePart = BinaryPartAbStractImage.CreateImagePart (WPackage, octets); Inline inline = imagePart.CreateImageInline (null, null, 0, 1, false, 10000); // 这里的 100000 不是正常屏幕大小 , 用于设置插入图片的大小 p p = (p) (bm.getParent ()); ObjectFactory Factory = new ObjectFactory (); // R 对象是匿名的复杂类型 , 然而我并不知道具体啥意思 , 估计这个要好好去看看 OOXML 才知道 R Run = Factory.Creater (); // Drawing 理解为画布? Drawing Drawing = Factory.CreateDrawing (); drawing.getAchorORinline (). Add (en ligne); run.getContent (). Add (dessin); P.GetContent (). Add (Run); }} wpackage.save (new FileOutputStream (nouveau fichier ("d: //tp//test1.docx"))); } catch (ioexception e) {}}}:
总结
以上所述是小编给大家介绍的 java 替换 mot 文档文字并指定位置插入图片 , 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!