最初の問題は、通常、PostScriptプログラムが特定のメディアサイズにレンダリングされることを想定して作成され、通常は密接にバインドされていないことです。空白は読みやすさのために重要です。
通常、生成するPostScriptプログラムは特定のメディアサイズを要求します。インタープリタはそれに合わせて最適な処理を行います。それが一致しない場合は、できるだけ近くにしようとする戦略を使用し、そのメディアに合わせてコンテンツ全体を拡大/縮小します。
すべてのマーキングコンテンツをレンダリングするまで、必要なサイズがわからなくてもバウンディングボックスがわからない場合は、プリンタでこれらの処理を実行することはできません。いくつかのファイルは一般に、EPSファイルに%% BoundingBoxコメントがありますが、それはコメントです.PostScriptを解釈したくないアプリケーションのために、PostScriptには効果がありません。
あなたが望むシンプルなスイッチがそこにないのは、それがレンダリングのためにインタープリタの通常の機能を破壊するからです。
最初に行う必要があるのは、コンテンツの境界ボックスを決定することです。 Stefanの説明によると、bboxデバイスを使用して、これを行うことができます。そしてそのメモでは、私が知っている限り、bboxデバイスは正確な出力を生成します。そうでなければ、私たちが修正できるように、それを証明するバグ報告に感謝します。人々がバグを報告しないと、どうやって彼らについて知っているはずですか?それは、誰かがバグ報告を助ける代わりにFUDを広げるのを見るのには残念です.......
ps2epsiは、その冗長で安価で陽気なスクリプトではありません。ただし、元のPostScriptがスタックに残っている場合、破損した(または無効な)EPSファイルとして終了し、使用しようとする前に元のPostScriptを修正してから、試行するPostScriptプログラムを壊しますそれを使用する(たとえば、EPSを文書に含めて印刷する場合)。
Ghostscriptを使用していて、PostScriptプログラムを取得してEPSを取得したい場合は、eps2writeデバイスを使用します。率直に言ってプレビューブームはありません。
bboxデバイス(およびeps2write)レコードすべてのマーキング操作を正しく覚えていれば、白以外のマーキング操作はすべて記録できません。白がページの既存のマークを上書きするとどうなりますか?メディアがではない場合は、は白ですか? Ghostscriptを使用してPNGにレンダリングすると、出力の手の届かない部分は透明になりますが、白いマークは透明ではありません。
したがって、bboxは色に関係なくすべてのマーキング操作の範囲です。進めるべき他の唯一の方法は、コンテンツをレンダリングし、白以外のピクセルを数えることです。しかし、それは特定の解像度でのみ動作し、解像度を変更し、正確な境界ボックスも同様に変化する可能性があります。
バウンディングボックスを取得したら、Ghostscriptにそのサイズのメディアを使用させることができます。 は、コンテンツが左下隅でしっかりと開始される可能性はほとんどないため、原点を翻訳する必要があります。メディアサイズを設定するには、-dDEVICEWIDTHPOINTSと-dDEVICEHEIGHTPOINTSが必要です。PostScriptを送信して、原点を適切に変更するには、-cと-fを使用する必要があります。単純な場合、 '-x -y translate'で十分ですが、プログラムがinitgraphicsを実行する場合は、BeginPageプロシージャを設定して初期CTMを変更する必要があります。
-dDEVICEWIDTHPOINTSなどでメディアサイズを設定した場合、すべてのページは同じサイズになります。あなたが望んでいなければ、BeginPage手続きを書いて個々のページのサイズを変更する必要があります(setpagedeviceをフックして/ PageSizeのエントリを辞書から削除する必要もあります)。
Windowsがなぜアクティブなウィンドウの後ろにダイアログボックスを置くと、それはWindows 7(またはおそらくVista)でそれをやり始めているようですが、私はダイアログを生成しているかどうかわからないので、変更する方法はありません.... 。
個人的には、Ghostscriptのeps2writeデバイスを使ってオリジナルを実行し、EPSを取得してpdfwriteデバイスと-dEPSCropスイッチを使用してPDFファイルを作成する2段階アプローチを試してみることをお勧めします。他の解決方法は悪いです。EPSファイルはが複数ページであることができないので、nページのPostScriptプログラムから 'n'個のEPSファイルを作成してから、各EPSファイルをpdfwriteデバイスへの入力としてリストするコマンドラインを提供する必要があります。
スクリプトを試す前に、サンプルファイルを用意し、コマンドラインから試してみてください。
あなたは 'gswin64c.exe -sDEVICE = bbox -dBATCH -dNOPAUSE pdfname'を実行することでbboxを得ることができます。 –
Thanks、@Stefan Hegny。私がここで見つけたもの: 'gswin64c.exe -q -dBATCH -dNOPAUSE -sDEVICE = bbox -dLastPage = 1 GsCrop.ps | findstr %% BoundingBox'私の質問は、これらの数値をさらにどのように使用するのですか? – theozh