如何连接 CUPS 以通过 9100 的 TCP/IP 接受打印作业并传递到 pdf-cups?

如何连接 CUPS 以通过 9100 的 TCP/IP 接受打印作业并传递到 pdf-cups?
  • 操作系统 FreeBSD-12.1
  • CUPS-2.3.3

我的目标是让 CUPS 监听 9100 或任何任意 IP 地址和 TCP 端口上的 TCP/IP 连接,并将传入的 RAW 假脱机文件传递给过滤器cups-pdf。之后,cron作业或侦听器进程将生成的文件传输到 WebDAV 资源以供访问。

我希望完全在 CUPS 中完成 pdf 转换任务。我查看了netcatsocat,这些可能是我最终的选择。但如果使用 CUPS 完成此任务是可能的,那么我想确切地知道如何配置 CUPS 服务以监听特定的 IP 地址和端口;以及如何将到达该 TCP 套接字的内容路由到特定的打印机。

这可能吗?如果可以,如何实现?

答案1

我无法使用 CUPS 解决这个特定问题。我最终使用了socat和的组合gpcl6

export HPNP=4179 ; socat TCP4-LISTEN:4179,bind=192.168.216.179,fork,reuseaddr,su=hp3000 SYSTEM:'gpcl6 -dNOSAFE -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=/var/spool/hp3000/np${HPNP}/HP3000-RPT-$(date -Iseconds).pdf -' &

socat获取连接并gpcl6通过 stdin ( - ) 将其传递给。gpcl6使用pdfwrite打印机处理输出文件。pdf 输出文件以源标签(外部)加上动态时间戳命名。

在旧主机上定义一个网络打印机,将其缓冲到 192.168.216.179:9100。将要转换为 pdf 的缓冲文件发送到该打印机。

每个打印作业都会创建自己的 pdf。时间戳可防止文件名冲突。需要 gpcl6 -dNOSAFE 选项才能允许 gpcl6 写入文件。

我进一步扩展了此功能,以提供 PCL3 表单叠加和每个假脱机文件的多个 pdf。例如:

export HPNP=4178 ; socat TCP4-LISTEN:4178,bind=192.168.216.179,fork,reuseaddr,su=hp3000 SYSTEM:'sed -r "1s/^.{42}//" | cat /var/spool/hp3000/forms/hll_inv_ljiii_85.ovl - | gpcl6 -dNOSAFE -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=/var/spool/hp3000/np${HPNP}/HP3000-INV-$(date -Iseconds)-%03u.pdf -' &

在此示例中,PCL3 覆盖文件由 拾取,cat它将该文件添加到假脱机数据流的前面,并将其传递给gpcl6-sOutputFile的选项gpcl6包含printf格式字符串 (%03u) 触发gpcl6将传入的假脱机文件拆分为单独的 pdf 文件,每次分页时都会拆分。根据假脱机文件的不同,除了实际文档外,还可能创建一两个工件、一张空白页或覆盖表单的空白副本。

sed命令删除了生成主机创建的前导 PCL 命令,

相关内容