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` 对象。