「後で印刷」ソフトウェア

「後で印刷」ソフトウェア

ノートパソコンで作業しているときに、プリンターに接続していない場合は、後で印刷するためにいくつかのドキュメントをキューに入れておきたいことがあります。

しかし、実際のプリンタ キューはこれを目的として設計されていません。プリンタ キューはすぐにドキュメントの印刷を試み、ネットワークに接続するとすぐにすべての印刷が突然開始されますが、これは通常、私が望む動作ではありません。さらに、キュー内のドキュメントの順序を変更したい場合もありますが、これは、一部のドキュメントが印刷を開始した後では特に簡単ではありません。

また、たとえばプリンターの用紙やトナーが切れたために印刷が失敗し、別のプリンターで文書を再印刷しなければならない場合もあります。これは、 や では簡単ではありません。CUPS通常system-config-printerは、戻って PDF リーダーを再度開き、最初からやり直す必要があります。私が知っている PDF リーダーでは、後で印刷する文書のリストを保存することはできませんが、これは私が知らない PDF リーダーのどこかに隠された機能なのかもしれません。

とにかく、私が実現したいことは次のとおりです。

  • 印刷したい PDF のリストを指定します。
  • リスト全体を失わずにアプリケーションを閉じたり再起動したりできるように、そのリストをディスクに保存します。
  • 実際にそのプリンターに接続しなくても、送信先のプリンターを事前に指定します。
  • カラー、両面印刷、コピー枚数などの印刷オプションを指定します。
  • プリンターの割り当てと印刷オプションは後で変更します。
  • 実際にドキュメントを印刷するには、ボタンを押すかコマンドを実行するまで待機します。
  • 印刷がうまくいかなかった場合や、後で再印刷したい場合に備えて、すでに印刷された文書のリストを別途保存します。

シェル スクリプト、、およびテキスト ファイル内のパスのリストを使用して何かをハックできることはわかっていますlprが、この問題はより堅牢でエレガントな方法ですでに解決されているような気がしてなりません。

ボーナスポイント:

  • ドキュメントを PDF リーダーで開く必要はありません。ドキュメントは閲覧するのではなく印刷したいので、同じアプリケーションである必要はありません。
  • 複数のリスト。
  • Postscript、DjVu、その他のページ記述形式にも対応しています。
  • ファイルマネージャーからドラッグアンドドロップします。

助言がありますか?

答え1

私がやっていることは次のとおりです --- 要求されたほど多機能ではありませんが、ほぼ問題なく動作します。すべてのプリンターを定義し、次の 2 つのスクリプトが必要です。

  1. stop_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsdisable "$i"
        echo " " paused.
    done
    
  2. start_printers:

    #!/bin/bash -f
    #
    allp=(`cat /etc/printcap | tr "|" "\t" | cut -f 1 | grep -v "#"`)
    for i in ${allp[@]}; do 
        echo -n Printer $i:
        cupsenable "$i"
        echo " " restarted.
    done
    

これらをパス (例~/bin) に配置し、 を使用して実行可能にする必要がありますchmod +x警告: 名前にスペースが含まれるプリンターはありません。その場合、スクリプトはテストされていません (ただし、シェル スクリプトの達人の 1 人がスクリプトをすぐに修正してくれると確信しています ;-)...)

これで、次のものを発行できます。

[romano:~] % stop_printers
Printer PDF:  paused.
Printer ColorDEA:  paused.
Printer Deskjet_6980:  paused.
Printer fotocop5:  paused.

どこからでも印刷できますが、プリンターは一時停止されます。

evince のプリンター

キューは次のように表示されます:

[romano:~] % lpq -PDeskjet_6980
Deskjet_6980 is not ready
Rank    Owner   Job     File(s)                         Total Size
1st     romano  439     Bones_3+RG.pdf — Flesh depth  125952 bytes

(私の知る限り、印刷キューは再起動後も保持されます)。印刷する場合は、次の操作を行います。

[romano:~] % start_printers         
Printer PDF:  restarted.
Printer ColorDEA:  restarted.
Printer Deskjet_6980:  restarted.
Printer fotocop5:  restarted.

lprm必要に応じてジョブを削除したり、コマンドlprライン経由でドキュメントをキューに登録したり、異なる「リスト」が必要な場合でも、同じプリンターを異なる名前で複数回定義することを禁止する人はいません。

cupsenable <printername>各プリンターを手動で再開することもできます。プロンプトから 実行するだけです。

このソリューションでは、事後に印刷オプションを変更することはできないと思います。そのためには、ドキュメントをキューから削除して再度キューに追加する必要があります。

答え2

私のパッケージ(恥ずかしげもなく宣伝します)、デュプレックスあなたが望むことのいくつかを実行でき、独自のバージョンを作成するのに役立つ可能性のある bash 関数が含まれています。(bash でコード化されているため、変更は比較的簡単なはずです。私ができることがあればお手伝いします。)

これは、両面印刷非対応プリンターでの両面印刷をエミュレートするように設計されており、独自のシンプルな印刷キュー管理を実装しています。GUI と CLI の両方のインターフェイスがあります。

現在のバージョンは両面印刷のみに対応しており、両面印刷非対応のプリンターでのみ動作しますが、両面印刷ハードウェアを備えたプリンターを処理する新しいバージョンが開発中です。これは基本的に、両面印刷エミュレーション ソフトウェアなしでプリンターとキューの管理だけを行うものです。(プロジェクトなどを通じて直接私に連絡したい方のために、すでに動作しているスクリプトのアルファ バージョンを用意しています。)

システムは現在のデフォルト プリンタに印刷しますが、dplx および duplex スクリプトは lp に渡される追加の引数を受け入れ、プリンタやその他のプロパティなど lp が理解できるオプションを設定するために使用できます。

システムは現在、PDF、PostScript、プレーンテキスト ファイルを処理します。

それはないファイルに印刷オプションを使用して作成されたファイルを印刷します内でAcroread。これらのファイルは lp では動作しません。また、上流の開発者の誰からも問題の原因を突き止める手助けを得ることができませんでした。

個人的には、プリンターが使用可能な場合でも、ほとんどすべてを「オフライン」で印刷します (ほとんどのアプリケーションがサポートする [ファイルに印刷] オプションを使用)。これにより、作業に集中できます。その後、適切なブレーク ポイントに到達したら、ジョブのバッチを印刷します。

印刷キューがあると、再生成せずに別のコピーを印刷したい場合にも非常に便利です。また、紙詰まりやトナー切れなどのプリンター エラーに対処するためにも不可欠です。

答え3

この問題の完全な解決策はないようですが、私が追加した関数は.bashrc次のようなものです。ルマノの答え上記に加え、オートコンプリートの利便性も加わりました。

all-printers() {
    if [ "$*" = "" ]
    then
        # Print usage."
        printf "Usage:\n"
        printf "all-printers start\n"
        printf "all-printers stop\n"
        return 1
    elif ! [ "$1" = "stop" -o "$1" = "start" ]
    then
        printf "Unrecognized command: $1\n"
        return 1
    fi

    cut -f 1 -d '|' /etc/printcap |
    grep -v '^#' |
    while read printer_name
    do 
        if [ "$1" = "stop" ]
        then
            cupsdisable "$printer_name"
            printf "$printer_name stopped.\n"
        elif [ "$1" = "start" ]
        then
            cupsenable "$printer_name"
            printf "$printer_name started.\n"
        fi
    done
}
complete -W 'stop start' all-printers

関連情報