2

質問で間違ったツリーを吠えている可能性があるので、問題の詳細な説明をしようと思います。

XML ファイルを取得して PDF を生成する Windows サービスがあります。次に、パラメーターを使用して生成された PDF を Ghostscript に出力し、その後に-sOutputFile="%printer%"XML ファイルのデータに基づいてネットワーク プリンターの 1 つの名前を付けます。

以前は を使用-sDEVICE=mswinpr2していましたが、これはサイズが約 70 ~ 80MB の印刷コマンドを生成していたため、ローカル ネットワーク上では特に役に立ちませんでした。複数のサイト用の中央印刷サーバーができたので、これらの不条理なファイルサイズを考えると、これらの PDF の印刷時間は天文学的なものになっています。

これらのファイルは、次を使用して生成されていました。

  " -sDEVICE=mswinpr2 -sPAPERSIZE=a4" _
& " -dBATCH -dNOPAUSE -dSAFER -dNoCancel" _
& " -sOutputFile=""%printer%" & [somePrinter] & """"

私はGhostscriptの設定をいじっていましたが、次のGhostscriptコマンドを使用して、PNGで答えを見つけたと思いました:

  " -sDEVICE=png16m -r600x600 -sPAPERSIZE=a4" _
& " -dBATCH -dNOPAUSE -dSAFER -dNoCancel -dQUIET" _
& " -sOutputFile=""%printer%" & [somePrinter] & """"

これは単一ページでは問題なく機能し、単一ページのドキュメントに対して約 150kb のデータしか生成しませんが、複数ページでは最初のページのみが印刷されます。プリンターの代わりにファイルに出力することでいくつかのテストを行ったところ、ある種の奇妙なマルチページ PNG が作成されていることがわかり、プリンターが混乱しているだけだと思います。

実際の質問:

ここでの唯一の本当の制約は、PDF ファイルを入力として受け取り、ユーザーの操作なしで小さなファイルサイズで直接プリンターに出力する必要があることです。

アイデアが不足しているため、これを実現する GhostScript 設定 (または GhostScript の代替) を誰かに勧めてもらえますか?

4

2 に答える 2

2

mswinpr2 デバイスは、Windows 印刷システムを使用して、多数の異なるプリンターを処理します。これは、着信ファイルをビットマップにレンダリングし、ビットマップをプリンター デバイス コンテキストにブリットし、デバイス コンテキストにプリンターに印刷するように指示することによって機能します。明らかに、高解像度のフル カラー ページは非常に大きなビットマップを生成できます。A4 ページ @600 dpi、CMYK カラーは約 130Mb (8.26*600 * 11.69*600 * 4) になります。

したがって、常にビットマップをプリンターに送信することになります。もちろん、これは大きくなる可能性があります。多くの場合、プリンターは出力を小さくする印刷言語を理解ますが、それには、Ghostscript がプリンターについて「認識」し、正しい出力を生成する必要があります。mswinpr2 の優れた点は、OS を活用して面倒な作業を行うことです。欠点は、常にビットマップを生成することですが、少なくとも Windows でサポートされている任意のプリンターに印刷できます。

あなたが発見したように、ほとんどのプリンターはPNGを理解せず、受信データをネイティブプリンターデータとして扱います。これの影響は何でもかまいませんが、有用なプリントアウトを生成する可能性はほとんどありません。

特定のプリンターが PCL または PostScript をサポートしていることがわかっている場合は、適切な Ghostscript デバイスを使用して、PDF ファイルをこれらの言語のいずれかに変換できます (PCL ファイルはおそらく依然として巨大です)。

PDF の透明度の概念をサポートする印刷言語は他にないため、透明度を含む PDF ファイルは少なくとも部分的にビットマップに変換する必要があることに注意してください。

あなた自身がこれを発見したようです。pswrite の代わりに ps2write を使用することをお勧めします。より高速に実行される小さな出力が生成されます。また、pswrite デバイスは廃止され、サポートされなくなりました。

おそらく、プリンターに適した解像度も設定する必要があります。ps2write は、ページの領域をビットマップにレンダリングする場合があり (PDF の透明度など)、解像度パラメーターを使用して、作成する画像の解像度を決定します。デフォルトは 720 dpi で、ほとんどすべてのデバイスで適切に印刷されます。ただし、ほとんどのデバイスには大きすぎるため、状況によっては再び大きなビットマップが生成されます (Cairo で生成された PDF ファイルは、すべてのページの全体が透明であると宣言されているため、特にこの問題が発生しやすくなっています)。

于 2012-05-18T07:40:34.587 に答える
1

私の最終的な解決策は、-sDEVICE=pswriteの代わりに使用することでし-sDEVICE=png16m -r600x600た。

この出力はPostScriptであり、すべてのプリンターが解釈できます。

したがって、悲しいことに答えではありませんが、それでも解決策です。

于 2012-05-18T07:27:19.377 に答える