引入jar包

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version>
</dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.15</version>
</dependency>

代码替换文字内容

package com.word.openword.doctest;
import org.apache.poi.POIXMLDocument;
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
import java.util.*;
import java.util.Map.Entry;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;/*** 替换内容*/
public class DocxTest {public static void searchAndReplace(String srcPath, String destPath, Map<String, String> map) {try {XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(srcPath));/*** 替换段落中的指定文字*/Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();while (itPara.hasNext()) {XWPFParagraph paragraph = (XWPFParagraph) itPara.next();Set<String> set = map.keySet();Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String key = iterator.next();List<XWPFRun> run=paragraph.getRuns();for(int i=0;i<run.size();i++){if(run.get(i).getText(run.get(i).getTextPosition())!=null &&run.get(i).getText(run.get(i).getTextPosition()).equals(key)){/*** 参数0表示生成的文字是要从哪一个地方开始放置,设置文字从位置0开始* 就可以把原来的文字全部替换掉了*/run.get(i).setText(map.get(key),0);}}}}/*** 替换表格中的指定文字*/Iterator<XWPFTable> itTable = document.getTablesIterator();while (itTable.hasNext()) {XWPFTable table = (XWPFTable) itTable.next();int count = table.getNumberOfRows();for (int i = 0; i < count; i++) {XWPFTableRow row = table.getRow(i);List<XWPFTableCell> cells = row.getTableCells();for (XWPFTableCell cell : cells) {for (Entry<String, String> e : map.entrySet()) {if (cell.getText().equals(e.getKey())) {cell.removeParagraph(0);cell.setText(e.getValue());}}}}}FileOutputStream outStream = null;outStream = new FileOutputStream(destPath);document.write(outStream);outStream.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) throws FileNotFoundException, IOException {Map<String, String> map = new HashMap<>();map.put("<机关地址>","2333");map.put("<机关邮编>","66666");map.put("<机关联系人>","张三");map.put("<机关电话>","洞拐洞拐");String srcPath = "E:\\SHIFAN\\test\\WFXWTZS.docx";String destPath = "E:\\SHIFAN\\test\\666.docx";searchAndReplace(srcPath, destPath, map);}
}

效果

插入图片

