(超好用)linux/Windows环境下pdf转图片

前言:最近开发需要将pdf转图片,我用到两种方法进行转换

方法一: 通过BufferedImage进行pdf转换,

实现:Windows下正常转换,Linux下出现异常报错

展示效果:图片较模糊

Levigo JBIG2 image library was not found on classpath
2022-02-23 13:34:30.357 ERROR 1 --- [io-10000-exec-5] o.a.c.c.C.[.[.[.[dispatcherServlet]      : Servlet.service() for servlet [dispatcherServlet] in context with path [/xiolift/service/wechat/ce] threw exception [Handler dispatch failed; nested exception is java.lang.ExceptionInInitializerError] with root cause

Windows环境下pdf转图片效果图如下:

 代码如下:

 @SneakyThrows
    public String pdfToPic(HttpServletResponse httpServletResponse, String filePath,String picPath) {
        log.info("pdf转图片前的地址filePath:" + filePath);
        log.info("pdf转图片后应该存放的地址picPath:" + picPath);
        Document document = new Document();
        document.setFile(filePath);
        float scale = 1.5f;//缩放比例
        float rotation = 0f;//旋转角度
        for (int i = 0; i < document.getNumberOfPages(); i++) {
            log.info("pdf转图片的页数:" + document.getNumberOfPages());
            // 如果还有问题将初始化改成数字,不要用下述的描述
            BufferedImage image = (BufferedImage) document.getPageImage(i, GraphicsRenderingHints.SCREEN, org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX, rotation, scale);
            RenderedImage rendImage = image;
            try {
                // 多张图片转换
                // File file = new File("D:\\土测文件\\土建转图片" + i + ".png");
                // 单张图片转换
                File file = new File(picPath);
                ImageIO.write(rendImage, "png", file);
            } catch (IOException e) {
                e.printStackTrace();
            }
            image.flush();
        }
        document.dispose();
        return picPath;
    }

 方法二:通过PDFRenderer进行转换

实现:Windows下正常转换,Linux下正常转换

展示效果:图片清晰

Windows和Linux环境下pdf转图片效果图如下:

 代码如下:

 @SneakyThrows
    @Override
    public String changePdfToPic(HttpServletResponse httpServletResponse, String filePath,String picPath) {
        log.info("pdf转图片前的地址filePath:" + filePath);
        log.info("pdf转图片后应该存放的地址picPath:" + picPath);
        // 输入流
        InputStream in = null;
        PDDocument doc = null;
        try {
            in = new FileInputStream(filePath);//可以从本地文件中读取流 也可以从网络中读取
            doc = PDDocument.load(in);
            PDFRenderer renderer = new PDFRenderer(doc);
            int pageCount = doc.getNumberOfPages();
            for (int i = 0; i < pageCount; i++) {
                BufferedImage image = renderer.renderImageWithDPI(i,200f); // Windows native
                // DPI,PdfExchangeDpi是float类型的,越大文件越大,清晰度越高,
                File file = new File(picPath);
                if (!file .exists()) {
                    file .mkdirs();
                }
                ImageIO.write(image, "PNG", file);
            }
        } finally {
            if (in != null) {
                in.close();
            }
            if (doc != null) {
                doc.close();
            }
        }
        return picPath;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值