macOS 如何把任何文档“打印“成 PDF?RWTS-PDFwriter 免费虚拟打印机完整上手指南

📅 2026/8/15 17:54:48
macOS 如何把任何文档“打印“成 PDF?RWTS-PDFwriter 免费虚拟打印机完整上手指南
macOS 如何把任何文档打印成 PDFRWTS-PDFwriter 免费虚拟打印机完整上手指南【免费下载链接】RWTS-PDFwriterAn OSX print to pdf-file printer driver项目地址: https://gitcode.com/gh_mirrors/rw/RWTS-PDFwriter在 macOS 上做文档转换时你很可能遇到过这样的场景网页排版精美却只能截图保存、合同模板想批量导出成 PDF、代码里的技术报告要定期归档成册——系统自带的打印为 PDF每次都要手动选保存位置、改文件名批量处理时几乎没法用。RWTS-PDFwriter 正是为解决这类需求而生的开源虚拟打印机驱动装上之后系统里会多出一台名为 PDFwriter 的打印机任何应用里按下 ⌘P、选中它、点打印文档就自动变成 PDF 文件落到你指定的文件夹里。本文从实际使用场景出发带你完整走一遍从安装、配置、日常使用到自动化进阶的全过程全程免费、无订阅、无广告。从一个存网页的小需求说起做研究或写文档的人大概都有过这种经历看到一篇重要的网页文章想完整保存下来。截图是最常见的做法但截出来的图文字是死的——没法搜索、没法复制、放大就糊。而另存为网页又经常把布局打乱图片和样式支离破碎。其实 macOS 早就给了一个官方方案打印对话框右下角的PDF按钮选择存储为 PDF。这个功能本身没问题但它每次都要你手动指定保存路径、手动输入文件名而且没有记忆功能。当你一个月要归档几十份网页资料时这种重复操作会让人抓狂。更关键的是这种系统级方案没法被脚本调用。你想写个自动化任务把某个目录里的文件全部转成 PDF系统自带的方案做不到。而虚拟打印机Virtual Printer的思路完全不同它假装自己是一台真实打印机接管所有应用的打印输出然后把数据流直接写成文件。这样你就获得了一个系统级、任何应用通用、可脚本化的 PDF 生成入口。RWTS-PDFwriter 就是干这个的。RWTS-PDFwriter 是什么一台不存在的打印机先看一个直观的定义RWTS-PDFwriter 是一个运行在 macOS 11.0 及以上系统的开源打印驱动功能上类似 Windows 上老牌免费的 CutePDF。它由两部分组成核心后端pdfwriter/main.swift一个标准的 CUPS 打印后端程序。CUPS 是 macOS 底层的打印系统几乎所有打印任务都要经过它。后端程序负责接收打印数据、校验格式、写出文件。配套工具PDFWriter Utility/ContentView.swift一个用 SwiftUI 写的图形小工具用来创建 PDF 输出文件夹、管理卸载脚本。值得强调的是这个项目虽然只有几百行代码却把简单可靠做到了极致。它不常驻后台、不占用内存、不弹广告只在有打印任务的时候被 CUPS 临时唤醒干完活就走。项目的血脉也值得一提RWTS-PDFwriter 脱胎于 Simone Karin Lehmann 的 Lisanet PDFWriter而 Lisanet 又源于 Linux 上著名的 CUPS-PDF。换句话说这是一条传承了近二十年的成熟技术路线稳定性有相当保障。背后的设计为什么它又快又稳真正让我对这个小项目刮目相看的是它几个细节处的工程考量。你不需要懂代码也能理解这些设计——它们直接决定了你日常使用的体验。每个用户一个专属目录后端程序会把 PDF 输出到/var/spool/pdfwriter/下以用户名命名的子目录里比如/var/spool/pdfwriter/zhangsan/。这意味着多人共用一台 Mac 时各人的文件互不干扰每个目录的权限和文件权限都与系统账户严格绑定私有文件 600匿名用户 666文件的所有权归属于实际打印的那个人而不是 root。这种命名空间隔离的设计让它在办公室共用电脑的场景下也能放心使用。原子创建杜绝同名覆盖很多同类工具处理同名文件时的做法是直接覆盖或随机改名容易造成数据丢失。RWTS-PDFwriter 用的是操作系统层面的O_CREAT | O_EXCL原子操作创建文件时如果发现重名就自动在文件名后追加-1、-2……直到成功。注意是追加编号而不是覆盖旧文件这从机制上杜绝了并发打印时两个任务互相覆盖的竞态问题race condition。严格的文件名校验打印时 macOS 会传递文档标题作为文件名但标题里可能带/这种非法字符。后端程序会先把斜杠替换成冒号再截掉扩展名最后拼上.pdf。同时文件名长度被限制在 200 字符以内避免超出文件系统限制。如果一个文档没有标题比如命令行直接管道输入它会被命名为Untitled.pdf。先验证再落盘后端程序在读入数据流时会先检查文件头四个字节是否为%PDF。如果不是直接报错取消任务绝不会写出一堆乱码文件。这意味着从打印源头就能拦截格式错误。五分钟完成安装从源码到可用官方提供两种方式直接下载编译好的安装包或者自己从源码构建。这里重点讲从源码构建的完整流程。准备工作你需要一台装有 Xcode 命令行工具的 macOS 设备。构建脚本会自动处理编译、打包、生成 PPD 驱动文件打印机的说明书描述打印机支持哪些纸张尺寸、颜色等能力等一系列步骤。# 克隆项目源码 git clone https://gitcode.com/gh_mirrors/rw/RWTS-PDFwriter # 进入项目目录 cd RWTS-PDFwriter # 执行构建脚本自动编译并生成安装包 ./build/buildscript.sh脚本跑完后项目根目录下会出现RWTS-PDFwriter.pkg安装包。直接双击安装输入管理员密码即可。安装过程中系统会自动注册打印机驱动完成后打开系统偏好设置 打印机与扫描仪你就能看到 PDFwriter 这台虚拟打印机了。如果你希望安装包经过 Apple 公证notarization苹果的安全校验机制需要额外传一个钥匙串配置文件参数前提是你有合法的开发者证书./build/buildscript.sh -n Your Keychain Profile首次配置创建 PDF 输出文件夹安装完成后系统会自动打开 PDFWriter Utility 工具界面非常简洁——一个打印机图标加两个按钮点击Create PDF Destination Folder在弹出的对话框里选择一个你希望 PDF 落盘的文件夹比如~/Documents/PDF_Output。工具会在后台把这个位置与/var/spool/pdfwriter/你的用户名/建立符号链接相当于把打印机的出纸口重定向到了你选的位置。需要注意两点一是创建完文件夹后要退出这个工具安装流程才算真正完成二是工具不支持替换已有位置如果你之前配置过其他目录先不要重复操作。如果你跳过这步直接打印文件会落到默认的/var/spool/pdfwriter/下也完全能用。第一次打印把它变成 PDF配置完成后它的使用方式简单到让人怀疑是不是漏了什么步骤就用平时打印文档的方式把打印机换成 PDFwriter 就行。拿保存网页举例在 Safari 或 Chrome 中打开目标网页按下⌘ P调出打印对话框打印机选择PDFwriter点击打印。整个过程一气呵成随后打开你之前配置的输出文件夹一份与页面排版完全一致的 PDF 已经躺在那里了文件名自动取网页标题。文字是可搜索、可复制的这是截图永远比不上的。Word、Excel、Keynote、PDF 阅读器、邮件客户端……任何能触发打印对话框的应用理论上都能用这台打印机输出 PDF。这就是虚拟打印机最大的价值你不需要学习任何新软件只需要换个打印目标。打印机装好了去系统设置里确认一下安装完成后打开系统偏好设置 打印机与扫描仪你会看到 PDFwriter 出现在打印机列表里状态为空闲Idle在这里你可以把它设为默认打印机或者查看打印队列。更有意思的是Options Supplies...按钮进入后切换到 Utility 标签页会看到Open Printer Utility的入口这个入口很实用电脑上有多个用户时其他用户不需要重装软件从这里就能打开 PDFWriter Utility创建属于自己的 PDF 输出目录。也就是说一台机器上每个人都可以有自己的出纸口彼此互不干扰。进阶玩法命令行与自动化如果说图形界面的用法只是方便那命令行才是把这款工具的效率彻底释放出来的方式。批量转换文本文件配合lpr命令你可以循环把一堆文本文件转成 PDF文件名自动取自-T参数指定的标题# 把当前目录所有 .txt 文件批量转为 PDF for file in *.txt; do cat $file | lpr -P PDFwriter -T $(basename $file .txt) done注意-P PDFwriter指定打印机名-T指定文档标题会成为 PDF 文件名。监控文件夹自动转换结合fswatchmacOS 上的文件监控工具你可以做一个丢进去就自动转 PDF的文件夹fswatch -0 ~/Documents/ToPrint | while read -d event; do if [[ $event *.docx ]] || [[ $event *.pages ]]; then open -a Microsoft Word $event sleep 2 osascript -e tell application Microsoft Word to print active document fi done把 PDFwriter 设为默认打印机后这段脚本会监听指定文件夹新放入的文档自动被打开、打印、转成 PDF。适合会议资料、发票、合同等需要统一归档的场景。在开发流程里用起来对开发者来说把 PDFwriter 接进构建流水线能省下不少手工操作# 生成 API 文档 PDF doxygen Doxyfile cd latex make lpr -P PDFwriter refman.pdf # 把代码统计报告直接转 PDF cloc ./src --by-file --csv | lpr -P PDFwriter # 架构图导出 plantuml -tpng architecture.puml convert architecture.png architecture.pdf lpr -P PDFwriter architecture.pdf这些都是即插即用的思路关键在于lpr -P PDFwriter这个入口对任何能输出到标准输入的内容都成立。遇到问题怎么办一份排错清单用这类系统级工具偶尔会遇到些小状况。把最常见的几个问题和对应解法列在这里遇到时直接照着做即可。问题一打印机没出现在列表里多半是驱动注册出了问题先检查驱动文件是否就位再重启打印服务# 检查驱动安装 ls -la /Library/Printers/RWTS/PDFwriter/ # 重新加载 CUPS 打印服务 sudo launchctl unload /System/Library/LaunchDaemons/org.cups.cupsd.plist sudo launchctl load /System/Library/LaunchDaemons/org.cups.cupsd.plist问题二打印任务报错没有 PDF 生成先看输出目录是否存在、权限是否正确ls -la /var/spool/pdfwriter/再查看 CUPS 的错误日志定位具体原因tail -f /var/log/cups/error_log日志里如果出现 not compatible说明应用输出的数据流不是标准 PDF通常是驱动或应用本身的兼容问题。问题三文件太多想清理打印队列# 取消所有排队任务 cancel -a PDFwriter问题四想临时禁用打印共享、减少系统开销sudo cupsctl --no-remote-printers --no-remote-admin --no-share-printers完全卸载一条脚本搞定很多工具安装容易卸载难RWTS-PDFwriter 在这点上做得相当干净。打开 PDFWriter Utility点击Reveal Uninstall script按钮系统会打开/Library/Printers/RWTS/PDFwriter/目录里面有一个uninstall脚本。运行它并输入管理员密码驱动、打印机注册、后端配置会被全部移除而你已生成的 PDF 文件会原样保留不会有任何数据损失。开发者视角源码里有哪些值得看的细节如果你对技术实现感兴趣这个项目的源码非常值得一读——它短小精悍几乎没有多余代码。核心后端pdfwriter/main.swift只有一百多行却完整演示了一个 CUPS 后端该有的全部要素参数解析job-id user title copies options [file]、setuid 权限提升检查、PDF 头校验、用户目录创建与权限设置、原子文件创建。尤其是那个O_CREAT | O_EXCL加EEXIST重试的循环是处理并发写文件问题的教科书级写法。配置工具PDFWriter Utility/ContentView.swift则展示了如何用 SwiftUI 在几十行内完成一个实用的系统工具NSSavePanel 选择目录、符号链接创建、进程调用用/usr/bin/open打开卸载目录麻雀虽小五脏俱全。驱动文件build/PDFWriter.drv里有一个关键配置Filter application/vnd.cups-pdf 0 -这行声明了驱动接受 CUPS 的 PDF 数据流是整个打印成 PDF机制的核心。同时它支持从 A0 到信封、照片纸的几乎所有标准纸张尺寸默认纸张为 A4。构建脚本build/buildscript.sh则是一份很好的 macOS 安装包制作参考xcodebuild 编译 → pkgbuild 打包 → productbuild 生成安装器 → 可选签名与公证全流程自动化。最后的建议谁适合用它如果你属于以下任何一种情况RWTS-PDFwriter 都值得一试普通办公用户经常要把网页、文档存成 PDF 归档受够了每次手动选路径多用户共用 Mac 的家庭或团队需要每个人各自独立的 PDF 输出目录开发者与效率控想把 PDF 生成接入脚本、自动化流程或 CI 工具链开源爱好者想研究一个小而美的 CUPS 后端到底怎么写。整个项目基于 GPL v2 许可证发布代码完全开放你可以自由修改、分发甚至集成进自己的软件前提是同样以 GPL 协议开源。对于一个每天都要用、救过我好几次存档危机的小工具来说这份透明和免费显得格外珍贵。如果你也在 macOS 上被存 PDF这件事烦过不妨花五分钟装上它然后打开你最常用的那个应用⌘P、选 PDFwriter、打印——从此告别逐份手动保存。【免费下载链接】RWTS-PDFwriterAn OSX print to pdf-file printer driver项目地址: https://gitcode.com/gh_mirrors/rw/RWTS-PDFwriter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考