首先需要引入俩东西
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.com/nexus/content/groups/public/</url>
</repository>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.doc.free</artifactId>
<version>5.2.0</version>
</dependency>
然后就是代码了:
首先是插入一个图:
package org.springblade.common.tool;
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.Section;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.TextWrappingStyle;
import com.spire.doc.fields.DocPicture;
public class InsertImageIntoWord {
public static void main(String[] args) throws Exception {
//创建一个Document对象用来加载示例文档
Document doc = new Document();
doc.loadFromFile("D:\\无用\\test.docx");
//创建一个DocPicture对象用于加载要加载的图片
DocPicture picture = new DocPicture(doc);
picture.loadImage("D:\\无用\\image.jpg");
//自定义图片的尺寸大小
picture.setWidth(150);
picture.setHeight(100);
//将图片的文本环绕方式设置为Tight
picture.setTextWrappingStyle( TextWrappingStyle.Behind);
// 获取第二页的段落
Section section = doc.getSections().get(0); // 第二页的索引为 1
Paragraph paragraph = section.getParagraphs().get(18); // 可根据需要选择第二页的哪个段落
// 将图片插入到指定段落
paragraph.getChildObjects().insert(0, picture);
// 自定义图片插入的位置
// 设置图片的水平位置为距离页面左侧 55 磅的位置
picture.setHorizontalPosition(55.0F);
// 设置图片的垂直位置为距离页面顶部 10 磅的位置
picture.setVerticalPosition(10.0F);
//保存输出文档
doc.saveToFile("D:\\无用\\test3.docx", FileFormat.Docx);
}
}
其次是插入多张图(拿第一个代码改的)
package org.springblade.common.tool;
import com.spire.doc.*;
import com.spire.doc.documents.*;
import com.spire.doc.fields.DocPicture;
public class InsertMultiImageIntoWord {
public static void main(String[] args) throws Exception {
// 加载文档
Document doc = new Document();
doc.loadFromFile("D:\\无用\\test.docx");
String picPath = "D:\\无用\\image.jpg";
// 创建 DocPicture 对象并加载图片
DocPicture picture = new DocPicture(doc);
picture.loadImage("D:\\无用\\image.jpg");
picture.setWidth(150);
picture.setHeight(100);
//将图片的文本环绕方式设置为Tight
picture.setTextWrappingStyle( TextWrappingStyle.Behind);
// 获取第22、44、66、88段落并插入图片
insertPictureInParagraph(doc, picPath, 22);
insertPictureInParagraph(doc, picPath, 44);
insertPictureInParagraph(doc, picPath, 66);
insertPictureInParagraph(doc, picPath, 88);
// 保存文档
doc.saveToFile("D:\\无用\\test2.docx", FileFormat.Docx);
}
// 在指定段落中插入图片的方法
private static void insertPictureInParagraph(Document doc, String picPath, int paragraphIndex) {
Section section = doc.getSections().get(0);
Paragraph paragraph = section.getParagraphs().get(paragraphIndex);
DocPicture newPicture = new DocPicture(doc);
newPicture.loadImage(picPath);
// newPicture.setWidth(picture.getWidth());
// newPicture.setHeight(picture.getHeight());
paragraph.getChildObjects().insert(0, newPicture);
//将图片的文本环绕方式设置为Tight
newPicture.setTextWrappingStyle( TextWrappingStyle.Behind);
newPicture.setHorizontalPosition(0.0F);
newPicture.setVerticalPosition(10.0F);
}
}
整合成操作流的工具类:
package com.junfun.pms.report.util;
import com.spire.doc.Document;
import com.spire.doc.FileFormat;
import com.spire.doc.Section;
import com.spire.doc.documents.Paragraph;
import com.spire.doc.documents.TextWrappingStyle;
import com.spire.doc.fields.DocPicture;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class InsertImageIntoWord {
// public static void main(String[] args) throws Exception {
// //创建一个Document对象用来加载示例文档
// Document doc = new Document();
// doc.loadFromFile("D:\\无用\\test.docx");
//
// //创建一个DocPicture对象用于加载要加载的图片
// DocPicture picture = new DocPicture(doc);
// picture.loadImage("D:\\无用\\image.jpg");
//
// //自定义图片的尺寸大小
// picture.setWidth(150);
// picture.setHeight(100);
//
// //将图片的文本环绕方式设置为Tight
// picture.setTextWrappingStyle( TextWrappingStyle.Behind);
//
// // 获取第二页的段落
// Section section = doc.getSections().get(0); // 第二页的索引为 1
// Paragraph paragraph = section.getParagraphs().get(18); // 可根据需要选择第二页的哪个段落
//
// // 将图片插入到指定段落
// paragraph.getChildObjects().insert(0, picture);
//
// // 自定义图片插入的位置
// // 设置图片的水平位置为距离页面左侧 55 磅的位置
// picture.setHorizontalPosition(55.0F);
设置图片的垂直位置为距离页面顶部 10 磅的位置
// picture.setVerticalPosition(10.0F);
//
//
//
// //保存输出文档
// doc.saveToFile("D:\\无用\\test3.docx", FileFormat.Docx);
// }
public static void main(String[] args) throws Exception {
FileInputStream wordInputStream = new FileInputStream("D:\\tu\\修船.docx");
FileInputStream jpgInputStream = new FileInputStream("D:\\tu\\chuanzhang.jpg");
FileOutputStream stream = new FileOutputStream("D:\\tu\\修船加公章.docx");
InsertImageIntoWord.addWatermarkToWordMulti(wordInputStream, jpgInputStream.readAllBytes(), stream);
}
public static void addWatermarkToWord(InputStream docInputStream, byte[] imageBytes, OutputStream outputStream) throws Exception {
// 创建一个 Document 对象用来加载示例文档
Document doc = new Document();
doc.loadFromStream(docInputStream, FileFormat.Docx);
// 创建一个 DocPicture 对象用于加载要加载的图片
DocPicture picture = new DocPicture(doc);
picture.loadImage(imageBytes);
// 自定义图片的尺寸大小
picture.setWidth(150);
picture.setHeight(100);
// 将图片的文本环绕方式设置为 Tight
picture.setTextWrappingStyle(TextWrappingStyle.Behind);
// 获取第一页的段落
Section section = doc.getSections().get(0); // 第一页的索引为 0
Paragraph paragraph = section.getParagraphs().get(0); // 可根据需要选择第一页的哪个段落
// 将图片插入到指定段落
paragraph.getChildObjects().insert(0, picture);
// 自定义图片插入的位置
// 设置图片的水平位置为距离页面左侧 55 磅的位置
picture.setHorizontalPosition(55.0F);
// 设置图片的垂直位置为距离页面顶部 10 磅的位置
picture.setVerticalPosition(10.0F);
// 保存输出文档
doc.saveToStream(outputStream, FileFormat.Docx);
}
public static void addWatermarkToWordMulti(InputStream docInputStream, byte[] imageBytes, OutputStream outputStream) throws Exception {
// 创建一个 Document 对象用来加载示例文档
Document doc = new Document();
doc.loadFromStream(docInputStream, FileFormat.Docx);
// 创建一个 DocPicture 对象用于加载要加载的图片
DocPicture picture = new DocPicture(doc);
picture.loadImage(imageBytes);
picture.setWidth(150);
picture.setHeight(100);
// 将图片的文本环绕方式设置为 Tight
picture.setTextWrappingStyle(TextWrappingStyle.Behind);
// 在指定段落中插入图片
insertPictureInParagraphMulti(doc, imageBytes, 1);
insertPictureInParagraphMulti(doc, imageBytes, 10);
insertPictureInParagraphMulti(doc, imageBytes, 33);
insertPictureInParagraphMulti(doc, imageBytes, 66);
// 保存输出文档
doc.saveToStream(outputStream, FileFormat.Docx);
}
// 在指定段落中插入图片的方法
private static void insertPictureInParagraphMulti(Document doc, byte[] imageBytes, int paragraphIndex) {
Section section = doc.getSections().get(0);
Paragraph paragraph = section.getParagraphs().get(paragraphIndex);
DocPicture newPicture = new DocPicture(doc);
newPicture.loadImage(imageBytes);
paragraph.getChildObjects().insert(0, newPicture);
// 将图片的文本环绕方式设置为 Tight
newPicture.setTextWrappingStyle(TextWrappingStyle.Behind);
newPicture.setHorizontalPosition(0.0F);
newPicture.setVerticalPosition(10.0F);
}
}