先说下 需要的依赖包
<dependency> <GroupId> org.apache.poi </groupId> <ArtifactId> poi-excelant </arttifactid> <version> 3.12 </version> </dependency> <dependency> <groupid> org.apache.poi </groupId> <ArTifacTID> Poi-scratchad </Artence.poi </groupid> <ArTifacTid> POI-SCRRATCHAD </Artence <GroupId> org.apache.poi </proupid> <ArtifactId> poi-ooxml </artifactid> <version> 3.8 </version> </dependency> <dependency> <groupid> org.apache.poi </groupid> <Artifactid> Poi-oxml-schemas </art/version> <campacence> <Artifactid> Poi-oxml-schemas </art/version </versi </versi> <t/version> <dependency> <GroupId> org.jfree </groupid> <ArTifactId> jFreechart </arttifactid> <version> 1.0.19 </version> </dependency> <dependency> <!-支持插入图片-> </org.docx4j </groupid> <ArTtifactid> Docx4j </versies> </versi </versi </groupid> <Artifactid> Docx4j </version.13.
示例 , 下图
如上图 , 需要替换的字符串地方 “$ 1” 为 “1231” , 在指定位置插入书签 , 并命名 “Tes” , 插入的图片如下
本人也没太过多去研究 , 亲测通过有效 , 在这分享下
1.demo
impor java.awt.font; import java.io.file; import java.io.fileInputStream; impor java.io.fileoutputStream; import java.io.ioException; impor java.iButStream; impor java.math.biginteger; impor java.numberext. 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; impor org.apache.openxml4j.opc.opcpackage; import org.apache.openxml4j.opc.opcpackage; import org.apache.poi.openxml.opc.opcpackage; impor org.apache.poi.openxml.opc.opcpackage; import org.apache.poi.openpc.opc.opcpackage; import org.apache.apache.apache. org.apache.poi.xwpf.usermodel.xwpfdocument; import org.apache.poi.xwpf.usermodel.xwpfparagraph; impor org.apache.poi.xwpf.usermodel.xwpfrun; impor org.apache.poi.xwpf.usermodel.xwpfrun; impor org.apache.docx4j.usermodel. org.docx4j.dml.wordprocessingdrawing.inline; impor org.docx4j.finders.rangefinder; impor org.docx4j.openpackaging.packages.wordprocessingmlpackage; impor org.docx4j.openpackaging.partswork.partsworprining. org.docx4j.openpackaging.parts.wordprocessingml.maindocumentpart; impor org.docx4j.wml.body; impor org.docx4j.wml.booleandefaulttrue; import org.docx4j.wml.cbookmark; impor. org.docx4j.wml.document; impor org.docx4j.wml.drawing; impor org.docx4j.wml.hpsmeasure; impor org.docx4j.wml.objectfactory; import org.docx4j.wml.p; impor. org.docx4j.wml.rpr; impor org.jfree.chart.chartfactory; impor org.jfree.chart.chartutilities; import org.jfree.chart.jfreechart; impor org.chart.label.standardpiesectionlgenerator; orgr.chart.label.standardpiesectionlgenerator; org. org.jfree.chart.title.texttitle; impor org.jfree.data.general.defaultpiedataset; import com.aisino.qysds.common.constant.ErrorConstants; impor com.aisino.qysds.common.eception.sseption.sseption.ssexception; com.aisino.qysds.service.iexportbgservice; import com.google.common.collect.maps; kelas publik ExportBgServiceImpl {public static void main (string [] args) lempar pengecualian {peta <string, string> peta = peta.newhashMapap (); peta.put ("$ 1", "1231"); XWPFDocument Document = XWPFDocument baru (poixmldocument.openpackage ("d: //tp//test.docx")); Iterator <xwpfaragraph> itpara = document.getParagraphsiterator (); while (itpara.hasnext ()) {xwpfaragraph paragraph = (xwpfaragraph) itpara.next (); Daftar <SwpFrun> runs = paragraf.getRuns (); untuk (int i = 0; i <runs.size (); i ++) {string oneParastring = runs.get (i) .getText (runs.get (i) .getTextPosition ()); untuk (map.entry <string, string> entri: map.entryset ()) {if (oneParastring.equals (entry.getKey ())) {oneParastring = oneParastring.replace (entri.getKey (), entri.getValue ()); }} runs.get (i) .setText (oneParastring, 0); }} FileOutputStream outstream = null; outstream = new fileoutputStream ("d: //tp//test1.docx"); document.write (outstream); outstream.close (); // ----------------------------------- 这块为生成图片 和 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片 插入图片; 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 baru ("黑体", font.bold, 15)); // 设置图例类别字体 // TextTitle title = TextTitle baru (titleString); // title.setFont (font baru ("黑体", font.italic, 20)); // 设置标题字体 // chart.settitle (judul); Pieplot piePlot = (pIePlot) chart.getplot (); Decimalformat df = decimalformat baru ("0,00%"); NumberFormat nf = numberFormat.getInstance (); StandardPiesectionLabelGenerator Generator = StandardPiesectionLabelGenerator baru ("{0} {2}", nf, df); // 获得 StandardPiesectionLabelGenerator 对象, 生成的格式 , , {0} 表示 名 , , {1} 表示 的值 , , {{表示百分比。可以自定义 , , , , , , , , , , , , , , , , , , , , pieplot.setLabelGenerator (generator); // 设置百分比 pieplot.setlabelfont (font baru ("黑体", font.italic, 15)); // 设置饼图中类别字体 pieplot.setnodatamessage ("此时并没有任何数据可用"); pieplot.setcircular (false); pieplot.setLabelGap (0,02d); pieplot.setignorenullValues (true); // 设置不显示空位 pieplot.setignorerzeruVer (true); // 设置不显示负值或零值 string fname = "pie.png"; File file = file baru ("d: // tp", fname); if (file.exists ()) {file.delete (); } coba {chartutilities.savechartaspng (file, chart, 800, 500); File2 file2 = file baru ("d: //tp//test1.docx"); Wordprocessingmlpackage wpackage = wordprocessingmlpackage.load (FileInputStream baru (file2)); MainDocumentPart MainDocumentPart = wPackage.getMainDocumentPart (); Dokumen wmldoc = (dokumen) MainDocumentPart.getJaxBelement (); Tubuh tubuh = wmldoc.getBody (); // 提取正文中所有段落 Daftar <POMPEST> paragraf = body.getContent (); // 提取书签并创建书签的游标 Rangefinder RT = Rangefinder baru ("CTBookMark", "CtmarkUprange"); New Traversalutil (paragraf, RT); untuk (ctbookmark bm: rt.getStarts ()) {if (bm.getname (). equals ("test")) {// 这里的 test 为 word 文档中预设的 书签名 inputStream inputStream = FileInputStream baru (file); byte [] bytes = ioutils.tobyteArray (inputStream); BinaryPartabStracTimage ImagePart = BinaryPartabStracTimage.CreateMagePart (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 (); // menggambar 理解为画布? menggambar menggambar = factory.createdrawing (); drawing.getanchorinline (). add (inline); run.getContent (). Tambah (gambar); p.getContent (). Add (run); }} wpackage.save (FileOutputStream baru (file baru ("d: //tp//test1.docx")))); } catch (ioException e) {}}}最后效果图如下 :
总结
以上所述是小编给大家介绍的 java 替换 kata 文档文字并指定位置插入图片 , 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!