java实现word末尾添加图片的两种方式

java实现word末尾添加图片的两种方式:

  1. jdk1.8之前版本

    public static void addImagesToWordEnd(String inputFilePath, String outputFilePath,
    String[] imagePaths, float imgWidth, float imgHeight) {
    // 验证图片路径数量
    if (imagePaths == null || imagePaths.length < 3) {
    throw new IllegalArgumentException("必须提供三张图片路径");
    }

    复制代码
         // 创建并加载文档
         Document doc = new Document();
         doc.loadFromFile(inputFilePath);
    
         // 获取文档最后一个节
         Section lastSection = doc.getLastSection();
    
         // 创建图片展示段落
         Paragraph imgParagraph = lastSection.addParagraph();
         imgParagraph.getFormat().setHorizontalAlignment(com.spire.doc.documents.HorizontalAlignment.Left);
    
         // 添加三组文字+图片
         String[] captions = {"一审:", "二审:", "终审:"};
    
         for (int i = 0; i < 3; i++) {
             // 添加文字标签
             TextRange captionText = new TextRange(doc);
             captionText.setText(captions[i]);
             imgParagraph.getChildObjects().add(captionText);
    
             // 添加图片
             DocPicture picture = new DocPicture(doc);
             picture.loadImage(imagePaths[i]);
             picture.setWidth(imgWidth);
             picture.setHeight(imgHeight);
             picture.setTextWrappingStyle(TextWrappingStyle.Inline);
             imgParagraph.getChildObjects().add(picture);
    
             // 添加空格分隔(最后一组不加空格)
             if (i < 2) {
                 TextRange space = new TextRange(doc);
                 space.setText("  ");  // 使用两个空格增加间距
                 imgParagraph.getChildObjects().add(space);
             }
         }
    
         // 保存文档
         doc.saveToFile(outputFilePath, FileFormat.Docx);
     }

相关jar包:Spire.Doc.jar

  1. jdk1.8版本之后
java 复制代码
public static void appendImagesToDocx(String sourceDocxPath, String targetDocxPath, String[] imagePaths)
            throws IOException, InvalidFormatException {

        FileInputStream docStream = null;
        FileOutputStream out = null;
        XWPFDocument doc = null;

        try {
            // 1. 打开现有文档
            docStream = new FileInputStream(sourceDocxPath);
            doc = new XWPFDocument(docStream);

            // 2. 创建段落并设置居中
            XWPFParagraph paragraph = doc.createParagraph();
            paragraph.setAlignment(ParagraphAlignment.CENTER); // 整体内容居中

            // 文字描述与图片对应关系
            String[] descriptions = {"部门领导:", "学校审核:", "校领导:"};

            for (int i = 0; i < imagePaths.length; i++) {
                String imgPath = imagePaths[i];
                String description = descriptions[i];

                // 创建 Run 添加文字描述
                XWPFRun runText = paragraph.createRun();
                runText.setText(description);

                // 创建 Run 插入图片
                XWPFRun runImage = paragraph.createRun();

                // 插入图片(自动识别图片类型)
                int pictureType = getPictureType(imgPath);

                // 使用 FileInputStream 直接插入图片
                FileInputStream imageStream = new FileInputStream(imgPath);

                // 设置图片宽高(使用 EMUs 单位)
                int width = (int) (5 * Units.EMU_PER_CENTIMETER); // 5 厘米宽
                int height = (int) (3 * Units.EMU_PER_CENTIMETER); // 3 厘米高

                runImage.addPicture(imageStream, pictureType, imgPath, width, height);

                // 如果不是最后一张图片,则添加空格分隔
                if (i < imagePaths.length - 1) {
                    XWPFRun runComma = paragraph.createRun();
                    runComma.setText("  ");
                }
            }

            // 3. 保存文档
            out = new FileOutputStream(targetDocxPath);
            doc.write(out);

        } finally {
            // 关闭资源(JDK 1.6 不支持 try-with-resources)
            closeQuietly(out);
            closeQuietly(docStream);
        }
    }

相关依赖: poi5.2.3、poi-ooxm5.2.3

相关推荐
香蕉大香蕉(06敬畏市场)25 分钟前
MySQL 单点详解(01)
java·数据库·mysql·面试·博客·实习
LaughingZhu40 分钟前
Product Hunt 热榜 2026-10-30:Empacer、Scape、Floot in ChatGPT
java·前端·数据库·人工智能·chatgpt·notion
niucloud-admin1 小时前
NIUCLOUD PHP SAAS上门家政使用文档:服务保障
java·开发语言·php
thethefighter1 小时前
快速预览Word、WPS秒开,支持空格弹窗
linux·word·wps·快速预览·空格弹窗·nhdeepview
IT枫斗者枫哥1 小时前
CompletableFuture失败后返回空列表:异常没了,业务含义也变了
java·后端
知识搬运临时工1 小时前
一个模板把 AEM 拖进 Full GC 死亡螺旋:300% CPU、7 GB 堆、310 万行堆栈
java·aws
用户432935928051 小时前
CoAP还是MQTT:1万只Cat.1水表三个月带宽续航实测
java
知守观2 小时前
多模块架构演进:横向分层 vs 纵向领域,13 个真实项目的切分对照
java·后端·微服务
Java成神之路-2 小时前
Java String 为什么不可变?和 HashMap 到底有什么关系?
java
paopaokaka_luck2 小时前
基于springboot+vue的益暖微光公益服务平台(DeepSeek公益助手、善款信息追溯、志愿服务积分闭环、ECharts运营分析、活动状态自动流转)
java·前端·javascript·spring boot·mysql·架构·echarts