使用POI操作word文档的时候,怎么在一行插入2张图片?

凯哥java

共 6195字,需浏览 13分钟

 ·

2023-10-12 19:06

点击蓝字,立即关注

Java使用POI操作Word文档

在工作中,我们有时候需要使用POI操作word文档,那么,怎么在一行插入2张或者多张图片呢?

下面凯哥(凯哥Java。宫中 号:凯哥Java),就来讲讲怎么使用POI在一行中插入2个张图片。

前提知识:

需要知道,使用Java操作POI的时候的一些知识点:

  1. 文档对象:XWPFDocument对象

  2. 段落对象:XWPFParagraph对象

  3. 图片对象

步骤:

在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张竖着的图片。

点分享
点收藏
点在看
点点赞






浏览 305
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报