先说下 需要的依赖包
<depervice> <groupid> org.apache.poi </groupid> <artifactid> poi-excelant </artifactid> <sersive> 3.12 </version> </dependence> <dehyed> <groupid> org.apache.poi </groupid> <strifactid> poi-scratchpad </artifactid> <sers> 3.12 </12 </12 </12 <//12 </12 <//12 <//12 <//12 <//12 <//12 <//12 <//artifactid> <groupId> org.apache.poi </GroupId> <artifactid> poi-ooxml </artifactid> <sersiod> 3.8 </version> </dependency> <dehydency> <groupid> org.apache.poi </GroupId> <strifactid> poi-ooxml-schemas </artifactid> <series> <версии> <версии> <версии> <версии> <версии> <версии> <версии> <версии> <версии> <версии> <версия> <версия> <версия> <версия> <версии> <версия> <версия> <seriate>. <dependency> <groupId>org.jfree</groupId> <artifactId>jfreechart</artifactId> <version>1.0.19</version> </dependency> <dependency><!--支持插入图片--> <groupId>org.docx4j</groupId> <artifactId>docx4j</artifactId> <version>3.3.1</version> </dependency>
示例 , 下图
如上图 , 需要替换的字符串地方 «$ 1» 为 «1231» , 在指定位置插入书签 并命名 并命名 «Тест» , 插入的图片如下
本人也没太过多去研究 , 亲测通过有效 在这分享下
1. Демо
Импорт java.awt.font; импорт java.io.file; импорт java.io.fileinputstream; импорт java.io.fileoutputstream; импорт java.io.ioexception; импорт java.io.inputstream; importmath.math.biginteger; importmalformat; 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.poi. org.apache.poi.xwpf.usermodel.xwpfdocument; import org.apache.poi.xwpf.usermodel.xwppparagraph; import org.apache.poi.xwpf.usermodel.xwpfrun; импорт org.docx4j.traversalUtil; org.docx4j.dml.wordprocessingDrawing.inline; импорт org.docx4j.finders.rangefinder; импорт org.docx4j.openpackaging.packages.wordprocessingmlpackage; import org.docx4j.openpackaging.parts.wroodprocessingml.bartinage; 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; импорт org.docx4j.wml.objectfactory; import.docx4j.wml.p; import.docx4j.wml.r.docx4j.wml.p; импорт org.docx4j.wml.r. org.docx4j.wml.rpr; импорт org.jfree.chart.chartfactory; import org.jfree.chart.chartutilities; импорт org.jfree.chart.jfreechart; импорт org.jfree.chart.labels.standardpiesectionLabelGenerator; импорт org.jfree. org.jfree.chart.title.texttitle; import org.jfree.data.general.defaultpiedataset; import com.aisino.qysds.common.constant.errorconstants; импорт com.aisino.qusd.common.exception.sysexcept com.google.common.collect.maps; открытый класс exportbgserviceimpl {public static void main (string [] args) бросает исключение {map <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 (); Список <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> entry: map.EntrySet ()) {if (oneparastring.equals (entry.getkey ())) {oneparastring = oneparastring.replace (entry.getKey (), intry.getValue ()); }} runs.get (i) .settext (OneParastring, 0); }} FileOutputStream outstream = null; upstream = new FileOutputStream ("d: //tp//test1.docx"); Document.Write (Outstream); upstream.close (); // ----------------------------------- 这块为生成图片 和 插入图片 DefaultPiedAtaset DataSet = new DefaultPiedAtaset (); DataSet.SetValue ("修改类", 1); DataSet.SetValue ("提示类", 1); DataSet.SetValue ("校验不通过", 3); DataSet.SetValue ("正常类", 3); Jfreechart chart = chartfactory.createPieChart3d (null, набор данных, true, false, false); chart.getlegend (). setiTemfont (new Font ("黑体", font.bold, 15)); // 设置图例类别字体 // texttitle title = new TextTitle (titleString); // title.setFont (новый шрифт ("黑体", font.italic, 20)); // 设置标题字体 // chart.settitle (title); Pieplot pieplot = (pieplot) chark.getplot (); Decimalformat df = new DecimalFormat («0,00%»); NumberFormat nf = numberFormat.getInstance (); StandardPiesectionLabelGenerator Generator = new StandardPiesectionLabelGenerator ("{0} {2}", NF, DF); // 获得 StandardPiesectionLabelGenerator 对象, 生成的格式 , // {0} 表示 Section 名 , {1} 表示 的值 {2}}}} pieploT.etrage.设置百分比 pieplot.setlabelfont (новый шрифт ("黑体", font.italic, 15)); // 设置饼图中类别字体 pieplot.setnodatamessage ("此时并没有任何数据可用"); pieplot.setCircular (false); pieplot.setlabelgap (0,02d); pieplot.setignorenullvalues (true); // 设置不显示空位 pieplot.setignorezeraules (true); // 设置不显示负值或零值 string fname = "pie.png"; File file = new File ("d: // tp", fname); if (file.exists ()) {file.delete (); } try {chartUtility.saveChartaspng (файл, диаграмма, 800, 500); File file2 = new File ("d: //tp//test1.docx"); WordProcessingMlpackage wpackage = wordProcessingMlpackage.load (new FileInputStream (file2)); MainDocumentPart MainDocumentPart = wpackage.getMainDocumentPart (); Документ wmldoc = (документ) maindocumentpart.getjaxbelement (); Тело тело = wmldoc.getbody (); // 提取正文中所有段落 List <object> paracraphs = body.getContent (); // 提取书签并创建书签的游标 RangeFinder RT = новый дальномер ("ctbookmark", "ctmarkuprange"); Новый Traversalutil (абзацы, RT); для (ctbookmark bm: rt.getStarts ()) {if (bm.getName (). equals ("test")) {// 这里的 тест 为 word 文档中预设的 书签名 inputStream inputStream = new FileInputStream (file); byte [] bytes = ioutils.tobytearray (inputstream); BinaryPartAbStractImage ImagePart = BinaryPartAbstractImage.CreateImagePart (wPackage, байты); 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 (); // рисунок 理解为画布? чертеж рисунок = factory.createdRawing (); drawing.getanchorinline (). добавить (inline); run.getContent (). Добавить (чертеж); p.getContent (). Добавить (run); }} wpackage.save (new FileOutputStream (new File ("d: //tp//test1.docx"))); } catch (ioException e) {}}}最后效果图如下 :
总结
以上所述是小编给大家介绍的 java 替换 слово 文档文字并指定位置插入图片 希望对大家有所帮助 希望对大家有所帮助 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!