Java实现压缩PDF,优化PDF大小

由于之前由tif格式的图片合成PDF太大,影响存储,所以要对之前的PDF文件进行优化,优化方法有两种:

  1. 借助aspose.pdf直接对合成的PDF进行压缩,该方法对于太大的PDF容易造成内存溢出,并且速度慢。

  2. 在合成PDF之前,对图片进行压缩,或者将tif格式转为压缩质量的图片格式JPEG, 推荐这种

首先介绍第一种,代码如下:

import com.aspose.pdf.Document;

public class OptimizePdf {

    public static void optimize(String source, String target) {
        Document doc = new Document(source);
        //设置压缩属性
        Document.OptimizationOptions opt = new Document.OptimizationOptions();
        //删除PDF不必要的对象
        opt.setRemoveUnusedObjects(true);
        //链接重复流
        opt.setLinkDuplcateStreams(false);
        //删除未使用的流
        opt.setRemoveUnusedStreams(false);
        //删除不必要的字体
        opt.setUnembedFonts(true);
        //压缩PDF中的图片
        opt.setCompressImages(true);
        //图片压缩比, 0 到100可选,越低压缩比越大
        opt.setImageQuality(10);
        doc.optimizeResources(opt);
        //优化web的PDF文档
        doc.optimize();
        doc.save(target);
    }

    public static void main(String[] args) {
        String source = "E:/SETUP/1.pdf";
        String target = "E:/SETUP/1.pdf";
        optimize(source, target);
    }
}

 第二种 使用thumbnailator类库压缩图片,因为JDK的ImageIO支持的图片格式并不丰富,所以需要引入增强的twelvemonkeys的ImageIO,由于ImageIO可以自动发现,所以引入twelvemonkeys的依赖即可,此处,由于我项目只需要tif的格式支持,为了减少多余jar,只引入了imageio-tiff,其他格式的需要依据需求可以去中央仓库找.

依赖如下:

    <dependency>
            <groupId>net.coobird</groupId>
            <artifactId>thumbnailator</artifactId>
            <version>0.4.8</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.twelvemonkeys.imageio/imageio-tiff -->
        <dependency>
            <groupId>com.twelvemonkeys.imageio</groupId>
            <artifactId>imageio-tiff</artifactId>
            <version>3.5</version>
        </dependency>

压缩图片的代码如下:

  /**
     * @date 2020-7-6
     * @description 压缩图片
     */
    public static void optimizeImage(String source, String target) {
        try {
            Thumbnails.of(source) //原图片
                    .scale(scale) //分辨率比例
                    .outputQuality(imageQuality) //图片质量
                    .outputFormat("JPEG") //目标文件格式
                    .toFile(target); //目标图片
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

最后将压缩后图片转为PDF,可以显著的减少PDF大小。

 

posted @ 2020-07-06 21:10  哲雪君!  阅读(13614)  评论(2编辑  收藏  举报