首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

使用 lpadmin 構建多內容格式打印服務器:從雙重緩衝到 Perl 過濾器的演進實戰

     編輯:Java 相關知識

面對文本、PostScript、PCL/RTL 三種格式混合打印需求,標準 lpadmin 單隊列無法同時完美支援。本文記錄從嘗試失敗、雙重緩衝、Perl 智能過濾、日誌追蹤到臨時文件清理的完整演進路徑,最終構建零成本、集中管理、可追蹤的企業級打印服務。

環境與挑戰

  • 設備:HP 繪圖儀/噴墨/雷射印表機 30+,JetDirect/XCD 網卡,LPD/TCP-IP。
  • 客戶端:200+ Solaris 工作站/伺服器 + 1 台 WinFrame NT Server。
  • 痛點:大型二進制垃圾作業浪費紙張、無法追溯來源、標題頁被拒、手工腳本掃描極慢。

演進時間軸

階段 1:標準 lpadmin 單隊列嘗試(全敗)

設置-T 類型-I 內容結果
PS onlyPSPostScript文本樓梯效應
AnyunknownanyPS/二進制變垃圾
Text+PSPStextPCL/RTL 變垃圾
多 -I 組合unknown/PSPostScript,text,simple 等文本樓梯或二進制損壞

lpadmin 不允許 unknown 與其他 -T 共存,單隊列無解。

階段 2:雙重緩衝 + unix2dos(半成功)

  1. 過濾隊列 no1316p:model=standard,介面腳本插入 FILTER=/bin/unix2dos \| lp -s -d no1316p-r。
  2. 網絡隊列 no1316p-r:model=netstandard,默認 unknown/any。
  3. 缺陷:unix2dos 破壞二進制文件(PCL/RTL 列印品質極差)。

階段 3:JetAdmin(功能全但硬體綁定)

HP JetAdmin 完美支援三格式並提供管理介面,但無法替換 XCD 網卡,方案被否決。

階段 4:Perl 智能過濾器(突破)

#!/opt/bin/perl
open(FOO, "-");  # stdin
open(OUT, ">/var/spool/lp/save_dir/tmp/$ARGV[0].$$");  # 臨時文件含 request_id
if (-B FOO) { while () { print OUT $_; } }  # 二進制直通
else { while () { s/\n/\r\n/; print OUT; } }  # 文本 unix2dos
close(FOO); close(OUT);
system("/bin/lp -s -d $ARGV[1] /var/spool/lp/save_dir/tmp/$ARGV[0].$$");
  • 接口腳本調用:FILTER="/var/spool/lp/save_dir/sbin/lp.pl ${request_id} no1316p-r"。
  • 臨時文件名攜帶 ${request_id},網絡隊列 lpq 可見原始請求 ID。

階段 5:日誌追蹤與 lpq 增強

  • 接口腳本記錄 ${request_id} ${user_name} ${files/flist} 至 request.log。
  • 封裝 lpq.ksh 解析網絡隊列 lpq 輸出,關聯日誌還原 原始擁有者、文件名,輸出標準 Rank Owner Job File(s) Size 格式。

階段 6:臨時文件自動清理

#!/bin/ksh
cd /var/spool/lp/save_dir/tmp
for i in no*; do
  grep "^T $i" /var/spool/lp/logs/requests >/dev/null 2>&1 && rm -f $i
done

Cron 每小時執行,利用 requests.log 中 T filename 標記判斷作業完成。

最終成果驗證

  • ✅ 單一打印機名支援文本/PS/PCL/RTL 四格式完美列印
  • ✅ 集中緩衝,管理單一入口
  • ✅ 全流程可追蹤:lpq.ksh 還原真實用戶與文件
  • ✅ 零額外採購成本,純系統工具 + Perl 腳本實現
  • ✅ 方案可移植至 Solaris 2.6 標準打印子系統

💡 現代替代:CUPS (Common UNIX Printing System) 內建 MIME 類型自動識別與過濾器鏈,支援 IPP/HTTP、集群、ACL、Web 管理介面,建議新環境直接部署 CUPS。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved