CUPS処理に大量のコピーを印刷するのに時間がかかるのはなぜですか?

CUPS処理に大量のコピーを印刷するのに時間がかかるのはなぜですか?

21ページ(両面)カラーPDF文書を40部印刷する必要があります。 「印刷」をクリックした後、プリンタが印刷を開始するまで40分かかりました。

コピーを印刷すると、はるかに速く起動します。コピー量が多いほど、印刷を押してから印刷が開始されるまでの遅延時間が長くなるようです。なぜですか? CUPSは840ページの文書をプリンタに送信していますか?プリンタがファイルを受け入れてコピーを作成する方法を「知っておく」ことはありませんか?

答え1

プリンタがファイルを受け入れてコピーを作成する方法を「知っておく」ことはありませんか?

これを行うには、プリンタにa)文書全体を保存し、b)印刷ジョブの単一ページを完全な解像度でレンダリングするのに十分なメモリが必要です。これが本当であっても、CUPSはプリンタにそれを行うように指示する必要があります。 CUPSがプリンタでこれを実行できるかどうかわからない場合、CUPSは個々の840ページの印刷ジョブをプリンタに送信します。

もう一つの可能​​性は、コピーを印刷することです。整理されていないつまり、最初の最初の両面ページを40部印刷してから、2番目の両面ページを40部印刷するようにします。これを行うには、ユーザーがドキュメントの各コピーを手動で収集する必要があるため、ページが多いと迷惑でエラーが発生しやすくなります。それでコピーがあります。クリーンアップ(つまり、コピー#1のすべてのページを最初に印刷してからコピー#2のすべてのページを印刷するなど)可能な場合は、これが最新のプリンタドライバのデフォルト設定であることがよくあります。

答え2

私が知る限り、これはGhostScriptの非効率性の原因です。

古いRaspberry Pi 1からEcoTankインクジェットプリンタに100個のシングルページPDF文書を送信しました。 PiのGNU / Linuxは、プリンタがデータの受信を開始し、コマンドがtop次のことを実行する前に、長時間psCPUのほぼ100%を占めています。

gs -dQUIET -dPARANOIDSAFER -dNOPAUSE -dBATCH -dNOINTERPOLATE -dNOMEDIAATTRS -dShowAcroForm -sstdout=%stderr -sOutputFile=%stdout -sDEVICE=cups -r360x360 -dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=841 -dcupsBitsPerColor=8 -dcupsColorOrder=0 -dcupsColorSpace=0 -dcupsCompression=1 -scupsPageSizeName=A4 -I/usr/share/cups/fonts -c <</.HWMargins[8.400000 8.400000 8.400024 8.399963] /Margins[0 0]>>setpagedevice -f -_

/usr/bin/gs入力をキャプチャしたスクリプトに一時的に置き換えようとしたときに、CUPSが100ページのPDFファイルを生成したことを確認して(を使用してpdftopdf)、GhostScriptにそれをラスタライズするように要求しました。

つまり、CUPSでは100ページをビットマップに変換するにはGhostScriptが必要です。 CUPSはGhostScriptに1ページだけ変換し、その結果をプリンタに100回送信するように要求できることを知らないようで、GhostScriptもそうできることを知らないようです。それ最初のページのみをレンダリングし、結果を100回繰り返します。 CUPSは100ページ分のPDFファイルを作成するため、GhostScriptはここでより良い作業を実行できます。した言う再利用前のページのオブジェクトを100回再レンダリングしますが、GhostScriptはオブジェクトの再レンダリングに多くのCPUを消費しない限り、それほどスマートではありません。

(いいえ、/usr/bin/gsページで実際のGhostScriptを呼び出して結果を100回繰り返すスクリプトを置き換えることは機能しません。CUPSが追加のコピーを許可するには、バイナリヘッダーの低レベルの変更が必要です。)

100個の個別印刷ジョブを作成する場合

for i in {1..100}; do lp doc.pdf; done

その後、はるかに高速に印刷を開始しますが、Piがページを再レンダリングしている間、各コピー間にわずかな遅延があります。 20の印刷ジョブを作成すると、それぞれ5つずつコピーされます。

for i in {1..20}; do lp -n 5 doc.pdf; done

gs実行中、各5つのバッチ間に長い遅延があります。 CUPSは、gs最初のジョブが完了する前に次のジョブの実行を開始するのに十分に進歩していないようです。

CUPSまたはGhostScriptのソースコードでより多くの作業を実行すると、この状況を認識し、計算をさらに再利用できます。残念ながら、この追加の開発は、単に待っているか、プリンタを直接駆動するソフトウェアと機械を接続してCUPSをバイパスするよりも多くの時間を費やします。

関連情報