PDFファイルを引数として取り、追加のプリンター固有のオプションを使用して印刷するシェルスクリプトがあります。このスクリプトを、GUIから選択できる仮想プリンターとして追加するにはどうすればよいですか?
シェルスクリプトは、PDFファイルを受け取り、偶数ページを印刷し、ユーザーにページをめくるように求めるzenityを使用してプロンプトを表示し、奇数ページを印刷する手動の両面スクリプトです。
私の現在のワークフローは次のとおりです。
my_duplex_script tmp.pdf
rm tmp.pdf
それを次のようにする方法はありますか?
注:これはLinux mint13シナモンにあります。私が試してみました 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
私はこれを試したことがありませんが、 tea4cups
これは、印刷を行うスクリプトに事前フックを実装できるように思えます。その後、この印刷をキャンセルして、実際にはcupsを介して実際のプリンターに移動せず、スクリプトが代わりに印刷を実行できるようにすることができます。
抜粋
可能性は無限大 :
- 同じジョブを複数のプリンターに同時に送信します。これはCUPSでは不可能です。
- PDFすべての印刷ジョブのアーカイブを自動化します。
- 重複する印刷ジョブを禁止します(簡単な例をサンプル構成ファイルに示します)
- 15分で印刷会計ソリューションを作成します(はい、これIS FOR REAL)
- 等...
Tea4cupsは、次の機能を提供します。
Tea4CUPSは、コマンドを起動する3つの方法を提供します。
- フィルタ:フィルタは、入力データをプリンタに送信する前、または以下に定義するプリフックとポストフックで使用できるようにする前に変更できます。現在、印刷キューごとに1つのフィルターを定義できます。
- プリフック:これらは、印刷ジョブが実際のプリンターに送信される前に起動されることが保証されています。 -1で終了するプレフックは、印刷ジョブをキャンセルできます。特定の印刷キューに対して任意の数の事前フックを定義できます。
- ポストフック:ジョブがプリフックによって以前にキャンセルされていない限り、これらは印刷ジョブが実際のプリンターに送信された後に起動されることが保証されています。特定の印刷キューに対して、任意の数のポストフックを定義できます。
このスクリプトをGUIから選択できる仮想プリンターとして追加するにはどうすればよいですか?
仮想プリンターを広告するには、/etc/printcap
を編集するだけです。 [〜#〜] 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
をインストールする必要がありますが、多くの場合、デフォルトの構成です。
パーティーに遅れましたが、同じことをしたかったので、他の解決策は見つかりませんでした。
私がそれをどのように解決したかをここに書きます、多分他の人が解決策が役立つと思うでしょう。
ソースコードはgithubにあります: https://github.com/dentys03/manual_duplex_linux
すべてのHPプリンターで動作するはずです。他のプリンターにも簡単に適応できると思います。