6

PSまたはファイルのメイン領域をトリミングして、空白のないPDFファイルを作成したいと考えています。、 、EPSのコマンドはghostrcipt、ドキュメント ファイルからメインの図面を切り取ることができます。ps2pdfepstools

問題は、元の形式でしかトリミングされないことですが、EPS ファイルを作成したいですBoundingBox 0 0 x y。トリミングされ、左下隅に移動されました。

違いは、結果の EPS ファイルを PS ドキュメント内に挿入する場合です。を持っているBoundingBox x0 y0 x y場合、PS ドキュメントは、現在の場所ではなく、ポイント x0 y0 に EPS ファイルを挿入します。

例:

PS単純なファイルを次のように考えてください。

%!
/Times-Roman findfont 
11 scalefont setfont

72 700 moveto
(This is a test)show

EPS次のようなコマンドで変換する場合

ps2eps test.ps test.eps

それは生成します

%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 72 700 127 708
%%HiResBoundingBox: 72.000000 700.000000 127.000000 707.500000
%%EndComments
% EPSF created by ps2eps 1.68
%%BeginProlog
save
countdictstack
mark
newpath
/showpage {} def
/setpagedevice {pop} def
%%EndProlog
%%Page 1 1
/Times-Roman findfont 
11 scalefont setfont
72 700 moveto
(This is a test)show
%%Trailer
cleartomark
countdictstack
exch sub { end } repeat
restore
%%EOF

元の座標でトリミングされており、結果BoundingBox72 700 127 708です。EPSこのファイルをドキュメント内に挿入しようとするPSと、この座標でネストしようとします。

EPSでファイルを作成する場合に便利ですBoundingBox: 0 0 55 8。もちろん、すべての描画座標 (ここでは moveto) は、この新しい参照で変更する必要があります。

注:前述のように、BoundingBox 参照ポイントを修正する目的は、PS ドキュメント内でインポートできるようにすることです。したがって、この質問に対する別の答えは、BoundingBox に関係なく PS ドキュメント内に EPS ファイルを挿入する方法です。

たとえば、この EPS ファイルを200 200 255 208PS ドキュメントの場所に挿入する方法。次のコードで EPS を挿入しようとしましたが、BoundingBox が から開始されない限り機能しません0 0

200 200 translate 
save 
/showpage {} bind def 
(test.eps)run 
restore
4

2 に答える 2

3

単純に翻訳を解除するのはどうですか?

-72 -700 translate

eps自体、または含める前の準備セクションのいずれかですか?


気まずい!

次の typescript は、DSC コメントに導かれて、必要な変更を eps に実行する awk スクリプトを示しています (ママがかつて行っていたように!)。

利点は、これらのマーカーを提供するために入力 EPS が DSC に十分に準拠していることを保証できる場合、このアプローチは Ghostscriptを介してファイルを渡すよりも桁違いに高速になることです。

シンプルさは、このプログラムの利点であると同時に制限でもあります。DSC コメントをスキャンし、BoundingBox コメントから値を抽出し、HiResBoundingBox を抑制し、Page コメントの直後に Postscript 'translate' および 'rectclip' コマンドを追加します。EPS が本当に本物である限り、これは正しい結果を生成するはずです。ただし、他の回答のゴーストスクリプトのアプローチでは、信頼性の低い DSC 準拠の入力ファイルで結果が生成されます (ショートカットを使用しないため、DSC をコメントとして扱い、完全に無視します)。

厳密に言えば、「rectclip」は必要ないはずですが、質問では出力を「切り取る」よう求めています。

592(1)11:27 AM:~ 0> cat epscrop.awk
/%%BoundingBox: ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*)/{x=$2;y=$3;w=$4-x;h=$5-y;print $1,0,0,w,h}
!/%%BoundingBox:/&&!/%%HiRes/{print}
/%%Page /{print -x,-y,"translate"; print 0,0,w,h,"rectclip"}


593(1)11:27 AM:~ 0> awk -f epscrop.awk etest.eps
%!PS-Adobe-2.0 EPSF-2.0
%%BoundingBox: 0 0 55 8
%%EndComments
% EPSF created by ps2eps 1.68
%%BeginProlog
save
countdictstack
mark
newpath
/showpage {} def
/setpagedevice {pop} def
%%EndProlog
%%Page 1 1
-72 -700 translate
0 0 55 8 rectclip
/Times-Roman findfont
11 scalefont setfont
72 700 moveto
(This is a test)show
%%Trailer
cleartomark
countdictstack
exch sub { end } repeat
restore
%%EOF
于 2012-10-02T04:34:33.450 に答える
3

必要な BoundingBox スタイルの EPS に変換するには、Ghostscript を使用して、EPS に往復をさせます: EPS => PDF => EPS。

トリックは、パラメーターを追加することによって、PDF が BoundingBox の幅と高さと同じメディア サイズを使用するようにすること-dEPSCropです。

これらの 2 つのコマンドは、「空白なしの EPS」を作成します。

最初のステップ: EPS を PDF に変換します。

gs                   \
  -o so#12682621.pdf \
  -sDEVICE=pdfwrite  \
  -dEPSCrop          \
   so#12682621.eps

2 番目のステップ: PDF を EPS に変換します。

gs                                \
  -o so#12682621.roundtripped.eps \
  -sDEVICE=epswrite               \
   so#12682621.pdf 

結果として得られる EPS の忠実度をテストするには、ImageMagick を使用compareして、違いを赤でピクセルごとに PNG ファイルとして表示できます。

 compare                      \
   -density 600               \
    12682621.roundtripped.eps \
    12682621.eps              \
   -compose src               \
    12682621.png

その結果:ここに画像の説明を入力

いくつかのピクセルの違いがあることに気付くでしょう。これらは からの 707.500000 の値が原因で発生し、%%HiResBoundingBox後で丸めエラーにつながります (PNG には「ハーフ ピクセル」を含めることはできません)。

于 2012-10-02T07:38:23.590 に答える