首页 > 编程语言 >Java中word文档操作:把图片和文字插入word文档中!!!

Java中word文档操作:把图片和文字插入word文档中!!!

时间:2024-06-23 13:57:09浏览次数:3  
标签:Java word poi 文档 newWidth import new 图片

达到的效果:把服务器上的图片插入word文档中,并且生成一个word文件。

其他包括:文字换行、图片大小适应一个word文档页等。

直接上代码:

<dependency>
   <groupId>org.apache.poi</groupId>
   <artifactId>poi-ooxml</artifactId>
   <version>4.1.2</version>
</dependency>
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.ParagraphAlignment;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.apache.poi.xwpf.usermodel.XWPFRun;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

public class InsertMultipleImagesToWordDocument {
    public static void main(String[] args) {
        // 加载Word文档
        try {
            List<String> imagePaths = new ArrayList<>();
            imagePaths.add("C:\\Users\\tuyua\\Desktop\\空白图片空白图片\\111.png");
            imagePaths.add("C:\\Users\\tuyua\\Desktop\\空白图片空白图片\\222.png");
            imagePaths.add("C:\\Users\\tuyua\\Desktop\\空白图片空白图片\\333.png");
            XWPFDocument doc = new XWPFDocument();
            // 插入图片
            for (String imagePath : imagePaths) {
                XWPFParagraph paragraph = doc.createParagraph();
                paragraph.setAlignment(ParagraphAlignment.CENTER); // 设置对齐方式为居中
                XWPFRun run = paragraph.createRun();
                run.setFontSize(12); // 设置字体大小
                run.setText("这是你要输入的文字!!!!!");//输入文字,比如可以图片的说明文字等
                run.addBreak();//换行
                // 读取原始图片
                BufferedImage originalImage = ImageIO.read(new File(imagePath));
                // 计算宽高比
                double aspectRatio = (double) originalImage.getWidth() / originalImage.getHeight();
                // 计算新的宽度和高度
                int newWidth = 400;//高度固定在word一页内
                int newHeight = 650;//高度固定在word一页内
                if (aspectRatio == 1.00) {
                    newHeight = newWidth;
                } else if (aspectRatio > 1.00) {
                    //宽度固定,高度按照比例缩小
                    newHeight = (int) (newWidth / aspectRatio);
                } else {
                    //高度固定,宽度按照比例缩小(如果算下来宽度超过400,那么宽度固定400,再缩小高度)
                    newWidth = (int) (newHeight * aspectRatio);
                    if (newWidth > 400) {
                        newWidth = 400;
                        newHeight = (int) (newWidth / aspectRatio);
                    }
                }
                FileInputStream is = new FileInputStream(imagePath);
                run.addPicture(is, XWPFDocument.PICTURE_TYPE_PNG, imagePath, Units.toEMU(newWidth), Units.toEMU(newHeight));
                is.close();
            }
            // word文件要存放的路径
            String fileDir = "C:\\Users\\tuyua\\Desktop\\空白图片空白图片\\" + UUidUtils.getUuid();
            File dir = new File(fileDir);
            // 使用mkdirs()方法创建文件夹,包括任何必要的父文件夹
            dir.mkdirs();
            FileOutputStream out = new FileOutputStream(fileDir + "/" + "testInsertImage.docx");
            doc.write(out);
            out.close();
            doc.close();
            System.out.println("success");
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

 效果如下:

success!!!

标签:Java,word,poi,文档,newWidth,import,new,图片
From: https://blog.csdn.net/CSDN_MR_DAKE/article/details/139897262

相关文章

  • 数据导出简单处理:Java中导出excel数据!!!
    达成的功能:查询出数据集合List,把集合内容导出成excel文件数据。直接上代码:1、pom.xml<!--阿里excel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId>......
  • JavaSE 面向对象程序设计进阶 继承和方法重写 2024理论与内存详解
    继承面向对象三大特征:封装继承多态封装:对象代表什么,就封装对应的数据,并提供数据对应的行为,把零散的数据变成一个整体为什么要继承两个类中重复的代码(数据和方法)太多,所以要继承extend关键字类与类之间的父子关系让一个类和另一个类建立起继承关系publicclassStude......
  • JAVA【案例5-2】模拟默认密码自动生成
    【模拟默认密码自动生成】1、案例描述本案例要求编写一个程序,模拟默认密码的自动生成策略,手动输入用户名,根据用户名自动生成默认密码。在生成密码时,将用户名反转即为默认的密码。2、案例目的(1)学会分析“模拟默认密码的生成”案例的实现思路(2)根据思路完成“模拟默认密码的......
  • 微信小程序源码-基于Java后端的高校教务管理系统毕业设计(附源码+论文)
    大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。......
  • JavaScript基础部分知识点总结(Part6)
    BOM概述1.什么是BOMBOM(BrowserObjectModel)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是window。BOM由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。BOM缺乏标准,JavaScript语法的标准化组织是ECMA,DOM的标准化组织是W3C,BOM最......
  • Sword and Shield Animations(劈砍防御剑盾带动画动作)
    这是一个动画资产包,为剑和盾牌用户提供手工制作的成对动画和空闲。包括8向步行和跑步动画、攻击、跳跃、冲刺、向下状态移动和过渡、躲避、阻挡、蹒跚、各种配对终结者动画等。一切你需要把剑和盾牌战士带到生活中。动画总数:115攻击19区块5关闭状态14Evade5怠速9跳跃......
  • java基于ssm+jsp 母婴用品网站
    1管理员功能模块管理员登录,管理员通过输入用户名、密码等信息进行系统登录,如图1所示。图1管理员登录界面图管理员登录进入母婴用品网站可以查看主页、个人中心、用户管理、商品分类管理、商品信息管理、留言板管理、成长交流、系统管理、订单管理、留言管理等内容,如图2所......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript游戏网站(Epic)
    HTML+CSS+JS【游戏网站】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城(电子器件)
    HTML+CSS+JS【购物商城】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • SpringBoot前后端传递数据时常用的JSON格式数据是什么?【讲解JSON概念、语法、以及Java
    SpringBoot前后端传递数据时常用的JSON格式数据是什么?JSON概念JSON语法JSON的两种结构:JSON字符串和Java对象互转:objectMapper.writeValueAsString(person);objectMapper.readValue(jsonStr,Person.class);在SpringMVC框架中,前后端交互会自动转JsonJSON概念JSON:Jav......