点击上方蓝字关注我,设置星标✨,第一时间收到最新内容
前几天有个项目要交一摞技术资料,客户要求按照PDF格式合并提交。
本来不是什么大事,可问题在于——我手里有一堆扫描件、若干张设计图纸导出的PDF,还有几个带密码的历史版本。
打开了几个在线PDF处理网站,上传、排队、等结果,又是注册又是会员限制。WPS的会员也刚好到期了。。。🥲
一气之下,我决定周末自己手搓一个轻量化工具。就和之前手搓给图纸做气泡图的软件一样。
点此回顾:免费又好用!分享一个PDF图纸气泡序号标记工具,图纸处理快人一步!
一、起点:先解决PDF转高清图片
我最开始的需求其实很小——把PDF的每一页转成高清图片,方便塞进PPT做汇报。
用pdf.js在前端渲染,配合canvas导出PNG,一个小时就搞定了核心逻辑。
迭代了几版,本地离线 ,单文件, 双击即用,拖入即转,单张/批量/长图导出,自定义加水印,麻雀虽小,五脏俱全。
跑起来那一刻还挺得意:纯本地、不联网、嘎嘎好用。


可转完图我就琢磨:既然导图这一层已经通了,合并、拆分、加水印这些高频操作,是不是也能塞进来?一个人用一次性和一千个人用一千次,完全不一样。
二、发现:前人已经把地基打好了
正打算自己从头搭框架,搜资料时碰巧看到一篇公众号文章,有博主已经做了一个「离线PDF工具箱」,单HTML文件,15项功能,pdf.js+pdf-lib+JSZip全内联,真正离线。
打开一看,大佬也是干得相当扎实。该有的都有:合并、拆分、旋转、删除页、加页码、水印、压缩、解密、PDF转图片、图片转PDF……还支持按书签拆分、对开页拆分这些细分场景。

这不就是我想做的东西吗?站在前人肩膀上比自己从零砌砖强太多了。
于是我在源码基础上,花了大半天时间干到深夜,一点点抠、一点点改,最终打磨出了现在的V4.1新版本。
三、工具箱长什么样
先说说整体构成,方便大家判断是不是自己需要的。
一句话定位:一个双击就能用、完全离线、文件不出本机的单网页文件PDF工具箱。
16项功能(V4.1在原工具15项基础上新增了PDF签名):
合并拆分:PDF合并、交替合并、按页码拆分、按书签拆分、对开页拆分 页面编辑:旋转页面、删除页面、页面重排、页面倒序 标注增强:添加页码、添加水印、PDF签名(含手写) 格式转换:PDF转图片(含合成长图)、图片转PDF 其他:PDF压缩、PDF解密




几个特点我特别想强调:
第一,真离线。所有处理都在你浏览器里跑,文件不会上传到任何服务器。合同、身份证、财务报表这种敏感文件,可以放心处理。
第二,单文件即开即用。一个HTML文件,2.5MB,拷到U盘里带走,任何电脑双击就能跑,不用装环境、不用注册账号。
第三,所见即所得。加水印、加页码、合成长图都有实时预览,不用盲操作。(超大文件预览悠着点,可能会崩)
第四,细节到位。拖拽排序、中文逗号容错、按书签自动识别章节,这些都是实际用下来才会发现的小心思。
四、V4.1到底改了啥
这部分是重点,也是我花了大半天主要在干的事。
1. 修了两个致命Bug
原作者的代码底子真不错,但有一个功能彻底坏了——交替合并。
所谓交替合并,就是把两个PDF按页穿插,比如A1-B1-A2-B2……做试卷场景(题目+答案穿插)特别有用。
可你实际点「开始交替合并」,页面纹丝不动,状态栏卡死。我扒代码才发现:点击回调里引用了一个叫clearBtn的变量,但这个变量在这个模块里压根没声明——它应该叫clearBtnAlt。一行代码写错变量名,整个功能直接报废不好用了。
更隐蔽的是,两个面板的「清空列表」按钮用了同一个id(HTML里id必须唯一),导致其中一个按钮点了没反应。
这种Bug用户根本不会意识到,因为点了没反应只会以为自己操作错了。修掉之后,交替合并才真正能用。

2. 新增:PDF转图片·合成长图
这个是我自己的真实痛点。
有时要把一个长资料PDF提取部分内容要加入PPT中发给客户看,或者对方不想下载PDF阅读器,或者要在微信里直接预览。这时候转成图片,或者一张长图最方便——上下滑动就能看完,页不用翻页。
我在PDF转图片模块里加了一个「合成长图并下载」按钮:按页顺序垂直拼接成一张长图,文件不大的话整体合成一张,超过浏览器Canvas硬上限(65535像素)才自动分卷。
实测几十页的PDF,点一下就是一张能直接发微信的长图,爽。

