java word添加图片_Java 替换word文档文字,指定位置插入图片

import java.awt.image.BufferedImage;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.math.BigInteger;importjava.text.DecimalFormat;importjava.text.NumberFormat;importjava.util.Iterator;importjava.util.List;importjava.util.Map;importjava.util.Set;

import javax.imageio.ImageIO;importorg.apache.poi.POIXMLDocument;importorg.apache.poi.openxml4j.opc.OPCPackage;importorg.apache.poi.util.IOUtils;importorg.apache.poi.xwpf.usermodel.XWPFDocument;importorg.apache.poi.xwpf.usermodel.XWPFParagraph;importorg.apache.poi.xwpf.usermodel.XWPFRun;importorg.docx4j.TraversalUtil;importorg.docx4j.dml.wordprocessingDrawing.Inline;importorg.docx4j.finders.RangeFinder;importorg.docx4j.openpackaging.packages.WordprocessingMLPackage;importorg.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;importorg.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;importorg.docx4j.wml.Body;importorg.docx4j.wml.BooleanDefaultTrue;importorg.docx4j.wml.CTBookmark;importorg.docx4j.wml.Color;importorg.docx4j.wml.Document;importorg.docx4j.wml.Drawing;importorg.docx4j.wml.HpsMeasure;importorg.docx4j.wml.ObjectFactory;importorg.docx4j.wml.P;importorg.docx4j.wml.R;importorg.docx4j.wml.RPr;importorg.jfree.chart.ChartFactory;importorg.jfree.chart.ChartUtilities;importorg.jfree.chart.JFreeChart;importorg.jfree.chart.labels.StandardPieSectionLabelGenerator;importorg.jfree.chart.plot.PiePlot;importorg.jfree.chart.title.TextTitle;importorg.jfree.data.general.DefaultPieDataset;importcom.google.common.collect.Maps;public class ExportBgServiceImpl {public static void main(String[] args) throwsException {

Map map =Maps.newHashMap();

map.put("$1", "1231");

XWPFDocument document= new XWPFDocument(POIXMLDocument.openPackage("D:\\tp\\test.docx"));

Iterator itPara =document.getParagraphsIterator();while(itPara.hasNext()) {

XWPFParagraph paragraph=(XWPFParagraph) itPara.next();

List runs =paragraph.getRuns();for (int i = 0; i < runs.size(); i++) {

String oneparaString=runs.get(i).getText(runs.get(i).getTextPosition()).trim();for (Map.Entryentry : 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();

//-----------------------------------这块为生成图片 和 插入图片

DefaultPieDataset dataset= newDefaultPieDataset();

dataset.setValue("修改类", 1);

dataset.setValue("提示类", 1);

dataset.setValue("校验不通过", 3);

dataset.setValue("正常类", 3);

JFreeChart chart= 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();

DecimalFormat df= new DecimalFormat("0.00%");

NumberFormat nf=NumberFormat.getInstance();

StandardPieSectionLabelGenerator generator= new StandardPieSectionLabelGenerator("{0} {2}", nf, df);//获得StandardPieSectionLabelGenerator对象,生成的格式,//{0}表示section名,{1}表示section的值,{2}表示百分比。可以自定义

piePlot.setLabelGenerator(generator);//设置百分比

piePlot.setLabelFont(new Font("黑体", Font.ITALIC, 15));//设置饼图中类别字体

piePlot.setNoDataMessage("此时并没有任何数据可用");

piePlot.setCircular(false);

piePlot.setLabelGap(0.02D);

piePlot.setIgnoreNullValues(true);//设置不显示空位

piePlot.setIgnoreZeroValues(true);//设置不显示负值或零值String tpPath = "D:\\tp\\pie.png";

File file= new File(tpPath);if(file.exists()) {

file.delete();

}try{

ChartUtilities.saveChartAsPNG(file, chart,800, 500);

File file2= new File("D:\\tp\\test1.docx");

WordprocessingMLPackage wPackage= WordprocessingMLPackage.load(newFileInputStream(file2));

MainDocumentPart mainDocumentPart=wPackage.getMainDocumentPart();

Document wmlDoc=(Document) mainDocumentPart.getJaxbElement();

Body body=wmlDoc.getBody();//提取正文中所有段落

List paragraphs =body.getContent();//提取书签并创建书签的游标

RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange");newTraversalUtil(paragraphs, rt);for(CTBookmark bm : rt.getStarts()) {if (bm.getName().equals("test")) {// 这里的test为 word文档中预设的 书签名

BufferedImage image =ImageIO.read(new File(tpPath));//下面为在图片上插入字符串 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值