一种压缩扫描版 PDF 的方法

本贴最后更新于 274 天前,其中的信息可能已经时移俗易

我也是 PDF 标注重度依赖用户,看到有人抱怨扫描版的 pdf 太大了同步不起,我来分享下一个压缩 PDF 的方法,根据使用经验最多可以压缩到原来的十分之一。

使用工具:

PDFPatcher  (PDF拆分与合并)	下载地址:[https://github.com/wmjordan/PDFPatcher/issues/2](https://github.com/wmjordan/PDFPatcher/issues/2)

imgyaso	(PDF压缩)	 项目地址:[https://github.com/apachecn/imgyaso](https://github.com/apachecn/imgyaso)

WPS (OCR 功能)

pdfdir (非必须,仅为没有目录的PDF制作目录)下载地址:[https://github.com/chroming/pdfdir/releases](https://github.com/chroming/pdfdir/releases)

步骤:

  1. 使用 PDFPatcher 将文件的目录等元信息导出到一个 xml 文件中,如果没有目录要迁移,此步可忽略。

    image

  2. 拆分。使用 PDFPatcher 将文件拆分成 jpg 图片, 它的导出方式是无损的。

    image

  3. 压缩图片。这可能是最有门槛的一步,需要安装 Python 环境,以及要在命令行模式(shell)执行命令。

    • 首先需要安装 Python,自行百度。

    • 安装压缩工具 **imgyaso**​​​​​,在命令行模式下执行命令(对于开发人员建议使用虚拟环境,为了防止因网络原因失败,这里使用了阿里的下载源):

      pip.exe install imgyaso -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com​​​​​​​。

      如果安装成功,执行 ​ python -m imgyaso​​​​​​​ 命令会出现如下信息:

      image

    • 在命令行环境下执行压缩命令:python -m imgyaso -mthres 0001.jpg​ ,一次调用只能压缩一张图片,可以通过这种方式来测试压缩的效果。

      若批量的处理所有的 jpg 文件,将下面的代码保存为一个后缀为 .py 的文件,然后将它放入第 1 步中的图片目录,然后双击它就可以一键压缩当前目录下所有图片了。

      (单线程处理大几百页还是有些慢,有能力的同学自行完成并发方案)

      import os
      import subprocess
      
      def process_jpg_files():
          jpg_files = [f for f in os.listdir() if f.lower().endswith('.jpg')]
          for jpg_file in jpg_files:
              subprocess.run(["python", "-m", "imgyaso", "-mthres", jpg_file])
      
      if __name__ == "__main__":
          process_jpg_files()
      
  4. 合并。使用 PDFPatcher 将压缩后的图片合并为一个 pdf 文档,注意在操作 3 中指定了步骤 0 中的信息文件,这样生成的 PDF 文档会自动导入原文档的目录等元信息。

    image

  5. 用 WPS 里的扫描件识别功能,将 PDF 转化为 OCR 版。这是个会员功能,没有会员的可以去咸鱼搞个一天号,或者使用其他工具的 OCR 方式。

  6. 可能还有点缺憾,因为有些扫描件一开始就没有目录,这时候就可以通过 pdfdir 工具手动导入目录啦。

    很多工具都可以编辑目录如上面的 PDFPatcher,但 pdfdir 的优势在于可以从京东、豆瓣等复制下来书籍的目录信息,一键完成导入。

到这里所有的工作都已经完成了。效果图如下:

image

压缩率:

​​image​​

​​

  • PDF
    27 引用 • 39 回帖 • 1 关注
  • 工具

    子曰:“工欲善其事,必先利其器。”

    277 引用 • 686 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    174 引用 • 990 回帖
  • 反馈

    Communication channel for makers and users.

    123 引用 • 906 回帖 • 200 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    34 引用 • 37 回帖 • 500 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖
  • 七牛云

    七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化 PaaS 服务。围绕富媒体场景,七牛先后推出了对象存储,融合 CDN 加速,数据通用处理,内容反垃圾服务,以及直播云服务等。

    26 引用 • 222 回帖 • 152 关注
  • 生活

    生活是指人类生存过程中的各项活动的总和,范畴较广,一般指为幸福的意义而存在。生活实际上是对人生的一种诠释。生活包括人类在社会中与自己息息相关的日常活动和心理影射。

    228 引用 • 1450 回帖 • 1 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 26 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • H2

    H2 是一个开源的嵌入式数据库引擎,采用 Java 语言编写,不受平台的限制,同时 H2 提供了一个十分方便的 web 控制台用于操作和管理数据库内容。H2 还提供兼容模式,可以兼容一些主流的数据库,因此采用 H2 作为开发期的数据库非常方便。

    11 引用 • 54 回帖 • 645 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖 • 1 关注
  • gRpc
    10 引用 • 8 回帖 • 55 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 699 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 2 关注
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖 • 3 关注
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 629 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    165 引用 • 407 回帖 • 522 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • Eclipse

    Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

    75 引用 • 258 回帖 • 628 关注
  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    399 引用 • 3444 回帖
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    523 引用 • 4589 回帖 • 688 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    45 引用 • 113 回帖 • 296 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 135 关注
  • Gitea

    Gitea 是一个开源社区驱动的轻量级代码托管解决方案,后端采用 Go 编写,采用 MIT 许可证。

    4 引用 • 16 回帖 • 2 关注
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 2 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 1 关注