- 操作系统 FreeBSD-12.1
- CUPS-2.3.3
我的目标是让 CUPS 监听 9100 或任何任意 IP 地址和 TCP 端口上的 TCP/IP 连接,并将传入的 RAW 假脱机文件传递给过滤器cups-pdf
。之后,cron
作业或侦听器进程将生成的文件传输到 WebDAV 资源以供访问。
我希望完全在 CUPS 中完成 pdf 转换任务。我查看了netcat
和socat
,这些可能是我最终的选择。但如果使用 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 命令,