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


12

時々ラップトップで作業しているときに、後でプリンタに接続していないので、後で印刷するためにいくつかのドキュメントをキューに入れたいことがあります。

ただし、実際のプリンターキューはこのために設計されていません。彼らはすぐにドキュメントを印刷しようとしますが、私がネットワークに接続するとすぐにすべてが突然印刷を開始しますが、これは通常私がやりたいことではありません。さらに、キュー内のドキュメントの順序を変更したいことがありますが、これは特に簡単ではありません。特に、ドキュメントの一部が印刷を開始した後です。

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

とにかく、ここで私ができることをしたいです:

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

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

ボーナスポイント:

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

助言がありますか?


あなたが十分な評判を持っている場合、賞金を開始します;)
AB

私が見る限り、これはによって現在実装されているように、プリンタキューの簡単な変更のみを必要としcupsます。目的のプリンタキューに印刷するだけですが、プリンタジョブを「リリース」するまで「保留」にします。「保留」ボタンだけが必要です。それとも何かが恋しいですか?
ジョス

@Josの私のバージョンでsystem-config-printer-appletは、印刷ジョブを保持およびリリースしたり、他のプリンターに移動したりできますが、ジョブの送信後に印刷ジョブの順序を変更したり、印刷オプションを変更したりすることはできません。また、その時点までに、元のドキュメントへのパスはなくなっています。
ナサニエルM.ビーバー

@AB残念なことに、賞金には75インターネットポイントが必要であり、私は53ポインターです。
ナサニエルM.ビーバー

回答:


10

私がしていることは次のとおりです---それはあなたが尋ねたほど汎用的ではありませんが、ほとんど問題ありません。すべてのプリンターを定義してから、次の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警告:名前にスペースが含まれているプリンタはありません。その場合、スクリプトはテストされません(ただし、シェルスクリプトの第一人者がフラッシュ内のスクリプトを修正すると確信しています;-)...)

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

[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
+1ただし、理由はあるかもしれませんが、cut部分に適切な区切り文字を使用することで、配列へのデータ入力を簡単にすることができますcat /etc/printcap | cut -d "|" -f 1 | grep -v "#"。翻訳を取り除くことでサイクルタイムを節約できますtr。これは、最初のフィールドのみが必要な場合に機能します。
-Cbhihe

1

私のパッケージ(恥知らずのプラグ)、duplexprはあなたが望むもののいくつかを行い、あなた自身のバージョンをロールするのに役立つかもしれないbash関数を含んでいます。(bashでコーディングされているため、比較的簡単に変更できるはずです。できればサポートします。)

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

現在のバージョンは両面印刷のみで、非両面プリンターでのみ動作しますが、新しいバージョンでは、両面ハードウェアを備えたプリンターを処理します。これは、本質的に、両面エミュレーションソフトウェアなしのプリンターおよびキュー管理のみです。(プロジェクトなどを介して直接私に連絡したい場合に既に動作するスクリプトのアルファ版があります。)

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

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

ないことの1つは、Acroread から[ファイルに印刷]オプションを使用して作成されたファイルを印刷することです。これらのファイルはlpで機能しないだけで、問題が何であるかを理解するために上流の人々の注意を引くことができませんでした。

個人的には、ほとんどのアプリケーションがサポートされている場合でも、ほとんどすべてを「オフライン」で印刷します(ほとんどのアプリケーションがサポートする[ファイルに印刷]オプションを使用)。それは私がやっていることに集中するのに役立ちます。その後、適切なブレークポイントに達すると、ジョブのバッチを印刷します。

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


これは興味深いパッケージですが、現時点ではいくつかのラフなエッジがあるように見えます。何か問題が発生した場合に修正できるかどうかはわかりません。ところで、Githubにアップロードすることを検討しましたか?
ナサニエルM.ビーバー

@bariumbitmap-私は毎日10年以上使っています(最初に書いたので)。安定しています。また、開発中の新しいバージョンもあります。あなたがそれを壊すか、追加の機能が必要で、私と一緒に働くことをいとわないなら、私はそれを修正します。まだgitを学んでいないので、githubを最小限に使用します。Sourceforgeは非常に有名です。
ジョー

0

この問題に対する完全な解決策はないようですが、オートコンプリートの追加の利便性を備えた、上記のRmanoの回答に.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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.