日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

發布時間:2025/3/15 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java word添加图片_Java 替换word文档文字并指定位置插入图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

先說下 需要的依賴包

org.apache.poi

poi-excelant

3.12

org.apache.poi

poi-scratchpad

3.12

org.apache.poi

poi-ooxml

3.8

org.apache.poi

poi-ooxml-schemas

3.8

org.jfree

jfreechart

1.0.19

org.docx4j

docx4j

3.3.1

示例,下圖

如上圖,需要替換的字符串地方“$1”為“1231”,在指定位置插入書簽,并命名“test”??? ,插入的圖片如下

本人也沒太過多去研究,親測通過有效,在這分享下

1.demo

import 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.NumberFormat;

import 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.util.IOUtils;

import org.apache.poi.xwpf.usermodel.XWPFDocument;

import org.apache.poi.xwpf.usermodel.XWPFParagraph;

import org.apache.poi.xwpf.usermodel.XWPFRun;

import org.docx4j.TraversalUtil;

import org.docx4j.dml.wordprocessingDrawing.Inline;

import org.docx4j.finders.RangeFinder;

import org.docx4j.openpackaging.packages.WordprocessingMLPackage;

import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage;

import 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;

import org.docx4j.wml.ObjectFactory;

import org.docx4j.wml.P;

import org.docx4j.wml.R;

import org.docx4j.wml.RPr;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartUtilities;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.labels.StandardPieSectionLabelGenerator;

import org.jfree.chart.plot.PiePlot;

import org.jfree.chart.title.TextTitle;

import org.jfree.data.general.DefaultPieDataset;import com.aisino.qysds.common.constant.ERRORConstants;

import com.aisino.qysds.common.exception.SysException;

import com.aisino.qysds.service.IExportBgService;

import com.google.common.collect.Maps;

public class ExportBgServiceImpl {

public static void main(String[] args) throws Exception {

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());

for (Map.Entry entry : 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 = new 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(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 fName = "pie.png";

File file = new File("D:\\tp", fName);

if (file.exists()) {

file.delete();

}

try {

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

File file2 = new File("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 paragraphs = body.getContent();

// 提取書簽并創建書簽的游標

RangeFinder rt = new RangeFinder("CTBookmark", "CTMarkupRange");

new TraversalUtil(paragraphs, rt);

for (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();

// drawing理解為畫布?

Drawing drawing = factory.createDrawing();

drawing.getAnchorOrInline().add(inline);

run.getContent().add(drawing);

p.getContent().add(run);

}

}

wPackage.save(new FileOutputStream(new File("D:\\tp\\test1.docx")));

} catch (IOException e) {

}

}

}

最后效果圖如下:

總結

以上所述是小編給大家介紹的Java 替換word文檔文字并指定位置插入圖片,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!

總結

以上是生活随笔為你收集整理的java word添加图片_Java 替换word文档文字并指定位置插入图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。