zoukankan      html  css  js  c++  java
  • 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大小。

  • 相关阅读:
    java笔记 chapter3 对象,抽象,package,import,权限修饰符,属性,方法,构造方法
    javass 视频笔记三 switch语句 for循环,while循环,do-while循环,break和continue
    java笔记 chapter1 java是什么,能干什么,有什么,特点,开发环境
    在用SSH框架中的碰见的一些问题
    这几天写MFC时候碰到的一些问题!
    2_1.8_点击按钮__改变背景颜色
    1_1.7_hello_android
    phpstudy客户端的使用
    navicat
    iptables防火墙
  • 原文地址:https://www.cnblogs.com/zhexuejun/p/13257522.html
Copyright © 2011-2022 走看看