首页 > 编程语言 >java(springboot)实现将一个pdf按页码转成多张图片

java(springboot)实现将一个pdf按页码转成多张图片

时间:2023-06-09 14:23:24浏览次数:32  
标签:pageIndex bind java springboot import springframework org pdf

以下是一个将 PDF 转换成 JPG 格式图片的 Spring Boot 接口代码:

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.springframework.http.MediaType;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.concurrent.CompletableFuture;

@Controller
public class PdfToJpgController {

    @PostMapping(value = "/pdf-to-jpg", produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public CompletableFuture<String> pdfToJpg(@RequestBody MultipartFile pdfFile) throws IOException {
        PDDocument document = PDDocument.load(pdfFile.getInputStream());
        int pageCount = document.getNumberOfPages();
        return CompletableFuture.supplyAsync(() -> {
            StringBuilder resultBuilder = new StringBuilder("{\"pages\":[");
            for (int pageIndex = 0; pageIndex < pageCount; pageIndex++) {
                try {
                    PDFRenderer pdfRenderer = new PDFRenderer(document);
                    BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 300);
                    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
                    ImageIO.write(image, "jpg", outputStream);
                    String encodedImage = Base64.getEncoder().encodeToString(outputStream.toByteArray());
                    resultBuilder.append("{\"image\":\"").append(encodedImage).append("\"}");
                    if (pageIndex < pageCount - 1) {
                        resultBuilder.append(",");
                    }
                } catch (IOException e) {
                    // handle exception
                }
            }
            resultBuilder.append("]}");
            return resultBuilder.toString();
        });
    }

}

这个接口接收一个 PDF 文件,并将其转换成 JPG 格式的图片返回。注意导入以下依赖:org.apache.pdfbox:pdfboxjavax.xml.bind:jaxb-apicom.sun.xml.bind:jaxb-corecom.sun.xml.bind:jaxb-impl

方法介绍

`renderImageWithDPI` 是 PDFBox 库中的一个方法,用于将 PDF 文件中的指定页渲染成一个 `BufferedImage` 对象,并返回该对象。

这个方法包含两个参数:

- pageIndex:表示要渲染的 PDF 页码,从0开始计数。
- dpi:表示输出图片的分辨率,即每英寸像素数。

在上面的示例代码中,我们调用了 `renderImageWithDPI(0, 300)` 方法来将第一页转换为一个分辨率为 300 DPI 的 `BufferedImage` 对象。

标签:pageIndex,bind,java,springboot,import,springframework,org,pdf
From: https://www.cnblogs.com/shamo89/p/17469112.html

相关文章

  • java-基础安装-基础
    1.基本须知jdk我们的java源码程序是只能放在src的蓝色文件夹中,放在别的文件不起作用javac.exe文件javac是jdk中专门用来编译源码的文件java.exe文件启动jvm虚拟机*.class是编译后的字节码文件,一般放在idea项目中橘色的out文件夹中*.java是源码文件是源码文件......
  • java代码输出控制台输出菱形
    privatestaticvoidrhombFuncation(){introw=3;for(inti=1;i<=row;i++){for(introw1=row;row1>i;row1--){System.out.print("-");}for(intj=0;j<i;j++){Syste......
  • Quartz + SpringBoot 实现定时任务(多任务,多执行时间)代码模板(直接CV即可)
    一,什么是Quartzquartz是一款开源且丰富特性的Java任务调度库,用于实现任务调度和定时任务。它支持各种任务类型和灵活的配置选项,具备作业持久化、集群和分布式调度、错误处理和重试机制等功能。Quartz被广泛应用于各种应用程序中,提供可靠和灵活的任务调度解决方案。二,核心概念......
  • 【MCA】Java互联网高级架构师马SB
    【MCA】Java互联网高级架构师马SBdownload:3w51xuebccomRedis核心数据结构实战与高性能原理剖析Redis是一款开源的内存数据库,它提供了丰富的数据结构和API,并支持多种数据类型操作。在深入理解Redis核心数据结构实战和高性能原理之前,我们需要了解以下基础知识:Redis数据结构Redis支......
  • 基于JAVA在线考试系统
    计算机网络技术的成熟,使其在教育领域的应用范围越来越广泛。传统意义的考试方式因其效率低、工作量大、浪费资源等缺陷正面临着重大的变革。 本文所设计的系统在功能上主要有四个方面特点:一是实现题库的录入。教师将试卷上传,系统将内容检索后将试题存入数据库中。利用数据库技术......
  • 图灵Java架构班第六期无密 水晶帘动微风起
    图灵Java架构班第六期无密水晶帘动微风起download:3w51xuebccomRedis核心数据结构实战与高性能原理剖析Redis是一款开源的内存数据库,它提供了丰富的数据结构和API,并支持多种数据类型操作。在深入理解Redis核心数据结构实战和高性能原理之前,我们需要了解以下基础知识:Redis数据结构......
  • 极客时间训练营高级Java工程师体系课2023版2.0
    极客时间训练营高级Java工程师体系课2023版2.0download:3w51xuebccomRedis核心数据结构实战与高性能原理剖析Redis是一款开源的内存数据库,它提供了丰富的数据结构和API,并支持多种数据类型操作。在深入理解Redis核心数据结构实战和高性能原理之前,我们需要了解以下基础知识:Redis数据......
  • 基于JAVA旅游信息网的设计与实现
    当今社会是一个高科技、高效率、高度竞争的全新社会。随着人们生活水平的提高,人们不仅要在物质方面实现生活水平提高,而且在精神方面也希望有一个质的飞跃。人们已经不再局限于待在家里,不再局限于周围狭小的固定的生活圈子里。为了丰富自己的文化生活内容和娱乐活动内容,越来越多的人......
  • 基于JAVA在线上机安排系统设计与实现
    长期以来,各个高校的机房上机安排信息使用传统的人工方式,管理着机房上机安排的所有信息,使用这种管理方式存在着许多不尽人意缺点,如:工作量大,一个学校一个学期的机房上机信息数据是成千上万的,如果要审核需要花费大量的时间;耗费工作人员多,审核这么多数据不是单单一个人可以完成的,需要许......
  • Javascript中的内置对象
    在js学习中的有三种对象:1、内置对象--系统构造函数创建的对象;2、自定义对象--自定义构造函数创建的对象;3、浏览器对象---BOM对象;常用的内置对象:算术对象---Math();字符串对象---String();日期对象---Date();数组对象---Array();1、算术对象Math()Math对象......