package com.word.openword.doctest;import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.Document;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.xmlbeans.XmlException;
import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObject;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDrawing;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import java.util.Random;/*** 插入图片*/
public class DocxImg {public static void main(String[] args) throws Exception {sealInWord("E:\\SHIFAN\\test\\666.docx","E:\\SHIFAN\\test\\666.docx","E:\\SHIFAN\\test\\UnitSeal_Liuzhou.png","(印章)",0,0,300,-30,false);}/*** <b> Word中添加图章* </b><br><br><i>Description</i> :* String srcPath, 源Word路径* String storePath, 添加图章后的路径* String sealPath, 图章路径(即图片)* tString abText, 在Word中盖图章的标识字符串,如:(签字/盖章)* int width, 图章宽度* int height, 图章高度* int leftOffset, 图章在编辑段落向左偏移量* int topOffset, 图章在编辑段落向上偏移量* boolean behind,图章是否在文字下面* @return void* <br><br>Date: 2019/12/26 15:12     <br>Author : dxl*/public static void sealInWord(String srcPath, String storePath,String sealPath,String tabText,int width, int height, int leftOffset, int topOffset, boolean behind) throws Exception {File fileTem = new File(srcPath);InputStream is = new FileInputStream(fileTem);XWPFDocument document = new XWPFDocument(is);List<XWPFParagraph> paragraphs = document.getParagraphs();XWPFRun targetRun = null;for(XWPFParagraph  paragraph : paragraphs){if(!"".equals(paragraph.getText()) && paragraph.getText().contains(tabText)){List<XWPFRun> runs = paragraph.getRuns();targetRun = runs.get(runs.size()-1);}}if(targetRun != null){InputStream in = new FileInputStream(sealPath);//设置图片路径if(width <= 0){width = 100;}if(height <= 0){height = 100;}//创建Random类对象Random random = new Random();//产生随机数int number = random.nextInt(999) + 1;targetRun.addPicture(in, Document.PICTURE_TYPE_PNG, "Seal"+number, Units.toEMU(width), Units.toEMU(height));in.close();// 2. 获取到图片数据CTDrawing drawing = targetRun.getCTR().getDrawingArray(0);CTGraphicalObject graphicalobject = drawing.getInlineArray(0).getGraphic();//拿到新插入的图片替换添加CTAnchor 设置浮动属性 删除inline属性CTAnchor anchor = getAnchorWithGraphic(graphicalobject, "Seal"+number,Units.toEMU(width), Units.toEMU(height),//图片大小Units.toEMU(leftOffset), Units.toEMU(topOffset), behind);//相对当前段落位置 需要计算段落已有内容的左偏移drawing.setAnchorArray(new CTAnchor[]{anchor});//添加浮动属性drawing.removeInline(0);//删除行内属性}document.write(new FileOutputStream(storePath));document.close();}/*** @param ctGraphicalObject 图片数据* @param deskFileName      图片描述* @param width             宽* @param height            高* @param leftOffset        水平偏移 left* @param topOffset         垂直偏移 top* @param behind            文字上方,文字下方* @return* @throws Exception*/public static CTAnchor getAnchorWithGraphic(CTGraphicalObject ctGraphicalObject,String deskFileName, int width, int height,int leftOffset, int topOffset, boolean behind) {System.out.println(">>width>>"+width+"; >>height>>>>"+height);String anchorXML ="<wp:anchor xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\" "+ "simplePos=\"0\" relativeHeight=\"0\" behindDoc=\"" + ((behind) ? 1 : 0) + "\" locked=\"0\" layoutInCell=\"1\" allowOverlap=\"1\">"+ "<wp:simplePos x=\"0\" y=\"0\"/>"+ "<wp:positionH relativeFrom=\"column\">"+ "<wp:posOffset>" + leftOffset + "</wp:posOffset>"+ "</wp:positionH>"+ "<wp:positionV relativeFrom=\"paragraph\">"+ "<wp:posOffset>" + topOffset + "</wp:posOffset>" +"</wp:positionV>"+ "<wp:extent cx=\"" + width + "\" cy=\"" + height + "\"/>"+ "<wp:effectExtent l=\"0\" t=\"0\" r=\"0\" b=\"0\"/>"+ "<wp:wrapNone/>"+ "<wp:docPr id=\"1\" name=\"Drawing 0\" descr=\"" + deskFileName + "\"/><wp:cNvGraphicFramePr/>"+ "</wp:anchor>";CTDrawing drawing = null;try {drawing = CTDrawing.Factory.parse(anchorXML);} catch (XmlException e) {e.printStackTrace();}CTAnchor anchor = drawing.getAnchorArray(0);anchor.setGraphic(ctGraphicalObject);return anchor;}
}

效果

参考:https://blog.csdn.net/kanglong129/article/details/103716052?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162683108116780366565905%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=162683108116780366565905&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-103716052.first_rank_v2_pc_rank_v29&utm_term=java+doc%E7%9B%96%E7%AB%A0&spm=1018.2226.3001.4187

https://blog.csdn.net/zhouseawater/article/details/54092520?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522162683611016780271529554%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=162683611016780271529554&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-54092520.first_rank_v2_pc_rank_v29&utm_term=java+poi+word%E6%9B%BF%E6%8D%A2%E5%86%85%E5%AE%B9&spm=1018.2226.3001.4187

java 打开word(docx)替换内容,并插入图片(盖章)相关推荐

  1. java操作word文档(文字,图片,表格添加以及替换操作)

    注:本文由于个人工作需要,有对多个他人博文进行借鉴,但是多数博文都只是讲到了小部分,例如图片/表格的操作,都只有根据书签进行替换,比较片面,本人有总结到根据文字进行图片/表格的替换,希望可以帮到更多有 ...

  2. Excel-vba打开word文件读取内容处理并保存至word中

