请问如何把 pdf 转换成 png 图片?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
可以使用apache的pdfbox包进行转化,操作代码如下:
确保Maven项目中包含Apache PDFBox库的依赖:
<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.27</version>
</dependency>
定义了一个方法,用于将PDF文件转换为一系列JPEG图像。注意,这里假设有一个FileUtil类用于简化文件操作,如果实际环境中没有此类,需替换为标准的Java IO/NIO操作。
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class PdfToImageConverter {
    private static final int DEFAULT_DPI = 300; // 默认DPI设置
    /**
     * 将PDF文件转换为JPEG图像。
     *
     * @param fileName PDF文件的名称(不含路径和扩展名)
     * @throws IOException 转换过程中可能出现的I/O异常
     */
    public static void convertPdfToImages(String fileName) throws IOException {
        File pdfFile = new File("./" + fileName + ".pdf");
        // 目标目录不存在则创建
        String outputPath = "./out";
        File outputDir = new File(outputPath);
        if (!outputDir.exists()) {
            outputDir.mkdirs();
        }
        try (PDDocument document = PDDocument.load(pdfFile)) {
            PDFRenderer renderer = new PDFRenderer(document);
            int totalPages = document.getNumberOfPages();
            for (int pageIndex = 0; pageIndex < totalPages; pageIndex++) {
                BufferedImage image = renderer.renderImageWithDPI(pageIndex, DEFAULT_DPI);
                String imagePath = outputPath + "/" + fileName + "-" + pageIndex + ".jpeg";
                File imageFile = new File(imagePath);
                ImageIO.write(image, "JPEG", imageFile);
                System.out.println("Page " + (pageIndex + 1) + " converted to image.");
            }
        }
    }
    public static void main(String[] args) {
        try {
            convertPdfToImages("example");
            System.out.println("Conversion completed.");
        } catch (IOException e) {
            System.err.println("An error occurred during conversion: " + e.getMessage());
        }
    }
}
这段代码首先定义了一个convertPdfToImages方法,接受一个PDF文件的名称(不含路径和扩展名),然后加载PDF文档,使用PDFRenderer逐页渲染为图像,并以JPEG格式保存到指定的输出目录。最后,main方法中调用了这个转换方法,并简单地处理了可能发生的异常。