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

  • 相关阅读:
    react ts axios 配置跨域
    npm run eject“Remove untracked files, stash or commit any changes, and try again.”错误
    java 进程的参数和list的线程安全
    帆软报表 大屏列表跑马灯效果JS
    帆软报表 快速复用数据集,避免重复劳动
    分析云 OA中部门分级思路和实现方法
    分析云 分段器 只显示一个块的数据
    分析云 更改服务默认的端口号
    分析云U8项目配置方法新版本(2)
    Oracle 创建时间维度表并更新是否工作日字段
  • 原文地址:https://www.cnblogs.com/zhexuejun/p/13257522.html
Copyright © 2011-2022 走看看