先说下 需要的依赖包
<Rependency> <roupeD> org.apache.poi </rougiD> <StifactId> po-excelant </artifactId> <splection> 3.12 </splements> </sependency> <sependency> <roupid> org.apache.poi </groupid> <roughid> org.apache.poi </rougiD> <StifactId> poi-ooxml </shintifactid> <الإصدار> 3.8 </version> </respency> <redence> <roupiD> org.apache.poi </groupiD> <Rependency> <roupEd> org.jfree </rougiD> <StifactId> jfreechart </shintifactid> <الإصدار> 1.0.19 </version> </sependency> <redence> <!-支持插入图片-> <sromid> org.docx4j </groupid>
示例 , 下图
如上图 , 需要替换的字符串地方 "$ 1" 为 "1231" , 在指定位置插入书签 , 并命名 "اختبار" , 插入的图片如下
本人也没太过多去研究 , 亲测通过有效 , 在这分享下
1.demo
استيراد java.awt.font ؛ استيراد java.io.file ؛ استيراد java.io.fileInputStream ؛ استيراد java.io.fileOutputStream ؛ استيراد java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد java.math.biginteger ؛ import.text.decimator java.util.iterator ؛ استيراد java.util.list ؛ استيراد java.util.map ؛ استيراد java.util.set ؛ استيراد org.apache.poi.poixmldocument ؛ import org.apache.poi.openxml4j.opc.opc.opc.opc.opc.opc.opc.opc.isease ؛ impoach.poi.poi.tiil.ioitils ؛ org.apache.poi.xwpf.usermodel.xwpfdocument ؛ import org.apache.poi.xwpf.usermodel.xwpfparagraph ؛ import org.apache.poi.xwpf.usermodel.xwpfrun ؛ import org.docx4j.redailtil ؛ org.docx4j.dml.wordprocessdrawing.inline ؛ استيراد org.docx4j.finders.rangefinder ؛ استيراد org.docx4j.openpackaging.packages.wordProcessMlpackage ؛ org.docx4j.openpackaging.parts.wordprocessingml.maindocumentpart ؛ استيراد org.docx4j.wml.body ؛ استيراد org.docx4j.wml.booleandefaulttrue ؛ org.docx4j.wml.document ؛ استيراد org.docx4j.wml.drawing ؛ استيراد org.docx4j.wml.hpsmeasure ؛ استيراد org.docx4j.wml.objectfactory ؛ استيراد org.docx4j.wml.p ؛ org.docx4j.wml.rpr ؛ import org.jfree.chart.chartfactory ؛ import org.jfree.chart.chartutilities org.jfree.chart.title.texttitle ؛ import org.jfree.data.general.defaultpiedataset ؛ import com.aisino.qysds.common.constant.errorConstants ؛ import com.aisino.qysds.common.exception com.google.common.collect.maps ؛ public class orportBgServiceImpl {public static void main (string [] args) rems {map <string ، string> map = maps.newhashmap () ؛ map.put ("$ 1" ، "1231") ؛ xwpfdocument document = new xwpfdocument (poixmldocument.openpackage ("d: //tp//test.docx") ؛ iterator <xwpfparagraph> itpara = document.getParaphSiterator () ؛ بينما (itpara.hasnext ()) {xwpfparagraph paragraph = (xwpfparagraph) itpara.next () ؛ قائمة <xwpfrun> تشغيل = paragraph.getRuns () ؛ لـ (int i = 0 ؛ i <runs.size () ؛ i ++) {String OneParastring = runs.get (i) .getText (runs.get (i) .getTextPosition ()) ؛ لـ (map.entry <string ، string> intern: map.entryset ()) {if (OneParastring.equals (Entpl.getKey ()))) }} runs.get (i) .settext (OneParastring ، 0) ؛ }} fileOutputStream OutStream = null ؛ OutStream = new FileOutputStream ("d: //tp//test1.docx") ؛ document.write (OutStream) ؛ Outstream.Close () ؛ // ------------------------------------- 这块为生成图片 插入图片 插入图片 defaultPiedataset Dataset = جديد defaultPiedataset () ؛ dataset.setValue ("修改类" ، 1) ؛ dataset.setValue ("提示类" ، 1) ؛ dataset.setValue ("校验不通过" ، 3) ؛ dataset.setValue ("正常类" ، 3) ؛ jfreechart chart = chartfactory.createpiechart3d (null ، dataset ، true ، false ، false) ؛ chart.getlegend (). setitemfont (خط جديد ("黑体" ، font.bold ، 15)) ؛ // 设置图例类别字体 // texttitle title = new TextTitle (titlestring) ؛ // title.setfont (font new ("黑体" ، 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) ؛ // 获得 standardpiesectionlabelgenerator 对象 ، 生成的格式 生成的格式 // {0} 表示 表示 名 , {1} 表示 表示 的值 , {2} 表示百分比。可以自定义 表示百分比。可以自定义 表示百分比。可以自定义pieplot.setlabelgenerator (مولد) ؛ // 设置百分比 pieplot.setlabelfont (خط جديد ("黑体" ، font.italic ، 15)) ؛ // 设置饼图中类别字体 pieplot.setnodatamessage ("此时并没有任何数据可用") ؛ pieplot.setCircular (false) ؛ pieplot.setlabelgap (0.02d) ؛ pieplot.setignorenullvalues (true) ؛ // 设置不显示空位 pieplot.setignorezovalues (true) ؛ // 设置不显示负值或零值 string fname = "pie.png" ؛ ملف ملف = ملف جديد ("d: // tp" ، fname) ؛ if (file.exists ()) {file.delete () ؛ } جرب {chartutilities.savechartaspng (ملف ، مخطط ، 800 ، 500) ؛ ملف file2 = ملف جديد ("d: //tp//test1.docx") ؛ WordProcessingMlPackage wpackage = WordProcessingMlPackage.load (FileInputStream جديد (file2)) ؛ MainDocumentPart MainDocumentPart = wpackage.getMainDocumentPart () ؛ مستند WMLDOC = (مستند) maindocumentpart.getjaxbelement () ؛ الجسم الجسم = wmldoc.getBody () ؛ // 提取正文中所有段落 LIST <Object> paragraphs = body.getContent () ؛ // 提取书签并创建书签的游标 RangeFinder RT = New RangeFinder ("CTBookmark" ، "CTMarkUprange") ؛ New Traversalutil (الفقرات ، RT) ؛ لـ (ctbookmark bm: rt.getStarts ()) {if (bm.getName (). equals ("test")) {// 这里的 test 为 word 文档中预设的 书签名 inputStream inputStream = new FileInputStream (file) ؛ byte [] bytes = ioutils.tobytearray (inputStream) ؛ BinaryPartabStractImage ImagePart = BinaryPartabStractImage.CreateImagePart (wpackage ، bytes) ؛ 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.getAnchororinLine (). add (inline) ؛ run.getContent (). add (drawing) ؛ p.getContent (). Add (Run) ؛ }} wpackage.save (FileOutputStream جديد (ملف جديد ("d: //tp//test1.docx"))) ؛ } catch (ioException e) {}}}: :
总结
以上所述是小编给大家介绍的 java 替换 word 文档文字并指定位置插入图片 , 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!