    Excel-vba打开word文件读取内容处理并保存至word中 Sub 按钮1()Dim myPath As StringSet wdapp = CreateObject("Word.Ap ...

  3. PhpWord与GD 和图像处理 函数进行word文档数值替换以及合并插入图片

    #PhpWord与GD 和图像处理 函数进行word文档数值替换以及合并插入图片 代码示例 代码如下(示例): public function test(){//读取模板$templateProces ...

  4. 计算机word文档无法预览,电脑打开Word文档内容显示不全或显示空白怎么解决

    很多用户会在电脑中使用必装的Microsoft Office系列软件.有用户在电脑中打开Word文档,发现内容显示不全,有时候显示空白,那么应该怎么解决这一问题?对此,大家可以参考本教程提供的方法. ...

  5. Word模板文件,替换内容 文本、图片、表格、列表、区块、嵌套等

    Word模板文件,替换内容 文本.图片.表格.列表.区块.嵌套等 实例:员工信息表Word文件,程序动态替换内容,生成pdf文件 话不多说,先看效果图! 优势: 1.模板只是布局调整,程序无需修改! ...

  6. 计算机word显示不全,win7系统电脑打开Word文档内容显示不全或显示空白的解决方法...

    很多小伙伴都遇到过win7系统电脑打开Word文档内容显示不全或显示空白的困惑吧,一些朋友看过网上零散的win7系统电脑打开Word文档内容显示不全或显示空白的处理方法,并没有完完全全明白win7系统 ...

  7. 用python 修改word中表格数据,插入图片 +实例分析

    今天学习了关于word表格修改数据,插入图片的知识.Word表格跟对普通的文章段落处理不太一样,下面我就用我学校的请假条表格来带大家一一分析. 1.导入python-docx库 在cmd中导入该库 p ...

  8. java 模板 word转pdf 可分页 带图片

    java 模板 word转pdf 可分页 带图片 之前写过一个简单的案例,但是在项目中完全不能满足客户的需求,所以重新用啦一种方式来写,采用了word转换pdf的方式,这种经过不断研究,满足了可分页, ...

  9. 用freemarker生成word文档,并插入图片

    用freemarker生成word文档,并插入图片 最近需要做一个问卷功能,要求用户填写完问卷后,后台会生成一个word文档,将用户提交的数据插入到word中. 创建word模板 新建一个word文档 ...

  10. 在word文档表中插入图片不变形

    在word文档表中插入图片不变形 目录 在word文档表中插入图片不变形 1.点击左上角[全选图标 ]选中表格,鼠标右键点击[表格属性] 2.点击[选项]点击 取消勾选[自动重调尺寸以适应内容],最后 ...

最新文章

  1. Kotlin学习 PART 1:kotlin定义和目的
  2. 案例:用户信息列表展示||1. 需求 2. 设计 3. 开发4. 测试 5. 部署运维
  3. [YTU]_2866(结构体---点坐标结构体)
  4. 初等数论四大基本定理
  5. 局部和全局引用的操作
  6. js 使用多态替换条件语句_用多态和组成替换多个条件
  7. VC++ 多线程同步实例
  8. vue数据定义格式_用好单元格自定义格式,让Excel按照你的要求显示数据
  9. 管理新语:搞绩效考评需谨慎,切勿随意
  10. BeanUtils.copyProperties() 详解
  11. html如何格式化时间,js 日期时间的格式化
  12. 强力推荐素材收集和管理神器-Eagle工具
  13. 狭义货币供应量M1的同比增速对我国股市影响最直接
  14. 微信小程序--监听对象属性变化
  15. js日期格式化yyyy-MM-dd
  16. ReXNet学习笔记 --- ReXNet: Diminishing Representational Bottleneck on Convolutional Neural Network
  17. 使用图神经网络预测药物-药物相互作用
  18. Steam账号被盗后,账号找回,PUBG解封经验分享
  19. Java创建学生喂养动物类
  20. 实体店商家微信会员系统开发步骤_分享微信会员系统优势

热门文章

  1. js 判断企业微信打开
  2. java求两个非零正整数的最大公约数和最小公倍数
  3. 迅雷极速版阻止自动更新(亲自摸索出来,可用)
  4. 12星座都是什么性格?(python爬虫+jieba分词+词云)
  5. React:开发者工具谷歌插件下载安装
  6. 敏捷开发中,团队成员认领的是任务还是用户故事?
  7. VScode直接执行ts文件
  8. 冒泡排序算法(bubbling sort)
  9. 数据统计平台设计与实现
  10. Python多线程编程之线程子类化