
上个月帮同事改一份合同扫描件里面有个数字打错了她让我用某款商业PDF编辑器处理一下。我第一反应是找“破解版”——结果下载页面套了好几层跳转最后装上一个带广告弹窗的“全家桶”PDF没改成电脑倒是先闹起了脾气。一怒之下我把所有PDF需求都切到了GitHub上的开源编辑器到现在快一年了日常的拆分、合并、去水印、改文字、压缩、OCR全都能搞定而且不用再担心弹窗、捆绑、木马这些破事。这篇就把我实际用下来的开源PDF编辑器做个完整整理有开箱即用的网页版全家桶有轻量的桌面小工具也有适合批量处理的命令行工具基本覆盖了大多数人在“PDF编辑”这件事上的全部高频需求。不管你是懒得花几百块买商业软件的个人用户还是被领导追着要PDF的行政、财务、运营都可以直接照着抄作业。1. 为什么我放弃破解版PDF软件转投开源方案1.1 破解版PDF软件的风险有多离谱先说一段真实经历。去年我图省事在某下载站找了一个标注“已破解”“免授权”的PDF编辑器下载下来发现是个安装器装完之后电脑多了三个软件一个搜索浏览器、一个看图工具、一个输入法推广插件。而PDF编辑器本体还是试用版打开文件就弹窗让你买授权。更离谱的是那几天电脑风扇狂转任务管理器里多了一个陌生进程查了半天是挖矿程序。从那以后“破解版PDF软件”这几个字在我电脑里彻底拉黑。这类事情不是个例。PDF编辑器是典型的高价工具软件正版授权动辄几百上千于是很多人选择从下载站、网盘、群聊里找破解包。而这些破解包的来源非常不可控最常见的情况就是安装前先捆绑全家桶安装后后台挖矿运气差的直接中勒索病毒。就算没中毒破解版往往锁定在旧版本新系统上可能不兼容文件一多就崩溃得不偿失。商业软件有免费试用版的话用试用版都比破解包安全得多但试用版功能裁剪又让人难受。1.2 开源PDF编辑器到底能不能打很多人对“开源”有误解觉得开源等于简陋、等于只有程序员能用。但实际上PDF这个格式本身就是Adobe发布的开放标准后来还成为了国际标准ISO 32000整个行业有大量的开源实现成熟度和商业软件并没有代差。GitHub上很多PDF项目甚至比商业软件做得更细有的专注批量处理一条命令就能处理上千个文件有的专注隐私所有操作都在本地完成不用把合同上传到第三方服务器有的更新频率极高新需求提了没过多久就能被实现。我用下来最大的感受是PDF编辑这个需求绝大多数场景根本用不到商业软件的“全家桶功能”。普通人日常要的就是合并、拆分、删页、压缩、加水印、签个名而这些功能开源工具基本都覆盖了。与其花几百块买授权或者冒着风险用破解版不如按场景选一两个开源工具装一次管好几年。1.3 怎么判断一个开源PDF项目值不值得用GitHub上叫得上名的PDF项目少说也有几百个怎么选是个问题。我一般看四个点许可证MIT、Apache 2.0、GPL这类常见开源许可证都可以放心用能用MIT尽量选MIT商用限制最少如果涉及商业使用一定要避开那些“代码开源但文档和高级功能收费”的模糊项目。活跃度看最近提交时间和Issues处理情况一个项目如果一两年没更新了在新系统上大概率会有兼容性问题。GitHub项目页的Commits入口能看到最近更新记录这是判断项目是否“活着”最直接的方式。功能匹配度先想清楚自己到底要做什么操作再去选工具。只是随手合并几个PDF没必要搭一套Docker服务要处理大量扫描件就得选带OCR功能的方案。部署方式本地桌面工具、命令行工具、网页自托管服务三种形态各有适用场景。后面我会按这个维度来推荐。2. 主推的开源PDF编辑器选型与定位先放一张我整理的选型对照表然后一个个展开项目形态许可证核心定位适合人群Stirling-PDF网页版自托管MIT一站式PDF工具箱高频率、多场景用户pdfarranger桌面工具GPL-3.0页面重排、拆分合并低频用户、新手LibreOffice Draw桌面办公套件MPL-2.0直接编辑PDF内容已装办公套件的用户pdfcpu命令行Apache-2.0批量处理、自动化开发者、运维qpdf命令行Apache-2.0结构级处理、加密解密开发者、批量脚本2.1 Stirling-PDF浏览器里完成一切操作的“全家桶”Stirling-PDF是我目前用得最多的项目GitHub上叫 Stirling-Tools/Stirling-PDFMIT协议完全免费Star数很高社区非常活跃。它本质上是一个网页应用你把它跑起来之后用浏览器打开一个本地地址就能在里面完成几乎所有常见的PDF操作合并、拆分、旋转、压缩、加去水印、页面重排、加密解密、格式转换、OCR识别甚至还能对页面做简单的文字和图片编辑。为什么我喜欢它因为它把所有功能都收敛到一个界面里不需要为每个功能单独装一个软件。部署方式也灵活最省事的是用Docker直接起一个容器不想用Docker的话也可以下载打包好的JAR包用Java运行或者部署到公司服务器上让整个部门共用。它对隐私处理得很认真默认所有文件都在本地处理不会上传到任何第三方云端服务这一点对处理合同、简历这类敏感文件尤其重要。2.2 pdfarranger轻量级页面整理利器如果你只是偶尔处理PDF不想折腾Docker和命令行那pdfarranger是首选。它是基于Python和GTK开发的桌面工具GitHub上就在 pdfarranger/pdfarranger 仓库安装包覆盖Windows、macOS和主流Linux发行版。界面长得像资源管理器左边是页面缩略图右边是预览。你可以直接拖动缩略图来调整页面顺序删除不需要的页码提取指定页还能裁剪页面、旋转方向、插入空白页。操作逻辑特别直观很符合人对纸质文件的理解——把一叠纸按想要的顺序排好再导出。这个工具的定位是“页面整理”不是详细的文字内容编辑但它解决的是日常里最高频的痛点合并几份材料、抽掉合同里多余的空白页、把扫描件按正确顺序重排。2.3 LibreOffice Draw本地免费处理PDF的“隐形高手”很多人电脑里已经装了LibreOffice但不知道它自带的Draw组件可以直接打开和编辑PDF。用LibreOffice Draw打开PDF时它会把PDF页面转换成可编辑的矢量对象文字和图片都成了可点击的元素能直接修改文字内容、移动图片、添加标注和形状。这个方案最大的价值在于“零安装成本”——已经装了LibreOffice的人可以直接用不用再下载任何东西。它适合改一些结构简单的PDF比如一页通知、一页简历、一页产品说明改完用“导出为PDF”重新生成。需要注意如果PDF本身排版非常复杂比如多栏排版、大量图片、复杂表格Draw转换后可能出现文字位置偏移、字体替换的情况所以复杂文档改完一定要逐页预览检查。类似的思路还有Inkscape对矢量图形元素的处理能力更强适合改海报、图纸类的PDF。2.4 pdfcpu与qpdf命令行党的批量处理利器当文件量上来之后图形界面就成了瓶颈。比如手上有一百个需要统一加公司水印的PDF用鼠标一个个点得点到半夜用命令行一条命令几秒钟就完事。这里推荐两个工具pdfcpu和qpdf。pdfcpu是用Go写的PDF处理器Apache 2.0协议单个可执行文件下载就能跑跨平台支持很好。它能做合并、拆分、旋转、裁剪、加密、加水印、提取页面信息、优化体积写自动化脚本非常舒服。qpdf是老牌C项目稳定性极高特别擅长做结构级的转换和修复它的页面合并语法堪称经典。另外还有一个轻量工具mutool来自Ghostscript全家桶处理PDF和Epub时也很好用如果你已经装了Ghostscript它就在旁边候着。3. 实操从安装到完成PDF编辑的完整流程光说不练没用这一节我把验证过的部署和操作流程完整写出来。3.1 Stirling-PDF的Docker部署与常用功能演示Stirling-PDF最推荐的部署方式就是用Docker。装好Docker之后一条命令就能启动docker run -d -p 8080:8080 --name stirling-pdf docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest启动后浏览器打开 http://localhost:8080 就能看到主页。考虑到有人喜欢保留处理记录、也有人需要修改配置可以挂载一个本地目录docker run -d -p 8080:8080 -v /你的本地目录:/configs --name stirling-pdf docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest起来之后我平时用得最多的是这几个功能合并PDF把多份扫描件按顺序合成一个文件界面里直接添加文件、拖拽排序、点合并。拆分PDF选页码范围提取成单独文件很适合从一整本手册里抽出某几页。压缩PDF上传后选压缩级别它会重新编码图片和资源体积经常能压到一半以下。去水印用矩形框遮盖指定区域再导出处理水印页非常方便。格式转换PDF转图片、图片转PDF、PDF转Word这类操作都有对应的入口。每个功能都是上传文件、等进度条、下载结果逻辑和商业软件差不多但全部在本地完成不用把文件送到别人的服务器上。有个值得单独提的是OCR功能它集成了OCRmyPDF和Tesseract可以把扫描图片型PDF转成带可搜索文字层的PDF。注意中文OCR需要额外安装中文语言包这个我在第4节细说。3.2 pdfarranger安装与页面重排实操pdfarranger的安装很简单。Debian/Ubuntu系可以直接sudo apt install pdfarrangermacOS用Homebrew安装Windows去GitHub Releases页面下载安装包即可。启动后把需要操作的PDF文件拖进窗口左侧会按顺序显示所有页面缩略图。用它删除扫描件里的空白页特别方便看到哪一页是空白右键删除就行多份合同要合并直接把另一个PDF文件也拖进来拖动缩略图调好顺序再点导出。我实际遇到过的一个场景一份几十页的投标材料里面有些页是重复的废页用其他软件一页页删非常痛苦。用pdfarranger只需要“浏览缩略图→右键删除→导出”三分钟搞定。它的底子依赖GTK和Poppler处理一般大小的PDF都很流畅常规办公文档完全没问题。如果你需要更细的页面控制比如把两页内容合并到一页上可以先用工具导出成图片再重新排成新PDF虽然绕了一点但胜在可控。3.3 命令行批量操作合并、压缩、加密一网打尽命令行工具适合“固定流程重复执行”的场景。先说最常用的qpdf页面合并qpdf --empty --pages a.pdf 1-3 b.pdf -- out.pdf这条命令的含义是从一个空白文档开始把a.pdf的第1到3页再接上b.pdf的全部页面输出成out.pdf。想要控制某个文件的页码范围把页码写成 4-6 这样的形式就行。qpdf还能处理带打开口令的PDF当你手头有合法口令、想要去掉口令方便内部流转时qpdf --password你的密码 --decrypt locked.pdf unlocked.pdf注意只对你有合法访问权限的文件做这个操作。pdfcpu的命令稍微“高级”一点但写脚本很舒服。给PDF加水印类似这样pdfcpu watermark add -- 机密 input.pdf out.pdf压缩体积直接用pdfcpu optimize input.pdf out.pdf加密PDFpdfcpu encrypt -p 开机密码 input.pdf out.pdf我实际写批处理的时候经常把这些命令串成一串先合并再加水印最后压缩几百个文件也能稳定跑完而且每一步之间不会产生临时垃圾文件。文件多的时候建议写个Bash或PowerShell脚本循环执行而不是在终端一条条敲。4. 常见问题与排查技巧实录这一节把我踩过的坑和解决办法整理一下都是实际验证过的。4.1 中文乱码与字体缺失怎么处理用LibreOffice Draw改PDF或者用某些工具转换PDF时最常遇到中文乱码。原因多半是PDF里只嵌入了字体子集或者转换时找不到中文字体。解决方式分几步先确保系统装了完整的中文字体比如思源黑体、Noto Sans CJKLinux和macOS上尤其容易忽略这一步。再到LibreOffice的字体替换设置里把替代字体指定为支持中文的字体。最后在导出PDF时勾选“嵌入字体”这样生成的文件拿到任何设备上都能正常显示。如果是Stirling-PDF里出现中文乱码多半是Docker容器本身没装中文字体。可以在部署时挂载系统字体目录或者在容器里补装中文字体包后重建容器。这是自托管应用很典型的问题根源就是容器环境太干净什么字体都没有。4.2 扫描件和图片型PDF如何OCR识别扫描件本质上是图片复制不了文字也搜不到内容OCR是唯一的出路。开源方案里最常用的组合是Tesseract加OCRmyPDF。Tesseract是Google开源的OCR引擎OCRmyPDF则把OCR结果嵌入到PDF中生成一个带文字层的可搜索PDF。中文OCR需要先安装中文语言包。Debian/Ubuntu下sudo apt install tesseract-ocr tesseract-ocr-chi-sim然后对扫描件执行ocrmypdf -l chi_sim input.pdf output.pdf --force-ocr跑完之后新生成的PDF里文字变成了可搜索、可复制的状态。Stirling-PDF也内置了这条链路界面操作即可。实际效果方面印刷体中文识别率很高手写体和低分辨率扫描件会差一些作为搜索和复制用途够用。如果文件是倾斜的建议先做一下页面校正OCR识别率能提升不少。4.3 加密PDF无法打开或编辑怎么办先说边界这里讨论的“加密”是文件所有者设置的访问口令或者是你自己有权限处理的文件。如果你是文件的合法所有者忘记口令且文件允许解密可以用qpdf尝试去掉打开口令qpdf --password你的密码 --decrypt locked.pdf unlocked.pdf如果是PDF的权限限制比如禁止复制、禁止打印qpdf同样可以把权限层去掉后再另存为但前提依然是你对文件有合法权限。我处理比较多的是自己生成过的加密合同、公司内部文件。在这里也提醒一下遇到来路不明的加密PDF不要想着绕过权限那可能涉及版权和合规问题。4.4 其他高频坑位大文件处理崩溃Stirling-PDF处理几百MB的PDF时注意给Docker容器分配足够内存不然可能直接被系统杀掉。压缩后图片变糊PDF压缩的本质就是平衡体积和清晰度重要文件压缩前先备份原文件压缩参数要留余地。浏览器下载中断Stirling-PDF处理完文件是通过浏览器下载文件太大时容易断建议先拆分再处理或者把超大的PDF分成几部分各自转换。命令行工具版本差异pdfcpu更新很快不同版本参数有微调跑脚本时注意锁定版本升级前先看更新日志。5. 给想折腾的开发者二次开发与自动化集成5.1 Apache PDFBox与pdf.js的应用场景如果你的需求是“把PDF编辑功能做进自己的产品里”推荐了解Apache PDFBox和Mozilla的pdf.js。PDFBox是Java生态里最著名的开源PDF库Apache 2.0协议优势在于可以精细化控制PDF内容读取文本、提取图片、创建文档、拆分合并、填充表单字段。用它写批处理程序或者做PDF解析服务都很顺手。pdf.js则是浏览器里的PDF渲染引擎Firefox的PDF查看器就是基于它做的。用它可以在网页里展示PDF、加注释、做简单编辑交互适合做Web端产品。我去年做一个“在线合同预览”的小项目时就是靠pdf.js解决了浏览器里渲染PDF的问题完全不需要让用户下载文件再打开。另一个值得一提的Python库是PyMuPDF它对PDF的编辑和提取特别灵活中文社区资料也多。如果你主要用Python做数据处理PyMuPDF基本是首选一个脚本就能批量抽取PDF里的表格和文本。这几个库叠加起来基本上一个人就能搭出一个“内部PDF处理服务”。5.2 怎么参与开源PDF项目贡献开源项目不只是拿来用自己也可以参与进去。我给一些开源PDF项目提过Issue和代码流程其实不复杂先到项目主页的Issues里找“good first issue”或“help wanted”标签的工单这类任务通常难度友好然后看README里的贡献指南把开发环境跑起来写好代码后提Pull Request维护者审核通过后合并。对大多数非程序员用户还有一种更简单的贡献方式翻译文档、写使用教程、在Issues里帮别人解答问题。很多项目缺的不是代码而是面向中文用户的文档和案例。拿着我在第2节推荐的工具写一篇你自己的使用心得发到社区本身就是在为开源生态添砖加瓦。我最早接触开源就是从PDF工具起步的因为需求具体、反馈直接比单纯看基础教程有动力得多。我个人在实际操作中的体会是选择开源PDF工具最重要的不是比较谁功能多而是先把“自己最常用的三个操作”固定下来用最顺手的工具解决。我现在电脑上就只留了pdfarranger和一个命令行脚本合集偶尔用Stirling-PDF处理OCR和格式转换开销很小但PDF相关的活从来没有卡过壳。最后再分享一个小技巧不管用什么工具处理重要文件前一定先复制一份副本开源工具虽然稳定但操作失误可没有“撤销”按钮保护原始文件。