
我有一個 shell 腳本,它採用 PDF 文件作為參數,並使用其他印表機特定選項來列印它。如何將此腳本新增為可從 GUI 中選擇的虛擬印表機?
shell 腳本是一個手動雙面腳本,它會取得 PDF 文件,列印偶數頁,使用 zenity 向使用者提供提示,要求使用者翻轉頁面,然後列印奇數頁。
我目前的工作流程是:
- 文件 -> 列印 -> 儲存到文件 -> tmp.pdf
my_duplex_script tmp.pdf
rm tmp.pdf
有什麼辦法可以讓它成為:
- 檔案 -> 列印 -> my_script_as_virtual_printer
注意:這是在 Linux mint 13 cinnamon 上進行的。我已經嘗試過gnome-manual-duplex
,但它對我不起作用。
我可以從中列印到 PDF 文件的 GUI 對話框
my_duplex_script
#!/bin/bash
lp_args=
while getopts o: opt
do
case "$opt" in
o) lp_args="$lp_args -o $OPTARG" ;;
\?) echo >&2 Invalid argument; exit 1 ;;
esac
done
shift `expr $OPTIND - 1`
file=$1
page_count=$(pdfinfo "$file" | grep Pages | awk '{print $2}')
is_odd=`expr $page_count % 2`
if [ $is_odd -eq 1 ]
then
#outputting blank
echo | lp -s -t "$file"-blank
fi
#printing even reversed
lp -s -o page-set=even -o outputorder=reverse $lp_args -t "$file"-even "$file"
if zenity --question --text="Flip and reinsert the entire stack when printing has finished." --ok-label="Proceed" --cancel-label="Cancel"
then
#printing odd reversed
lp -s -o page-set=odd -o outputorder=reverse $lp_args -t "$file"-odd "$file"
else
echo >&2 User abort
exit 1
fi
exit 0
答案1
我從來沒有嘗試過這個,但有一個工具叫做tea4cups
聽起來您可以在腳本中實作一個 prehook 來進行列印。然後,您可以取消此列印,而不是透過杯子實際轉到真正的印表機,而是允許您的腳本進行列印。
摘抄
可能性是無止境 :
- 同時將相同作業傳送到多台印表機,而這對 CUPS 來說是不可能的。
- 自動對所有列印作業進行 PDF 歸檔。
- 禁止重複的列印作業(範例設定檔中顯示了一個簡單的範例)
- 在 15 分鐘內建立列印會計解決方案(是的,這是真的)
- ETC...
Tea4cups 提供以下便利:
Tea4CUPS 提供了三種啟動指令的方式:
- 過濾器:過濾器可以在將輸入資料傳送到印表機或供下面定義的前掛鉤和後掛鉤使用之前修改輸入資料。目前,每個列印佇列可以定義一個過濾器。
- prehooks :這些保證在列印作業傳送到真實印表機之前啟動。任何退出 -1 的 prehook 都可以取消列印作業。可以為特定的列印佇列定義任意數量的預掛鉤。
- posthooks :這些保證在列印作業傳送到真實印表機後啟動,除非作業之前被 prehook 取消。可以為特定的列印佇列定義任意數量的 posthook。
答案2
如何將此腳本新增為可從 GUI 中選擇的虛擬印表機?
要新增虛擬印表機,只需編輯您的/etc/printcap
.這不是很容易,因為語法 列印帽需要習慣。
這裡顯示瞭如何執行此操作的範例使用 Samba 的 PDF 服務:
# /etc/printcap
# PDF Service entry
lp|pdf|PDF Printer:\
:lp=/dev/null:sh:\
:sd=/var/spool/lpd/pdf:\
:af=/var/spool/lpd/pdf/acct:\
:mx#0:sh:\
:if=/usr/bin/smbprint:
這裡/usr/bin/smbprint
腳本用作列印過濾器。印表機本身是/dev/null
.
也許您需要安裝cups-bsd
,但它通常是預設配置。
答案3
聚會遲到了,但我想做同樣的事情,但沒有找到任何其他解決方案。
我將在這裡寫下我是如何解決它的,也許其他人會發現解決方案有用。
- 製作了一個杯子過濾器來捕獲要列印的文件
- 做了一個後端來列印文件
- 製作了一個漂亮且簡單的安裝程式。
原始碼在github上: https://github.com/dentys03/manual_duplex_linux
它應該適用於任何 HP 印表機。我想很容易適應其他印表機。