シェルスクリプトを仮想プリンタとして使用する

シェルスクリプトを仮想プリンタとして使用する

PDF ファイルを引数として受け取り、追加のプリンタ固有のオプションを使用して印刷するシェル スクリプトがあります。このスクリプトを GUI から選択できる仮想プリンタとして追加するにはどうすればよいですか?

このシェル スクリプトは、PDF ファイルを受け取り、偶数ページを印刷し、zenity を使用してユーザーにページをめくるよう求めるプロンプトを表示してから、奇数ページを印刷する手動の両面印刷スクリプトです。

私の現在のワークフローは次のとおりです。

  1. ファイル -> 印刷 -> ファイルに保存 -> tmp.pdf
  2. my_duplex_script tmp.pdf
  3. rm tmp.pdf

次のようにする方法はありますか?

  1. ファイル -> 印刷 -> my_script_as_virtual_printer

注: これは Linux Mint 13 Cinnamon 上で実行されています。試してみましたgnome-manual-duplexが、うまくいきませんでした。


PDFファイルに印刷できるGUIダイアログ 標準GTK印刷ダイアログ

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 経由で実際のプリンターに実際に送信せずに、代わりにスクリプトで印刷を実行できるようになります。

抜粋

可能性は無限大 :

  • 同じジョブを複数のプリンターに同時に送信します。これは CUPS では不可能です。
  • すべての印刷ジョブの PDF アーカイブを自動化します。
  • 重複した印刷ジョブを禁止する(簡単な例はサンプル設定ファイルに示されています)
  • 15 分で印刷会計ソリューションを作成します (はい、これは本当です)
  • 等...

Tea4cups は次のサービスを提供します:

Tea4CUPS はコマンドを起動する 3 つの方法を提供します。

  • フィルター: フィルターは、入力データがプリンターに送信される前、または以下に定義される事前フックと事後フックで使用できるようになる前に、入力データを変更できます。現在、印刷キューごとに 1 つのフィルターを定義できます。
  • プリフック: これらは、印刷ジョブが実際のプリンタに送信される前に起動されることが保証されています。終了値が -1 のプリフックは、印刷ジョブをキャンセルできます。特定の印刷キューには、任意の数のプリフックを定義できます。
  • posthooks: ジョブが以前に prehook によってキャンセルされていない限り、印刷ジョブが実際のプリンタに送信された後に起動されることが保証されます。特定の印刷キューに対して任意の数の posthooks を定義できます。

答え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 プリンターでも動作するはずです。他のプリンターにも簡単に適応できると思います。

関連情報