使用POI操作word文档的时候,怎么在一行插入2张图片?
共 6195字,需浏览 13分钟
·
2023-10-12 19:06
Java使用POI操作Word文档
在工作中,我们有时候需要使用POI操作word文档,那么,怎么在一行插入2张或者多张图片呢?
下面凯哥(凯哥Java。宫中 号:凯哥Java),就来讲讲怎么使用POI在一行中插入2个张图片。
前提知识:
需要知道,使用Java操作POI的时候的一些知识点:
文档对象:XWPFDocument对象
段落对象:XWPFParagraph对象
图片对象
步骤:
在Java中,使用POI给Word文档中插入图片的时候,我们需要一下几个步骤。下面的流程图是通过POI创建Word文档并向里面插入图片的步骤:
Java向Word插入图片步骤
具体步骤及代码实现
步骤1:创建XWPFDocument对象
在Java代码中,我们使用Apache POI库的XWPFDocument类来表示Word文档。我们需要创建一个XWPFDocument对象,将其与我们准备的Word文档文件关联起来。以下是创建XWPFDocument对象的代码:
// 创建一个新的Word文档
XWPFDocument document = new XWPFDocument();
步骤2:创建段落对象
在Word中,文本和图片通常都是通过段落来管理的。我们需要创建一个段落对象,用于插入图片。以下是创建段落对象的代码:
XWPFParagraph paragraph = document.createParagraph();
步骤3:创建图片对象
要在Word中插入图片,我们需要使用Apache POI库的XWPFRun类创建一个运行对象,并将其与我们准备的图片文件关联起来。以下是创建图片对象的代码:
XWPFRun run = paragraph.createRun();
String imgFile = "path/to/image/image.jpg";
int imgFormat = XWPFDocument.PICTURE_TYPE_JPEG;
run.addPicture(new FileInputStream(imgFile), imgFormat, "image description", Units.toEMU(200), Units.toEMU(200));
在上面的代码中,我们需要指定图片文件的路径和格式,以及图片的描述。Units.toEMU(200)是将图片尺寸转换为EMUs(英制单位)。
步骤4:保存Word文档
最后,我们需要保存修改后的Word文档。以下是保存Word文档的代码:
// 保存文档
FileOutputStream out = new FileOutputStream("D:\\files\\test\\zipFile\\zip_picture\\"+"output1.docx");
document.write(out);
out.close();
下面是完整的代码:
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.xmlbeans.XmlCursor;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class InsertTwoImagesInOnePage {
public static void main(String[] args) {
try {
// 创建一个新的Word文档
XWPFDocument document = new XWPFDocument();
// 1个段落插入两张图片
insertTwoImages(document,
"D:\\files\\test\\zipFile\\zip_picture\\202310041006522\\2d233778e74746538b2ea629435bc145\\cut\\1#施工图片-1.jpg",
"D:\\files\\test\\zipFile\\zip_picture\\202310041006522\\2d233778e74746538b2ea629435bc145\\cut\\1#施工图片-2.png");
// 保存文档
FileOutputStream out = new FileOutputStream("D:\\files\\test\\zipFile\\zip_picture\\"+"output1.docx");
document.write(out);
out.close();
System.out.println("Word文档已创建并图片已插入成功。");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 一个段落多个图片
* @param document 文档对象
* @param imagePath1 图片1的路径
* @param imagePath2 图片2的路径
* @throws Exception 抛出异常
*/
private static void insertTwoImages(XWPFDocument document, String imagePath1, String imagePath2) throws Exception {
XWPFParagraph paragraph = document.createParagraph();
// 插入第一张图片
XWPFRun run1 = paragraph.createRun();
run1.addPicture(new FileInputStream(imagePath1), XWPFDocument.PICTURE_TYPE_JPEG, imagePath1, Units.toEMU(200), Units.toEMU(150));
// 在同一个段落中插入第二张图片,可以使用XmlCursor来控制插入位置
XmlCursor cursor = paragraph.getCTP().newCursor();
cursor.selectPath("./*");
cursor.toEndToken(); // 移动到段落的末尾
// 插入第二张图片
XWPFRun run2 = paragraph.insertNewRun(cursor.getSelectionCount());
run2.addPicture(new FileInputStream(imagePath2), XWPFDocument.PICTURE_TYPE_PNG, imagePath2, Units.toEMU(200), Units.toEMU(150));
}
}
注意:
1.请将图片路径修改成自己的
2.Units.toEMU(200)请根据自己实际情况进行修改
运行后的结果:
在一行插入2张图片后效果图
通过上面我们可以知道,其核心就是向一个段落对象中插入多个图片。那么如果一页A4纸张怎么竖着插入2张图片呢?
在下一篇文章中,凯哥(宫中 号:凯哥Java)将介绍,怎么在一张A4纸中插入2张竖着的图片。