3. 优化:图片转PDF的排序和排版
原来图片转PDF有个体验问题:你选10张图,导入顺序是乱的,得仔细确认拖动调整。
我加了三种排序方式,默认是文件名数字自然序——page2会正确排在page3前面,做扫描件合订的时候,文件名命名规范一点,导入就是对的。
预览下方原来只显示截断的文件名,现在显示完整文件名,鼠标悬停还能看全名。
另外加了页边距设置(上下左右四个输入框,单位毫米)和「宽度布满页面」勾选——勾上之后图片宽度撑满页面内容区,左右无白边,做图册、做照片PDF特别有用。

4. 新增独立功能:PDF签名(含手写)
这个是我做这次迭代最满意的部分。
场景很具体:合同盖章、技术文件签字确认、图纸会签—以前要么打印出来手签再扫描,要么用付费的电子签名软件。
我加了一个完整的签名模块:
上传签名图片:PNG透明背景效果最好,提前扫描好手写签名就行 手写签名板:直接在屏幕上写,支持鼠标和触屏,写完导出成透明PNG当签名用 拖拽定位:签名图浮在PDF预览上,拖到哪儿就签到哪儿,右下角小圆点可以缩放 应用范围:当前页、所有页面、除最后一页、仅最后一页、自定义页码(支持 1,3,5-7这种写法)

有个技术细节我特别说一下:定位用的是页面百分比,不是绝对坐标。
什么意思?如果你的PDF各页尺寸不一样(比如前面A4后面A3),用绝对坐标签名会跑偏——第二页签的位置和第一页对不上。改成百分比之后,每页都按自己的真实尺寸算比例,不管页面多大,签名都落在相对一致的位置。
5. 其他打磨
压缩功能改名+加警示:原来叫「PDF压缩」,但它的本质是把每页栅格化成图片。对文字型PDF,这操作反而会让文件变大,还会丢掉文字的可选中、可搜索能力。改名叫「PDF图片化压缩」,并加了橙色警示说明。诚实地告诉用户这功能适合什么、不适合什么。 水印改矢量文字:原来水印文字也是栅格化的,模糊。改成pdf-lib原生矢量字体绘制,清晰可选中。 文件名加源名前缀:原来导出都叫 merged.pdf,多次操作会互相覆盖。现在变成源文件名_合并.pdf这种格式。下载链接释放延长:从1秒延长到10秒,避免大文件下载中途断流。
五、写在最后
原作者相声做这个工具的初衷我特别认同:PDF处理应该是基础能力,不应该被付费墙拦住。
我在他搭好的地基上,结合自己日常处理技术资料、图纸、合同的真实痛点,页看了原文的评论区留言,加上自己对代码的逐行体检,把它从V4打磨到了V4.1。
修了致命Bug、加了合成长图、加了PDF签名和手写签名、优化了图片转PDF的排序和排版……每一个改动背后都是实际使用中遇到的不顺手。
这个工具箱真正做到了 “轻量但不简单” —体积占用极小,界面干净,上手几乎没有学习成本;但功能覆盖了从转换、编辑到加密、签名、格式转化处理的完整链条。它不追求超级全能设计,比如需要复杂设计的OCR识别后的转Word,转Excel等功能,而是把每一分力气都花在了“解决最常规问题”这件事上。
工具是死的,使用场景是活的。不断的优化迭代,让这个工具真正服务于每一个有需要的人,。
你还有啥需求,可以在下方留言讨论。
获取工具下载链接,请在公众号后台留言:PDF工具箱
如果你在日常设计、图纸处理、文件处理中有什么麻烦事,需要用什么软件来解决,欢迎在公众号「汽车零部件设计漫谈」后台留言,我也会第一时间关注回复。
以上就是本篇全部内容了,希望对在看的你有所帮助。
让知识和经验烂在肚子里,让资料躺在硬盘里,都是一种极大的浪费!知识传播才有价值。觉得工具有帮助,别忘了点赞👍、转发收藏,点亮在看♥️,分享给更多需要的人。


声明:原创文章,转载请注明出处。本号对所有原创、转载文章的陈述与观点均保持中立,推送文章仅供读者个人学习和交流。部分图片、素材来源公开网络,内容版权归原作者享有,如有侵权,可第一时间联系处理。
夜雨聆风