先说下 需要的依赖包

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文档文字并指定位置插入图片相关推荐

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

    先说下 需要的依赖包 org.apache.poi poi-excelant 3.12 org.apache.poi poi-scratchpad 3.12 org.apache.poi poi-oo ...

  2. 用 Python 自动生成 Word 文档并在指定位置插入图片

    用Python生成Word文档 在指定位置插入图片 首先当然需要第三方库啦(▽) 天才第一步,第三方的库O(∩_∩)O哈哈~ 参照转发的是这位大佬的博客:https://blog.csdn.net/c ...

  3. java pdf添加图片_java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: com.itextpdf itextp ...

  4. 记录使用Docx4j向word文档的指定位置插入图片遇到的坑

    使用Docx4j向指定位置插入图片 pom.xml <dependency><groupId>org.docx4j</groupId><artifactId& ...

  5. java pdf 插入图片_java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: com.itextpdf itextp ...

  6. java pdf域插入img_java实现在pdf模板的指定位置插入图片

    本文实例为大家分享了java在pdf模板的指定位置插入图片的具体代码,供大家参考,具体内容如下 java操作pdf有个非常好用的库itextpdf,maven: com.itextpdf itextp ...

  7. python 在表格指定位置插入图片

    在表格指定位置插入图片 import xlsxwriter file = '数据' + '.xlsx' # 保存表格名 pic_path = 'image/1.png' # 图片路径 workbook ...

  8. python替换指定位置word图片_用Python在word的指定位置插入图片(使用Python-docx包)...

    1 2 首先,本实例是采用java语言的,需要进行xml操作,至于poi,docx4j这些,因为感觉不是文档不太好,要嘛就是操作不方便,而且英文就算了,主要是注释很少,让人云里雾里的.所以,嘿嘿,直接 ...

  9. java后台代码添加超链接_Java 实现Excel文档添加超链接的代码

    超链接即内容链接,通过给特定对象设置超链接,可实现载体与特定网页.文件.邮件.网络等的链接,点击链接载体可打开链接目标,在文档处理中是一种比较常用的功能.本文将介绍通过Java程序给Excel文档添加 ...

最新文章

  1. 华人斩获最佳Demo论文,Bengio获时间检验奖,最佳论文突破NLP传统测试方法 | ACL 2020...
  2. Android10.0 日志系统分析(四)-selinux、kernel日志在logd中的实现​-[Android取经之路]
  3. 解决Windows7 Embedded连接手机问题
  4. 2018新版正方教务 ---爬虫--- JAVA源码--课表--平时分----成绩-----排名----考试安排...
  5. Spring Session - Cookie VS Session VS Token 以及 Session不一致问题的N种解决方案
  6. 基于聚类的“图像分割”(python)
  7. 计算机二级access考试是不是操作题必须到36分?,2016年计算机二级access考试题库...
  8. 以企业入侵检测日志分析为场景漫谈大数据安全
  9. Codeforces Gym 101174 B. Bribing Eve
  10. 综合里dont_use/dont_touch/ideal_network的理解
  11. flutter 背景图片毛玻璃效果
  12. 米家APP获取小米、绿米网关key的方法(5.6.81版本)(2020_05_15)
  13. 教您如何批量采集1688商城多个商品主图和详情页并统一保存
  14. CodeForces 1144D -Equalize Them All
  15. HTML学生个人网站作业设计:电影网站设计——电影介绍(11页) HTML+CSS+JavaScript 简单DIV布局个人介绍网页模板代码 DW学生个人网站制作成品下载
  16. MATLAB算法实战应用案例精讲-【智能优化算法】强度帕累托进化算法 2 (SPEA2)(附MATLAB代码实现)
  17. Android 获取联系人和电话号码
  18. ArcGIS基础实验操作100例--实验65按字段调整点符号方向
  19. mac系统清理软件MacClean支持文件类型分享
  20. 用 Python 写个计算器

热门文章

  1. python读取redis存储数据的存储时间_Python读写Redis数据库操作示例
  2. Xml文件数据的优点
  3. C#中对象的序列化与反序列化
  4. 修改 IE 查看源文件默认工具
  5. 一招让你彻底掌握C语言中运用宏以及#与##的妙用
  6. BUUCTF-Reverse:内涵的软件
  7. 汇编题20200330
  8. 结构体:求最高分和最低分
  9. contiki源码阅读之list
  10. Redis缓存穿透、击穿、雪崩、预热、更新、降级