• 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大小。

  • 相关阅读:
    MyEclipse 中引用包的快捷键
    php中函数 isset(), empty(), is_null() 的区别
    Mysql sql_mode设置 timestamp default 00000000 00:00:00 创建表失败处理
    20190729 将博客搬至CSDN
    Python网络爬虫精要
    PhpStorm 头部注释、类注释和函数注释的设置
    asp.net 将内容导出EXCEL文件(转)
    C#中用GDI+生成饼状图和柱状图
    企业级架构、开发在软件中的定义
    C#中的装箱与拆箱的概念
  • 原文地址:https://www.cnblogs.com/zhexuejun/p/13257522.html
Copyright © 2020-2023  润新知