java(springboot)实现将一个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:pdfbox
、javax.xml.bind:jaxb-api
、com.sun.xml.bind:jaxb-core
和 com.sun.xml.bind:jaxb-impl
。
方法介绍
`renderImageWithDPI` 是 PDFBox 库中的一个方法,用于将 PDF 文件中的指定页渲染成一个 `BufferedImage` 对象,并返回该对象。
这个方法包含两个参数:
- pageIndex:表示要渲染的 PDF 页码,从0开始计数。
- dpi:表示输出图片的分辨率,即每英寸像素数。
在上面的示例代码中,我们调用了 `renderImageWithDPI(0, 300)` 方法来将第一页转换为一个分辨率为 300 DPI 的 `BufferedImage` 对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2018-06-09 定时执行线程池ScheduledExecutorService的使用
2018-06-09 thread.join() 方法存在的必要性是什么?