惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
J
Java Code Geeks
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
IT之家
IT之家
博客园_首页
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
B
Blog
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
N
Netflix TechBlog - Medium
T
Tailwind CSS Blog
博客园 - 聂微东
腾讯CDC
A
About on SuperTechFans

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
pdf-helper 01 | 强迫症不喜欢散装的 pdf - 少数派
2024-01-24 · via 少数派

起因

上课时候或者下课后想拿课件来做笔记的时候,遇到过一些尴尬。

如果说直接看老师发的 pdf,就会发现滚好多页才会看完一个有效一页。这种 pdf 我个人叫做散装 pdf(P.S.这种情况在用 beamer 做课件的老师更为常见)。

图片

当然,好在老师提供了ppt,我们可以从 ppt 打印为 pdf。

问题的确算是解决了, 直到...

图片

大概由于电脑的某些设置不同,导致了一些内容尴尬地跑出了页面范围... 

有时也会有某些文本因为文本框过窄而自动换行的情况(可能因为我的电脑屏幕比老师的小)等等

种种问题,导致了 ppt 导出的 pdf 没有老师的原始 pdf 美观,甚至还会缺失一些信息内容。

大概有人会说直接看 ppt 不就好了,折腾 pdf 干嘛呢。只能说如果和老师编辑 ppt 使用的操作系统不一致的话,某些字体显示会有一些奇怪的不一致。更重要的一点是,ppt格式不方便挪到 iPad上面做笔记,比如 Marginnote、Noteability、OneNote等等

动手

毕竟众口难调嘛,也不好再麻烦老师来迁就我这种口味刁钻的学生,于是就有了一个看起来有点无聊的想法: 给老师发的散装pdf打包一下。

然后稍微聊下主要思路:

  1. 将每一页 pdf 转为图片,转灰度值后每一页pdf对我们而言就只是一个又一个的二维数组而已了,其中二维数组里面的每一个元素对应着一个像素点的灰度值
  2. 然后对比一下前后两页的数组,两个数组做差后为0的元素即两页相同的部分,不为0的部分对应的就是两页不同的像素点。
    对不同像素点做一定的判断,就可以分析这两页是不是都是同一页有效页,目前代码有两种判断思路:
    1. 变化像素点数目占总像素数目的比例是否超出阈值(阈值是超参数)
    2. 发生变化像素点对应的位置(index),在前一页中的 value 是否与背景色想对应。如果觉得这样判断太严格可以加一个容差范围。
    3. 走过一次for循环之后,我们就得到了每一个有效页第一页的页码,对原pdf文件提取出对应页码,重新保存到新的 pdf 中,就成功地提取出文档的全部"精华"了。

完整代码见 Github

尾声

以后我只用跑一下程序就好了,再也不用打开 ppt,等待我缓慢的电脑加载完office,然后在去找打印的button,或者ctrl+P打印,再选一下保存路径等等一系列麻烦无聊恼人的操作了。🥴

回过头来说一下,代码还没有十分完善,目前第二种方法只能处理纯色的背景,对于特殊背景的 pdf,还要多加几行代码,也不是很麻烦,有兴趣的可以帮我加上呗(懒)。

代码使用简易说明

pdf-helperzdfilter2.py中的

# ========== Config ==================
path = "path/to/lec/pdf"
ignore_files = [
    "pdf_that_u_don't_want_to_filtrate1.pdf",
    "pdf_that_u_don't_want_to_filtrate2.pdf"
]
# ====================================

配置一下:path变量修改为你需要处理的那个文件夹路径,ignore_files为当前文件夹下一些你不想处理的文件名,然后在filter2.py所在文件夹下打开命令行运行程序即可。

python3 filter2.py

代码已经上传GitHub仓库

https://github.com/Benature/pdf-helper/tree/master/pdf_filter