【已解决】使用POI操作word文档的时候,怎么在一行插入2张图片?
- 工作小总结
- 时间:2023-10-04 11:43
- 2809人已阅读
🔔🔔🔔好消息!好消息!🔔🔔🔔
有需要的朋友👉:联系凯哥
在工作中,我们有时候需要使用POI操作word文档,那么,怎么在一行插入2张或者多张图片呢?
下面凯哥(凯哥Java。公众号:凯哥Java),就来讲讲怎么使用POI在一行中插入2个张图片。
前提知识:
需要知道,使用Java操作POI的时候的一些知识点:
文档对象:XWPFDocument对象
段落对象:XWPFParagraph对象
图片对象
步骤:
在Java中,使用POI给Word文档中插入图片的时候,我们需要一下几个步骤。下面的流程图是通过POI创建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)请根据自己实际情况进行修改
运行后的结果:
这样行就插入了多个图片。
通过上面我们可以知道,其核心就是向一个段落对象中插入多个图片。那么如果一页A4纸张怎么竖着插入2张图片呢?
在下一篇文章中,凯哥(个人公众号:凯哥Java)将介绍,怎么在一张A4纸中插入2张竖着的图片