java中将外部上传的图片格式,如png和jpg等转换为docx格式,并以blob的格式输出

所需依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>4.1.2</version>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-scratchpad</artifactId>
    <version>4.1.2</version>
</dependency>

代码:

import io.swagger.annotations.ApiOperation;
import org.apache.poi.util.Units;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;


import javax.imageio.ImageIO;
@RestController
public class PngConversionController {
    @ApiOperation("文件转换,图片转docx")
    @PostMapping("/uploadPngConvert")
    public ResponseEntity<byte[]> uploadPngConvert(@RequestPart("file") MultipartFile uploadedFile) throws Exception {
        InputStream fileInputStream = uploadedFile.getInputStream();
        BufferedImage bufferedImage = ImageIO.read(fileInputStream);

        // 创建一个新的DOCX文档
        XWPFDocument document = new XWPFDocument();

        // 在docx文件中添加图片
        XWPFRun run = document.createParagraph().createRun();
        int format = XWPFDocument.PICTURE_TYPE_JPEG;
        run.addPicture(new ByteArrayInputStream(uploadedFile.getBytes()), format, "image.jpg", Units.toEMU(bufferedImage.getWidth()), Units.toEMU(bufferedImage.getHeight()));

        // 保存docx文件到 ByteArrayOutputStream
        ByteArrayOutputStream docxOutputStream = new ByteArrayOutputStream();
        document.write(docxOutputStream);
        document.close();

        // 将 ByteArrayOutputStream 中的内容作为字节数组返回
        byte[] docxBytes = docxOutputStream.toByteArray();

        // 设置响应头,指定文件名
        HttpHeaders headers = new HttpHeaders();
        headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=output_docx_file.docx");

        // 返回响应实体
        return ResponseEntity.ok()
                .headers(headers)
                .contentLength(docxBytes.length)
                .contentType(MediaType.APPLICATION_OCTET_STREAM)
                .body(docxBytes);
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值