一种压缩扫描版 PDF 的方法

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

我也是 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
    30 引用 • 45 回帖 • 1 关注
  • 工具

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

    299 引用 • 766 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • V2Ray
    1 引用 • 15 回帖 • 2 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖
  • MongoDB

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

    91 引用 • 59 回帖 • 5 关注
  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:SymSoloVditor思源笔记

    1063 引用 • 3455 回帖 • 148 关注
  • App

    App(应用程序,Application 的缩写)一般指手机软件。

    91 引用 • 384 回帖
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖 • 1 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    142 引用 • 442 回帖 • 1 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖 • 1 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 29 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    246 引用 • 1338 回帖
  • 数据库

    据说 99% 的性能瓶颈都在数据库。

    345 引用 • 754 回帖
  • IPFS

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

    20 引用 • 245 回帖 • 232 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 560 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 51 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    589 引用 • 3528 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1708 回帖
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    42 引用 • 130 回帖 • 252 关注
  • 工具

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

    299 引用 • 766 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 110 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 2 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 395 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • Ngui

    Ngui 是一个 GUI 的排版显示引擎和跨平台的 GUI 应用程序开发框架,基于
    Node.js / OpenGL。目标是在此基础上开发 GUI 应用程序可拥有开发 WEB 应用般简单与速度同时兼顾 Native 应用程序的性能与体验。

    7 引用 • 9 回帖 • 403 关注
  • GraphQL

    GraphQL 是一个用于 API 的查询语言,是一个使用基于类型系统来执行查询的服务端运行时(类型系统由你的数据定义)。GraphQL 并没有和任何特定数据库或者存储引擎绑定,而是依靠你现有的代码和数据支撑。

    4 引用 • 3 回帖 • 11 关注
  • RabbitMQ

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

    49 引用 • 60 回帖 • 350 关注
  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 3 关注