一种压缩扫描版 PDF 的方法

我也是 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
    25 引用 • 32 回帖
  • 工具

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

    271 引用 • 665 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    96 引用 • 330 回帖
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    89 引用 • 59 回帖 • 1 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 591 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    16 引用 • 53 回帖 • 85 关注
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 468 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    58 引用 • 109 回帖
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    907 引用 • 921 回帖
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    34 引用 • 35 回帖 • 1 关注
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 275 关注
  • 区块链

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

    92 引用 • 751 回帖 • 1 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 665 关注
  • 微服务

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

    96 引用 • 155 回帖 • 1 关注
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖 • 2 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    5684 引用 • 25560 回帖 • 293 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    14 引用 • 67 回帖 • 377 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 245 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 584 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • abitmean

    有点意思就行了

    2 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 45 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 27 关注
  • ActiveMQ

    ActiveMQ 是 Apache 旗下的一款开源消息总线系统,它完整实现了 JMS 规范,是一个企业级的消息中间件。

    19 引用 • 13 回帖 • 587 关注
  • Eclipse

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

    75 引用 • 258 回帖 • 619 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 415 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    88 引用 • 345 回帖
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 386 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 6 关注