Linux系统上同时打印到物理打印机并生成PDF副本方法研究

Linux 系统上,想要同时打印到物理打印机并生成 PDF 副本 ,可以使用 CUPS(通用 Unix 打印系统)虚拟 PDF 打印机 结合的方式。以下是几种可行的方案:


方法 1:使用 CUPS 设置多个打印机(物理+PDF)

CUPS(Common Unix Printing System)是 Linux 默认的打印服务,支持同时向多个打印机发送任务。

步骤

  1. 安装 CUPS(如果未安装)

    在大多数 Linux 发行版上,CUPS 默认已安装。如果没有,可以用以下命令安装:

    复制代码
    sudo apt update && sudo apt install cups cups-pdf 

    或(RedHat 系):

    复制代码
    sudo yum install cups cups-pdf 
  2. 启用 CUPS 并设置开机启动

    复制代码
    sudo systemctl enable cups sudo systemctl start cups 
  3. 添加虚拟 PDF 打印机

    复制代码
    lpadmin -p PDFPrinter -E -v cups-pdf:/ -m generic.ppd 
  4. 添加物理打印机 (假设打印机名为 HP_LaserJet):

    复制代码
    lpadmin -p HP_LaserJet -E -v ipp://192.168.1.100/ipp -m everywhere 
  5. 创建 CUPS 打印类

    • CUPS 支持打印类(Printer Class),它允许一个打印任务被同时发送到多个打印机。

      lpadmin -p MultiPrint -E -o printer-is-shared=true -v cups-pdf:/ -v ipp://192.168.1.100/ipp

  6. 设置默认打印机为"MultiPrint"

    复制代码
    lpoptions -d MultiPrint 
  7. 打印测试

    复制代码
    lp /path/to/testfile.pdf 

效果

  • 文档会被同时发送到HP_LaserJet 物理打印机PDF 虚拟打印机
  • 生成的 PDF 默认存放在 /var/spool/cups-pdf/USERNAME/ 目录下。

方法 2:使用 lpr 命令同时打印

你可以使用 lpr 命令同时将文件发送到多个打印机:

复制代码
lpr -P HP_LaserJet file.pdf 
lpr -P PDFPrinter file.pdf 

可以把它写入 Shell 脚本,使其自动执行:

复制代码
#!/bin/bash 
FILE="/path/to/document.pdf" 
lpr -P HP_LaserJet "$FILE" 
lpr -P PDFPrinter "$FILE" 

然后赋予执行权限并运行:

复制代码
chmod +x print_to_multiple.sh 
./print_to_multiple.sh 

适用场景

  • 适用于需要批量打印并生成 PDF 副本的情况。

方法 3:使用 CUPS-PDF + lp 命令

CUPS 提供了一个 CUPS-PDF 过滤器,可以自动生成 PDF 文件并打印。

  1. 安装 CUPS-PDF

    复制代码
    sudo apt install cups-pdf 
  2. 启动 CUPS 服务

    复制代码
    sudo systemctl start cups 
  3. 检查是否已添加 CUPS-PDF

    复制代码
    lpstat -p 

    如果 CUPS-PDF 不存在,可以手动添加:

    复制代码
    lpadmin -p PDFPrinter -E -v cups-pdf:/ -m generic.ppd 
  4. 同时打印到多个目标

    复制代码
    lp -d HP_LaserJet /path/to/document.pdf 
    lp -d PDFPrinter /path/to/document.pdf 

默认 PDF 存放路径

  • Ubuntu/Debian: ~/PDF/
  • RedHat 系: /var/spool/cups-pdf/$USER/

方法 4:使用 pdftopdf + lp 自动备份

如果你已经有 PDF 文件,并且希望在打印时自动生成副本,可以手动复制文件:

复制代码
FILE="/path/to/document.pdf" 
cp "$FILE" "/path/to/backup/" 
lp -d HP_LaserJet "$FILE" 

适用场景

  • 适用于简单备份,无需虚拟打印机。

方法 5:使用 systemd 监视 /var/spool/cups 自动备份

如果你的打印机自动将任务缓存到 /var/spool/cups,可以用 systemd 监听文件夹并自动备份 PDF:

  1. 创建 systemd 监听脚本

    复制代码
    sudo nano /etc/systemd/system/printbackup.service 
  2. 写入以下内容

    复制代码
    [Unit] 
    Description=Monitor CUPS Print Queue and Save Copies 
    After=cups.service 
    
    [Service] 
    ExecStart=/bin/bash -c 'cp /var/spool/cups/d* /path/to/backup/' 
    Restart=always 
    
    [Install] 
    WantedBy=multi-user.target 
  3. 启用并启动服务

    复制代码
    sudo systemctl enable printbackup 
    sudo systemctl start printbackup 

效果

  • 每当有打印任务时,/var/spool/cups 目录中的打印任务会被复制到 /path/to/backup/,作为 PDF 副本保存。

总结

方法 适用情况 自动化程度
CUPS 打印类 多台打印机(包括 PDF) ✅ 完全自动
lpr 手动打印 适用于小型任务 ❌ 需手动
CUPS-PDF + lp 适用于有 PDF 需求的用户 ✅ 自动化
手动复制 PDF 适用于文件备份 ❌ 需手动
systemd 监控打印队列 适用于后台自动备份 ✅ 完全自动

如果你希望完全自动化,推荐:

  1. 使用 CUPS 打印类(方法 1)
  2. 使用 systemd 自动监听(方法 5)

如果只是偶尔打印,可以用:

  • lpr 命令手动打印(方法 2)
  • CUPS-PDF 生成 PDF(方法 3)
相关推荐
崔庆才丨静觅44 分钟前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60612 小时前
完成前端时间处理的另一块版图
前端·github·web components
掘了2 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅2 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
崔庆才丨静觅2 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
盟接之桥2 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
崔庆才丨静觅2 小时前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment3 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅3 小时前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端