UOS/deepin安装CUPS-PDF虚拟打印机:配置与排错指南

发布时间:2026/9/30 6:14:25
UOS/deepin安装CUPS-PDF虚拟打印机:配置与排错指南 在UOS统信UOS或deepin深度Linux系统里想把网页、文档、报表直接变成PDF文件最省事的方案就是安装一个虚拟PDF打印机。这个场景我踩了好几次坑因为系统默认不带这款工具很多人上来就找商业PDF编辑器其实一个CPUS-PDF就能解决问题——当然更准确的名字是CUPS-PDF中文社区里常被念成“CPUS-PDF”本文就用这个大家更熟悉的名字来写。这篇文章适合谁看一是正在用UOS、deepin办公经常需要把业务系统单据、网页、文档“打印”成PDF的普通用户二是给公司批量部署国产系统打印环境的技术人员。我会把安装前的准备、三种安装方式、配置文件核心参数、实际打印测试以及我遇到过的各种坑全部拆开讲清楚。哪怕你之前完全没碰过Linux命令行跟着步骤操作也能搞定。1. 这个东西是什么为什么UOS/deepin用户要用它1.1 CPUS-PDF的前世今生其实叫CUPS-PDF先把这个名字说清楚。在Linux生态里负责打印服务的组件叫CUPSCommon Unix Printing System几乎所有Linux发行版都靠它管理打印机。CUPS-PDF就是在CUPS基础上增加的一个“虚拟打印机”它不连接任何物理设备而是把发送给它的打印任务直接转成PDF文件保存到指定目录。用户下载这个工具时经常在压缩包里看到文件名前缀是“cups-pdf”在终端包管理器里搜索也是“cups-pdf”但中文输入法顺手一打就变成了“CPUS-PDF”。我把两种写法都在搜索框里试过都能搜到资料说明这个口误在中文社区已经广泛存在。如果你去英文官网看绝大多数场合写的都是CUPS-PDF本文后续涉及配置文件、包名和命令时我会统一用“cups-pdf”这个真实名称标题里保留用户更熟悉的“CPUS-PDF”。这个工具的实现原理其实很朴素它虚拟出一个PostScript打印机队列当用户打印时CUPS会把应用传来的数据交给Ghostscript处理再通过cups-pdf的过滤脚本写入一个PDF文件。整个过程对用户完全透明你只需要像打印到普通打印机一样操作最后去指定文件夹拿结果就行。1.2 虚拟PDF打印机的适用场景为什么UOS/deepin用户特别需要这个虚拟打印机我从实际工作里总结了几类高频场景。第一类是业务系统单据归档。很多政务、企业系统只提供打印按钮不提供导出PDF功能比如报销单、审批表、合同页面。直接打印到纸张要耗纸耗墨电子归档又不方便装一个虚拟PDF打印机随手就能把所有单据存成电子版。第二类是网页保存。浏览器确实自带“另存为PDF”功能但遇到大页面、复杂表格、动态滚动区域时保存出来的排版经常错位。借助虚拟打印机浏览器打印对话框里选一下PDF打印机渲染效果和真实Windows下的“Microsoft Print to PDF”几乎一致排版基本不会乱。第三类是软件交付和协同办公。比如开发人员要把程序用户手册导出给客户普通员工要把演示文稿发给领导审阅虚拟PDF打印机就能把能打印的内容统一变成标准PDF避免不同系统字体缺失导致文档乱码。试想一下你刚把一台UOS专业版电脑发给财务部同事对方马上要去报销系统打一张电子发票打印件作为附件没有虚拟PDF打印机就只能截图截图后又不能作为正式凭证。装好CPUS-PDF之后这类问题一分钟解掉。2. 安装前的准备系统、依赖和软件源2.1 确认系统版本和CPU架构动手安装前先确认你的系统版本。这里有个容易踩坑的点UOS和deepin虽然同源但软件仓库的完整程度、包版本都不一样。UOS主要分专业版、个人版、社区版deepin目前主推20.x和23系列。命令查看版本cat /etc/os-release uname -m第一行命令能看到系统名称和版本号比如uos 20或者deepin 23第二行看CPU架构x86_64是Intel/AMD 64位机器aarch64是ARM架构机器常见于国产飞腾、鲲鹏处理器的设备。为什么强调架构因为后面从源码编译时依赖包路径和编译参数会因架构不同而稍有差异。如果用的是UOS ARM版软件源里不一定预编译了cups-pdf编译安装时也可能缺少某些优化指令集。我见过几个人在龙芯LoongArch机器上直接装x86的deb包报错一堆最后还得重新找对应架构的包。2.2 配置软件源和安装依赖UOS和deepin的软件源默认可能指向官方镜像速度不太稳定建议先切换到可用的镜像源。打开终端编辑软件源配置sudo deepin-editor /etc/apt/sources.list如果系统提示没有deepin-editor就换成sudo vim /etc/apt/sources.list在文件里写入国内镜像源地址例如deb https://community-packages.deepin.com/beige/ beige main commercial community不同版本源地址差异较大如果写错源会导致后续apt update报错。最稳妥的做法是保留系统原有源先执行sudo apt update看看能否正常更新。源没问题的话直接安装基础依赖包sudo apt update sudo apt install -y cups ghostscript libcups2-dev libcupsimage2-dev缺少ghostscript或libcups相关库后面无论是安装deb包还是编译源码大概率会在运行时报“系统无法执行过滤文件”的错。这几个依赖看起来不起眼却是整个PDF转换链路里的关键角色CUPS把打印任务交给cups-pdfcups-pdf调用Ghostscript解释PostScript并生成PDF。任何一个环节缺失打印机状态都会变成“已停止”。3. 安装CPUS-PDF的三种方式3.1 方式一通过apt直接安装推荐大多数UOS和deepin版本软件源里已经收录了cups-pdf包这是最省事的安装方式sudo apt update sudo apt install cups-pdf安装完成后先检查CUPS服务是否正常运行sudo systemctl status cups如果服务未运行启动它sudo systemctl enable --now cups正常情况下此时已经可以通过打印设置界面看到一台名为“PDF”的打印机。如果看不到尝试重启CUPS服务sudo systemctl restart cups这种安装方式的优点是包管理工具会自动处理所有依赖卸载也干净。缺点也很明显部分UOS专业版软件源里根本没有cups-pdf这个包或者包版本偏旧这时就得换其他方式。3.2 方式二源码编译安装我的测试机是一台UOS 20专业版默认源里没有cups-pdf后来走的就是源码编译路线。这里把详细步骤写一下关键依赖先装齐sudo apt install -y build-essential cups ghostscript libcups2-dev libcupsimage2-dev下载源码包。官方发布页面地址比较直观用wget下载wget https://www.cups-pdf.de/photorec/cups-pdf_3.0.1.tar.gz tar -xzf cups-pdf_3.0.1.tar.gz cd cups-pdf_3.0.1源码编译分两步先编译再安装make all sudo make install执行完毕后系统会自动把PDF虚拟打印机相关文件放到CUPS的过滤器目录、PPD目录和后台设备目录。接着把CUPS服务重启一次sudo systemctl restart cups注意源码编译方式下如果之前装过其他版本的cups-pdf编译安装前最好先卸载干净否则配置文件可能被覆盖或混用。3.3 方式三手动下载deb包安装如果不想编译又嫌apt源里没包还可以直接从Debian或Ubuntu官方仓库下载对应架构的deb包来安装。比如Debian 11bullseye仓库里有cups-pdf可以在支持的环境下先下载# 在可联网且架构匹配的Debian/Ubuntu机器上操作 apt download cups-pdf把下载好的cups-pdf_*.deb文件拷贝到你的UOS机器上然后安装sudo dpkg -i cups-pdf_*.deb sudo apt-get install -f # 如果有依赖缺失执行这行补装这种方式适合UOS/deepin软件源里没有该包但系统能运行Debian系deb包的场景。不过要特别提醒请从系统源或可信渠道获取deb包不要在网上随意下载来源不明的安装包安全性没保障。我一般只在官方仓库或受信任的Debian镜像站下载。三种方式放在一起对比帮你快速选安装方式适合场景优点缺点apt直接安装软件源内有cups-pdf依赖自动解决卸载干净源里可能没有该包源码编译源里没有或需要最新版可控性强版本新需要编译环境时间久deb包安装能获取到对应架构deb包快速省事不依赖本地编译依赖版本可能不匹配4. 配置CPUS-PDF输出目录、权限和PDF选项4.1 cups-pdf.conf核心参数安装完成后真正决定PDF文件输出到哪、文件权限如何、文件名规则怎样的是配置文件/etc/cups/cups-pdf.conf。我建议每个管理员都亲自看一眼不要贸然使用完全默认配置。sudo vim /etc/cups/cups-pdf.conf这个文件里有很多参数每个参数前面都有详细注释但最核心的几个我单独拿出来解释。第一个是OutDir输出目录。默认值是${HOME}/PDF也就是每个用户打印后文件生成在自己的家目录下的PDF文件夹。如果只有你自己用这个设置没问题。但如果公司有几台电脑员工打印后要去自己家目录找或者需要在共享文件夹里集中收集PDF默认值就不够用。我把这个参数改成这样OutDir /srv/PDF这样所有用户的打印任务都会输出到服务器的/srv/PDF目录方便集中管理。改完后一定要设置好目录属主和权限否则普通用户没权限写入。第二个是AnonDirName匿名用户输出目录默认/var/spool/cups-pdf/ANONYMOUS。当打印请求不是来自已登录系统账号的时候比如通过网络匿名IP打印文件会落到这个目录。这个参数一般不需要动但多用户共享打印机时建议检查一下。第三个是UserUMask和Permission这两个决定生成文件的权限。默认UserUMask 022表示文件权限为644也就是属主可读写其他人只读。如果多个人需要协作编辑这些PDF可以把权限放宽到Permission 0666允许所有用户读写。第四个是TitlePref控制PDF文件名生成方式。值0表示优先使用打印任务自带标题值1表示使用打印文档内嵌标题具体效果和应用程序设置有关。我习惯保持默认遇到文件名乱码时再到这里调整。4.2 输出目录和权限设置上面提到把OutDir改成/srv/PDF这里隐藏着一个新手极容易犯的错目录权限不对打印任务显示“成功完成”但PDF文件却不见了。因为CUPS实际上是以后台用户lp的身份在写文件如果/srv/PDF不属于lp用户或者权限是700写文件就失败了。我用的权限分配方案是sudo mkdir -p /srv/PDF sudo chown nobody:nogroup /srv/PDF sudo chmod 1777 /srv/PDF1777是在普通777权限基础上加了粘贴位和系统/tmp目录权限一致。这样任何用户都能在里面创建文件但只有文件属主能删除自己的文件不会误删别人的PDF多用户环境下很合适。如果你是单机使用把输出目录保持为默认的${HOME}/PDF也完全可以毕竟文件就存在自己家目录不需要纠结权限。4.3 自定义PDF元信息和压缩级别配置里还有两个容易被忽略但对办公场景有用的参数PDFVer和1 -dPDFSETTINGS。虽然这些值大多在PPD文件里定义但cups-pdf.conf里也能看到其影响。Ghostscript生成PDF时可以指定PDF版本比如1.4、1.5、2.0大部分场景不需要专门调整。压缩级别PDFSETTINGS有/screen、/ebook、/printer、/prepress几个选项分别对应低清晰度、一般清晰度、高清晰度和印刷级。如果公司要归档截图类文件压缩太狠文字会模糊如果只是日常存个网页用/ebook就够了。我一般不在配置文件里全局改而是在实际打印时通过应用打印对话框调整。因为全局调的太细致终端用户感知不到反而容易质疑“PDF怎么这么糊”。5. 实际打印测试和使用场景5.1 从办公文档打印成PDF安装和配置都完成之后真正验证效果最好的办法就是拿一份真实文档打印。在UOS自带的WPS Office或LibreOffice里打开一个docx文件按CtrlP呼出打印对话框打印机列表里选择“PDF”也就是刚才安装好的虚拟打印机。点击“属性”可以设置纸张大小、方向、缩放比例。点击“打印”。去/srv/PDF或~/PDF目录查看生成的PDF文件。这时你可能会发现一个现象打印对话框里的打印机名字叫“PDF”而不是“CPUS-PDF”这是正常的。cups-pdf安装后在CUPS中的队列名就是“PDF”。如果系统输出队列名是“Print-to-PDF”那可能是发行版自定义了名称原理一样。5.2 从浏览器和阅读器打印成PDF浏览器打印网页是另外一个高频场景。在Chrome、Firefox或者UOS默认浏览器里按CtrlP然后在目标打印机里选“PDF”最后点“保存”。这种方式得到的PDF包含网页的排版样式超链接也可以保留比“另存为网页”更可靠。具体细节上打印前要检查两点纸张大小和边距。有的网页内容宽默认A4纵向打印时会被截断建议在打印预览里把尺寸改成A4边距选“默认”或者“无”页面缩放选“适合页面”。UOS里部分浏览器还能在“更多设置”里勾选“背景图形”如果打印的是报销单或公告页面这项很关键否则背景色和表格线会全部丢失。PDF阅读器打印也是常用的比如要批量合并多个PDF文档或者给PDF做手写批注后输出成新的PDF。直接用阅读器的打印功能选择PDF打印机系统会把原文件重新排版生成一份新的PDF本质上是对文件做了一次“光栅化再组合”可以顺手把一些复制保护属性去掉仅限你自己有权限的文件。5.3 终端环境下的打印命令对于习惯命令行的用户打印测试不必依赖图形界面可以用lp命令直接往虚拟打印机发任务echo Hello PDF | lp -d PDF或者指定打印某个文件的路径lp -d PDF -o mediaA4 /tmp/test.txt-o mediaA4指定纸张类型其他常用选项还有lp -d PDF -o orientation-requested3 /tmp/sample.txt # 3代表逆时针旋转90度 lp -d PDF -o number-up2 /tmp/book.txt # 每页放2页内容节省纸张命令执行后终端会返回打印任务编号比如request id is PDF-18 (1 file(s))然后去输出目录看有没有对应的PDF生成。lpstat -t能查看打印机的完整状态CUPS服务异常时这个命令能很快定位问题。6. 常见问题与排查技巧6.1 打印机列表中看不到PDF打印机这是最常遇到的问题。明明已经装了cups-pdf打印对话框里却找不到“PDF”打印机。首先检查CUPS服务状态sudo systemctl status cups如果服务未运行启动并设为开机自启sudo systemctl enable --now cups其次检查CUPS是否识别到PDF队列lpstat -p -d正常情况下会输出类似printer PDF is idle. enabled since ...如果输出里没有PDF打印机有几种可能安装过程不完整、系统在安装前已经处于异常状态。重新执行安装命令或者重启机器很多问题在重启后才自动恢复。还有一个细节UOS桌面版可能存在“打印设置”图形界面显示异常但底层CUPS里打印机是正常的。这时优先看命令行结果不要只看图形界面。6.2 打印后没有生成PDF文件打印任务显示“成功完成”但输出目录里文件不存在这是最让人抓狂的。排查思路从权限和日志入手。第一步确认输出目录真的存在。如果你想自定义OutDir但没创建目录或者目录权限不对CUPS写文件就会失败。执行ls -ld /srv/PDF第二步查看cups-pdf日志默认日志路径是/var/log/cups/cups-pdf_logsudo cat /var/log/cups/cups-pdf_log日志里会明确记录文件生成了没有、写到哪去了、失败原因是什么。常见错误是Permission denied说明目录权限设置不当另一种是No such file or directory说明目录不存在。第三类比较隐蔽输出目录存在但用户是systemd通过服务调用实际写文件时用的是CUPS后台用户lp不是你自己。用ls -ld确认目录对lp用户或者other有写权限具体权限方案前面已经演示过。6.3 文件权限、中文文件名乱码问题中文环境下PDF文件名乱码是个高频问题。比如打印“项目验收报告.docx”生成的文件名变成了一串乱码或/tmp/xxx.pdf。原因有两种一是打印任务自带的标题编码不是UTF-8二是Ghostscript在解析过程中把标题信息转成了奇怪的格式。最简单的处理办法是改配置把标题生成方式设置成自动TitlePref 0如果不行再设置成使用原始标题以外的自动生成模式TitlePref 1改完之后重启CUPS服务再测试。这个方法我在deepin 20上实测对LibreOffice的文档有效但WPS有时仍会乱码那种情况直接手动重命名文件就好。文件权限问题也很常见。默认生成的文件是644权限其他用户只能读但不能改。如果公司需要让多个同事在PDF上做批注就要把权限放宽到666Permission 0666改配置文件后重启CUPSsudo systemctl restart cups6.4 如何卸载和重装遇到安装混乱、永久性问题干脆卸载重装。如果当初是用apt安装的卸载很干净sudo apt remove --purge cups-pdf sudo apt autoremove如果当初是源码编译安装需要手动清除文件。去/usr/lib/cups/backend/下删除pdf相关文件去/usr/share/cups/model/下删除cups-pdf的PPD文件再删除配置文件sudo rm /usr/lib/cups/backend/pdf sudo rm /usr/share/cups/model/cups-pdf.ppd sudo rm /etc/cups/cups-pdf.conf最后重启CUPS服务确认系统里已经看不到PDF打印机然后再重新安装。这里我列一个速查表方便你在排查时直接对照现象可能原因排查方式解决方向看不到PDF打印机CUPS未启动systemctl status cups启动并设置开机自启看不到PDF打印机包没装上lpstat -p -d重新安装打印成功但没文件输出目录权限不对ls -ld /srv/PDFchmod 1777 输出目录打印成功但没文件日志文件不生成查看cups-pdf_log按日志定位失败原因中文文件名乱码标题编码问题改TitlePref设为0或1生成的文件无法编辑文件权限太低查看Permission设为06667. 踩坑经验与进阶玩法7.1 让PDF输出到共享目录前面我建议把OutDir设置为/srv/PDF这其实已经为团队共享打好了基础。把整个目录通过Samba或NFS共享给局域网用户所有员工打印出来的PDF文件就能自动集中到一台服务器再配合定时清理脚本归档很方便。实际部署时注意一点如果共享目录在Windows客户端挂载NTFS或者FAT文件系统对文件名的字符集要求比较严格中文文件名在Windows下可能显示成乱码。最稳妥的方案是输出目录放在Linux分区再通过Samba共享不要直接把输出目录设置到Windows挂载点上。7.2 结合cups-browsed实现局域网共享多台UOS机器想共用一台装了CPUS-PDF的打印机不需要每台都装一次cups-pdf。在装有虚拟打印机的服务器上CUPS本身就能通过IPP协议共享打印机客户端直接添加网络打印机即可。服务端确认共享设置sudo cupsctl --share-printers sudo cupsctl --remote-any客户端打开打印设置选择“添加打印机”输入服务端IP地址例如ipp://192.168.1.100:631/printers/PDF系统会拉取服务端的认证和驱动信息然后就可以直接使用。这个方案在公司办公环境里尤其有用一台电脑配置好整个部门都能用。7.3 与办公系统、云打印的配合很多国产信息化项目里业务系统跑在Web上用户在浏览器里点“打印”系统调用的是本地默认打印机。装好CPUS-PDF后可以把系统默认打印机设为PDF打印机这样所有打印操作都直接落成电子版再从/srv/PDF里做二次分发。实测过一些业务系统流程能正常走通。还要提醒一句UOS环境下打印PDF时会调用系统Ghostscript字体渲染如果某些PDF里的字符乱码通常是系统缺少相应字体导致的装一下系统字体库比如fonts-noto-cjk能解决大部分显示问题sudo apt install fonts-noto-cjk写在最后这次把CPUS-PDFcups-pdf在UOS和deepin上的整套玩法梳理了一遍从安装到配置再到排错应该都覆盖到了。我在实际使用中最大的体会是工具本身不难反而是系统差异和文件权限这类环境问题更费时间。如果你手头的UOS版本源里直接能装cups-pdf那就少了很多折腾如果装不上源码编译也不是什么困难的事按步骤来就行。最后再分享一个小技巧装好后建议立刻打印一张测试页并检查输出文件名和权限别等要用的时候才发现PDF根本生成不出来。这个工具配置一次就能常年服务于日常归档值得你花十几分钟彻底搞定。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询