5

私はこのデジタルの世界で生き残るのにかろうじて十分に知っています。

1ページのポストスクリプトファイル(グラフ/画像)がたくさんあります。PDFに変換して、自動的に狭いボックスにトリミングしたいと思います。私は今Windowsを使用しています(私もLinuxを使用しているので、Linux用のコードを投稿することを躊躇しないでください)

私は過去にGhostscriptgswin32c.exeとCalibrepdfmanipulate.exeを組み合わせることで成功しました。これはおそらく、ここの多くの人にとってなじみのあるアプローチです。

しかし、このアプローチにはいくつかの理由で問題があります。

64ビットのgswin64c.exeに「アップグレード」した後、1つの問題が発生しました。32ビットバージョンのgswin32c.exeはまだ私のシステムで動作するので、あまり文句を言うことはできません。

おそらく不適切にコーディングされたポストスクリプトファイルを処理しているときに、別の問題が発生しました。少なくとも2つの問題があるようですが、どちらが原因であるか、または両方が原因であるかはわかりません。1つの問題は、バウンディングボックスの行(%% BoundingBox:135 179 484 587など)が常に上から2番目の行に配置されるとは限らないことです。それが問題になる可能性があることを理解しています。もう1つの問題は、上の境界ボックスがGhostscriptの「縦」の向きに対応しているのに、トリミングが「横」の向きに従っていることです。私が特定していないさらに別の問題は、一部のファイルではトリミングが非常にランダムに見えることです。

だからここに私の32ビットアプローチ(高品質のファイルで機能します)が続き、64ビットの適応は機能しません(おそらく、 httpsを理解している場合、calibreによって提供されるパッチスクリプトではなく、私のマシンでいくつかのpypdfスクリプトを呼び出すためです: //bugs.launchpad.net/ubuntu/+source/calibre/+bug/800551およびhttp://www.mobileread.com/forums/archive/index.php/t-103097.html、しかし私は推測しているだけですとにかく回避策がわからない):

@echo off echo batch processing with Latex ps2pdf followed by Ghostscript gswin64c.exe and Calibre2 pdfmanipulate.exe for %%I in (*.ps,*.eps) do ( "C:\Program Files\MiKTeX 2.9\miktex\bin\x64\ps2pdf" %%I ) for %%I in (*.pdf) do ( "C:\Program Files (x86)\Ghostscript\gs9.00\bin\gswin32c.exe" -dSAFER -dNOPAUSE -dBATCH
-sDEVICE#bbox "%%I" 2> bounding "C:\Program Files (x86)\Calibre2\pdfmanipulate.exe" crop -o "%%~nICropped32.pdf" -b bounding "%%I" pause "C:\Program Files\Ghostscript\gs9.04\bin\gswin64c.exe" -dSAFER -dNOPAUSE -dBATCH
-sDEVICE#bbox "%%I" 2> bounding "C:\Program Files (x86)\Calibre2\pdfmanipulate.exe" crop -o "%%~nICropped64.pdf" -b bounding "%%I" pause )

上記の32ビットアプローチは、PSTricksまたはMapleの標準2Dプロットドライバーによって生成されたPostscriptレベル3などの高品質ファイルで機能しますが、古いファイルなどでは機能しません。Mapleの古典的なプロットドライバーによって作成されたPostscriptレベル2(その場合)。

私はいくつかのそのようなファイルの回避策を見つけました。これは、(MiKTeX)LaTeXディストリビューションのepstopdfを使用することで構成されています。それらのMapleクラシックファイルで動作します。残念ながら、PSTricksやMatlabなどの他のソフトウェアを使用して数年前に生成した他のいくつかのポストスクリプトファイルでは機能しません。

したがって、いくつかの変換を行い、機能したものを選択する必要があります。私の生活を楽にする提案があればいいのにと思います。BoundingBoxとPortrait/Landscapeの問題を修正できれば、かなり満足できるはずです。

よろしくお願いします。Linuxの提案は受け入れられます。私の好みは、「return」キーを1回押すだけでさまざまなファイルを処理できる可能性のあるソリューションです。

そしてもちろん、私はロスレスタイプのトリミングを探しています。これは、バウンディングボックスを解釈することだけで構成され、(おそらく)低品質のpdfに変換することではありません。

編集:私は言うのを忘れました。gswin32c / pdfmanipulateを高品質レベル3のポストスクリプトファイルに適用すると、「bounding」という名前のファイルに次のような情報が入力されます。

%% BoundingBox:34128 567 667 %% HiResBoundingBox:34.364390 128.875004 566.054069 666.071980

上記の例では、ファイルはすでにほとんどトリミングされています。%%BoundingBoxと%%HiResBoundingBoxの間の近さに注意してください

しかし、低品質レベル2(またはそう主張している)のポストスクリプトファイルに適用すると、「バウンディング」ファイルは次のようになります。

%% BoundingBox:189 137 574 467 %% HiResBoundingBox:189.485994 137.843996 573.299983 466.668478

しかし、バウンディングボックスは実際には%% BoundingBoxである必要があります:135 179 484 587上記(135 179 484 587)は、postscriptファイル自体(コピー貼り付けによって2行目に移動)によって提供されるバウンディングボックスです。縦向きのときにGhostview/Ghostscriptによって解釈されるバウンディングボックスと一致します。

しかし、Ghostscriptでは完全に無視されます...

189 137574467がどこから来たのかわかりません---それは非常に間違っています...

編集2.ケンの質問に答えて、いくつかの点を明確にしたいと思います。

こんにちはケン、お返事ありがとうございます、

私の質問が不明確だった場合は申し訳ありません---それでもあなたはその要点を理解しているようです---あなたの質問を順番に取り上げさせてください:

なぜ2つのアプリケーションを使用しているのかわかりませんが、Ghostscriptだけで変換全体を実行できるはずです。

Ghostscriptですべてを行う方法が見つからなかったので、別の方法を使用しました。ここ、http://www.mobileread.com/forums/archive/index.php/t-72885.htmlなどでGhostscript / Calibrateの提案を見つけました。他の場所で試してみましたが、最近まで機能していました。

Ghostscriptですべてを行うことができないと言っているのではなく、単に方法が見つからなかったと言っているだけです。

「64ビットgswin64c.exeに「アップグレード」した後、1つの問題が発生しました。」問題が何であるかをまだ言っていませんが、バグとして報告しましたか?バグを報告しないと修正されません......

問題とバグレポートを説明するリンクをここに示しました:https ://bugs.launchpad.net/ubuntu/+source/calibre/+bug/800551、http : //www.mobileread.com/forums/archive/ index.php / t-103097.html、私の問題はまったく同じです。

PostScriptプログラムとコメントの間に混乱があるようです。'%'で始まるPostScriptプログラムの行はコメントであり、プログラムの動作には影響しません。したがって、BoundingBoxコメントは何もしません。

可能であれば、私は違うように頼みます。ポストスクリプトファイルを取り、%% Bounding Boxを削除し、保存してGhostviewで開きます。Ghostviewはエラーメッセージをスローし、バウンディングボックス情報を使用せずにそれを表示します。たとえば、バウンディングボックスでしっかりと囲まれているのではなく、多くの空白で囲まれている図です。そうです、少なくともGhostview内では、このコメントは何かをします。%% Bounding Boxを削除した後、Calibre / pdfmanipulateを使用してpdfをトリミングすると、%%BoundingBoxが機能する場合に誤ってトリミングされます。したがって、この「コメント」は、表示とトリミングのコンテキストで非常に役立ちます。

ファイルの2行目である必要はないことに注意してください。

アドビが推奨しています。アドビからの引用、

「2番目に必要なDSCヘッダーコメントはEPSファイルのサイズに関する情報を提供し、インクルードアプリケーションがEPSファイルを適切に変換およびクリップできるように存在する必要があります。これはバウンディングボックスのコメントです。」

http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf

アドビは「しなければならない」と言います。個人的には、適切にバインドされたepsからpdfを生成できる限り、それが必須であるかどうかを気にする必要はありません。

通常、GhostscriptはDSCコメントを無視しますが、ProcessDSCをtrueに設定すると、使用が非常に制限されます(主にページサイズを設定するためのBoundingBoxコメント)。

pdfmanipulateを使用すると、適切にトリミングされたpdfと不適切にトリミングされたpdfの間にすべての違いが生じます。

次に進みます。LaTeX ps2pdfを使用しているとのことですが、PostScriptファイルが既にある場合は、それをGhostscriptに送信してPDFに変換できます。この場合、ページの実際のバウンディングボックスを見つけるために、Ghostscriptを正確に何に使用しているのかわかりません。

はい。

「ロスレス」トリミングの意味は私にはわかりません。コンテンツをトリミングすると、空白だけであっても、明らかに何かを失うことになります。

つまり、トリミングプロセスで画像全体を「ラスタライズ」(またはそれが何と呼ばれていても、用語を知っているでしょう)したくないということです。切り抜かれたファイルの部分は私には役に立たないので、それほど大きな損失にはなりません。切り抜き内にあるファイルの部分は、元のファイルと同じ品質である必要があります。それが一般的な考え方です。

これについてのコメントはここにあります。これは私が有用な情報を見つけた場所の1つです 。http://www.charlietanksley.net/philtex/reading-pdfs-on-portables/

トリミングしたいサイズがわかっている場合は、1回のパスで変換を実行するのは簡単です。

いいえ、サイズがわかりません。そのため、ソフトウェアで計算してもらうためにこのような長さにします。Ghostscriptとepstopdfが常に最適なクロップに同意するとは限らないため、これは明らかに単純なことではありません。一部のファイルには適切ですが、他のファイルには適切ではありません。他のファイルには適切ですが、一部のファイルには適切ではありません...

サイズがわからない場合は、最初にBoundingBoxを抽出することで、Ghostscriptのみを使用して2パスで実行できます。これにより、バウンディングボックスの左下と右上の4つの数字が表示されます(私が正しく覚えている場合)。次に、「変換」PostScript操作を作成して、ページのコンテンツを左下に移動します(0,0、左下隅から開始します)。また、ページサイズを設定するためのページデバイスリクエストを作成します。サイズは、幅=右-左および高さ=上-下で指定されます。元のファイルをPostScript演算子とともにGhostscriptにフィードし、pdfwriteデバイスを選択すると、PDFファイルが取得されます。

バッチファイルの例があれば、便利です。私はpdfwriteに基づくいくつかの例を見てきましたが、私が試したものはどれもうまくいきませんでした。悪魔は詳細に宿っています。

バウンディングボックスに関する限り、それはバグであるか、ファイルがマークを付けている可能性があり、外側の場所で白いインクを使用している可能性があります。この場合、バウンディングボックスデバイスはそれをページコンテンツの一部と見なします。そうではないことがわかるかもしれませんが、デバイスはできません。ページが最初に暗い背景で塗りつぶされたかどうか、およびコンテンツが白インクを使用して輪郭が描かれているかどうかを検討してください。

ファイルはすべてMatlab、Maple、PSTricksなどのソフトウェアで作成されており、%% Bounding Boxで指定された領域の外側に目に見えない白いマークが表示される可能性はほとんどありません(ただし、明らかに不可能ではありません)。

多くの場合、%% Bounding Boxコメントには必要なすべての情報が含まれているので、Ghostscript、Calibre、pdfwrite、またはその情報を使用する人を希望します。

私はあなたが何をしたいのかをもっと理解し、理想的にはあなたの問題のあるファイルを1つ以上見なければ、包括的な解決策を提供することはできません。

それは非常に簡単ですが、どうすれば閲覧用のポストスクリプトファイルを投稿できますか?420キロバイトです。

ケンに感謝します。実行可能な解決策が見つかることを願っています。

編集3.私は問題の大部分を特定しました。

私のポストスクリプトファイルには、最適な切り抜きにかなり近い次のバウンディングボックスがあります:%% BoundingBox:135 179 484 587

Ghostscript gswin64c / gswin32cを実行してバウンディングボックスを計算すると、

for %%I in (*.ps,*.eps) do ("C:\Program Files\Ghostscript\gs9.04\bin\gswin64c.exe" -dSAFER -dNOPAUSE -dBATCH -dAutoRotatePages=/None -sDEVICE#bbox "%%I" 2> bounding)

私は得る:

%% BoundingBox:145189475574 %% HiResBoundingBox:145.331574 189.485994 474.155986 573.299983

ps2pdfに続いてGhostscriptgswin64cを実行すると、つまり

for %%I in (*.ps,*.eps) do ("C:\Program Files\MiKTeX 2.9\miktex\bin\x64\ps2pdf" %%I)
for %%I in (*.pdf) do ("C:\Program Files\Ghostscript\gs9.04\bin\gswin64c.exe" -dSAFER -dNOPAUSE -dBATCH -dAutoRotatePages=/None -sDEVICE#bbox "%%I" 2> bounding)

次のバウンディングボックスが表示されます。

%% BoundingBox:189 137 574 467 %% HiResBoundingBox:189.395994 137.843996 573.299983 466.668478

したがって、問題は、ps2pdfを使用してpsからpdfに変換すると、バウンディングボックス情報が変更され、誤ったトリミングが発生することです。したがって、ps2pdfをeps2pdfのような他のものに置き換えると、ここでの問題が解決します。もちろん、他の解決策もあります。Kenとluserdroogが提案したように、Ghostcriptのみを含むソリューションは特に価値があります。彼らの非常に価値のある(そして私のクイックフィックスよりも優れた)提案を以下に示します。このようなものが機能しました:

for %%I in (*.eps,*.ps) do ("C:\Program Files\MiKTeX 2.9\miktex\bin\x64\epstopdf" %%I)
for %%I in (*.pdf) do (
"C:\Program Files\Ghostscript\gs9.04\bin\gswin64c.exe" -dSAFER -dNOPAUSE -dBATCH -dAutoRotatePages=/None -sDEVICE#bbox "%%I" 2> bounding
"C:\Program Files (x86)\Calibre2\pdfmanipulate.exe" crop -o "%%~nICropped.pdf" -b bounding "%%I"
)
4

5 に答える 5

4

これを追加するにはコメントのスペースが足りないので、別の回答を投稿しているのではないかと思います。

BoundingBoxがPDFファイルに対して偽物に見える理由は、PDF変換プロセスの機能によるものです。デフォルトでは、テキストの大部分が水平になるまでページを回転します。このファイルの場合(そして、同じ問題を抱えている他のファイルを推測します)、これにより時計回りに90度回転しました。

これはもちろん、バウンディングボックスも回転することを意味し、値を調べると、これが発生したことがわかります。したがって、BoundingBoxは、回転されたPDFファイルに対して正しいものです。

今、私はプライベートメールでいくつかのPostScriptプログラムを提供しました、これが私が置いたものです:

1pass.ps

これは、ソースPostScriptファイルからBoundingBox行を読み取り、それを使用してページサイズとオフセットを設定します。使用するファイルの名前を渡すには、「SourceFileName」を設定します。たとえば、指定したファイルを使用します。

gs -sDEVICE=pdfwrite -sSourceFileName=classic.ps -o out.pdf 1pass.ps

BoundingBoxを読み取り、そのサイズにページがトリミングされたPDFファイルに変換した結果であるout.pdfというファイルが生成されます。

%!PS  

%% PostScriptプログラムによる変更を防ぐために、setpagedeviceを再定義します  
%%ただし、別の名前でコピーを保持するため、cnaを使用します。  
/ Oldsetpagedevice / setpagedevice load def  
/ setpagedevice {pop} bind def  

(処理するファイルは)print SourceFileName ==  

/ SourceFile SourceFileName(r)file def  
/BoxString65535文字列定義  
/ LLx 0 def  
/ LLy 0 def  
/ URx 0 def  
/ URy 0 def  
/ FoundBox false def  

/ GetValues {  
  トークン{%PostScriptトークンを読み取ります  
    / LLx exch def%今のところその数を想定  
    トークン{  
      / LLy exch def  
      トークン{  
        / URx exch def  
        トークン{  
          / URy exch def  
          pop%残りの文字列データを削除します  
          true%は成功コードを返します  
        }{  
          (文字列から数値を読み取れませんでした)==  
          false%は失敗コードを返します  
        } ifelse  
      }{  
        (文字列から数値を読み取れませんでした)==  
        false%は失敗コードを返します  
      } ifelse  
    }{  
      (文字列から数値を読み取れませんでした)==  
      false%は失敗コードを返します  
    } ifelse  
  }{  
    (文字列から数値を読み取れませんでした)==  
    false%は失敗コードを返します  
  } ifelse  
} bind def  

{{  
  SourceFile BoxString readline {  
    (%% BoundingBox:)anchorsearch {  
      ポップ%%一致する文字列を破棄  
      GetValues%%BBoxを抽出します  
      / FoundBox exchdef%%成功/失敗に注意  
      exit%%このループを終了します  
    }{  
      ポップ%%文字列の破棄、一致なし  
    } ifelse  
  }{  
    (%% BoundingBoxコメントが見つかりませんでした)==  
    exit%%これ以上データはありません。ループを終了します。  
  } ifelse  
}ループ  

SourceFileclosefile%%ファイルを閉じます  

FoundBox {  
  (LLx =)印刷LLx ==  
  (LLy =)印刷LLy ==  
  (URx =)印刷URx ==  
  (URy =)print URy ==  
  > Oldsetpagedevice  
  LLx neg LLy neg translate  
  SourceFileName実行  
} もしも  

2pass.ps

これは、現在作業している方法で使用することを目的としています。次の2つの利点があり1pass.psます。

  1. %%BoundingBoxこれは、PDFファイルとPostScriptファイル、およびコメントを含まないファイルで機能します。
  2. BoundingBoxは正確です。

各ファイルを2回処理する必要があるという欠点があります。1回はバウンディングボックスを取得するため、もう1回はPDFファイルを作成するためです。

これは、bboxデバイスの出力を含むファイルの名前と変換されるファイルの名前の2つのパラメーターを取ります。ここでも、送信したファイルを使用して、次のように使用します。

最初のコマンド:

  gs \
   -sDEVICE=bbox \
    classic.ps 2> bounding.txt

2番目のコマンド:

  gs \
   -sDEVICE=pdfwrite \
   -sBoxFileName=bounding.txt \
   -sPostScriptFileName=classic.ps \
   -o out.pdf \
    2pass.ps

のPostScriptコードclassic.ps

%!PS  

%% PostScriptプログラムによる変更を防ぐために、setpagedeviceを再定義します  
%%ただし、別の名前でコピーを保持するため、cnaを使用します。  
/ Oldsetpagedevice / setpagedevice load def  
/ setpagedevice {pop} bind def  

(ファイル内のバウンディングボックスパラメータ)print BoxFileName ==  
(処理するファイルは)print PostScriptFileName ==  

/ BoxFile BoxFileName(r)ファイル定義  
/BoxString256文字列定義  
/ HiResBoxString 256 string def  
/ LLx 0 def  
/ LLy 0 def  
/ URx 0 def  
/ URy 0 def  

BoxFile BoxString readline%ファイルから最初の行を読み取ります  
{{  
  / BoxString exch def%文字列を私たちが読んだものに再定義します  
}{  
  (改行が%% BoundingBoxを読み取る前にEOFが発生しました)==フラッシュ  
} ifelse  

BoxFile HiResBoxString readline%ファイルから最初の行を読み取ります  
{{  
  / HiResBoxString exch def%文字列を私たちが読んだものに再定義します  
}{  
  (改行が%% HiResBoundingBoxを読み取る前にEOFが発生しました)==フラッシュ  
} ifelse  

BoxFile closefile%ファイルを閉じます  

BoxString(%% BoundingBox:)anchorsearch  
{{  
  pop%数学文字列を削除します  
  トークン{%PostScriptトークンを読み取ります  
    / LLx exch def%その数を想定  
    トークン{  
      / LLy exch def  
      トークン{  
        / URx exch def  
        トークン{  
          / URy exch def  
          pop%残りの文字列データを削除します  
        }{  
          (文字列から数値を読み取れませんでした)==  
        } ifelse  
      }{  
        (文字列から数値を読み取れませんでした)==  
      } ifelse  
    }{  
      (文字列から数値を読み取れませんでした)==  
    } ifelse  
  }{  
    (文字列から数値を読み取れませんでした)==  
  } ifelse  
}{  
  印刷(BoundingBoxは含まれていません)==  
} ifelse  

(LLx =)印刷LLx ==  
(LLy =)印刷LLy ==  
(URx =)印刷URx ==  
(URy =)print URy ==  

> Oldsetpagedevice  
LLx neg LLy neg translate  

PostScriptFileName実行  
于 2012-01-06T14:58:35.800 に答える
4

BoundingBoxコメントを強制するだけで目的の結果が得られる場合は、ghostscriptの最初の呼び出しをテキストスキャナーに置き換えることができます。

上記のスクリプトのshバージョンは次のとおりです(これらのWindowsパス名には耐えられません!)

for i in *.pdf ; 
do 
    gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=bbox "$i" 2> bounding ; 
    pdfmanipulate crop -o "${i%.pdf}-cropped.pdf" -b bounding "$i" ; 
done

grepそして、次のように使用するように変更できます。

for i in *.pdf ; 
do 
    grep '%%BoundingBox' "$i" > bounding ; 
    pdfmanipulate crop -o "${i%.pdf}-cropped.pdf" -b bounding "$i" ; 
done

Windowsでこれを実行しようとすると、cygwinをインストールして同じスクリプトを使用します。

于 2012-01-04T19:19:23.243 に答える
2

「私は過去にGhostscriptgswin32c.exeとCalibrepdfmanipulate.exeを組み合わせることで成功しました。これは、おそらくここの多くの人にとってなじみのあるアプローチです。」

なぜ2つのアプリケーションを使用しているのかわかりませんが、Ghostscriptだけで変換全体を実行できるはずです。

「64ビットのgswin64c.exeに「アップグレード」した後に1つの問題が発生しました。」

あなたは問題が何であるかを言っていません、あなたはそれをバグとして報告しましたか?バグを報告しないと修正されません......

PostScriptプログラムとコメントの間に混乱があるようです。'%'で始まるPostScriptプログラムの行はコメントであり、プログラムの動作には影響しません。したがって、BoundingBoxコメントは何もしません。

とは言うものの、DSCプロセッサが使用できるPostScriptファイルにコメントを埋め込む方法を説明する規則(略してドキュメント構造規則、DSC)があります。これが機能するためにプログラムをどのように構成する必要があるかを説明する規則があります。PostScriptプログラムが%!PS-Abode-mnで始まる場合、mとnは整数であり、DSC準拠のプログラムであると宣言しており、準拠しているバージョンは番号「mn」です。この場合、BoundingBoxコメントはPostScripティンパープリターによって使用されませんが、DSCプロセッサーが使用する可能性があります。ファイルの2行目である必要はないことに注意してください。

通常、GhostscriptはDSCコメントを無視しますが、ProcessDSCをtrueに設定すると、使用が非常に制限されます(主にページサイズを設定するためのBoundingBoxコメント)。

次に進みます。LaTeX ps2pdfを使用しているとのことですが、PostScriptファイルが既にある場合は、それをGhostscriptに送信してPDFに変換できます。この場合、ページの実際のバウンディングボックスを見つけるために、Ghostscriptを正確に何に使用しているのかわかりません。

「ロスレス」トリミングの意味は私にはわかりません。コンテンツをトリミングすると、空白だけであっても、明らかに何かを失うことになります。

トリミングするサイズがわかっている場合は、1回のパスで変換を行うのは簡単です。サイズがわからない場合は、最初にBoundingBoxを抽出することで、Ghostscriptのみを使用して2回のパスで変換を行うことができます。これにより、バウンディングボックスの左下と右上の4つの数字が表示されます(私が正しく覚えている場合)。次に、「変換」PostScript操作を作成して、ページのコンテンツを左下に移動します(0,0、左下隅から開始します)。また、ページサイズを設定するためのページデバイスリクエストを作成します。サイズは、幅=右-左および高さ=上-下で指定されます。元のファイルをPostScript演算子とともにGhostscriptにフィードし、pdfwriteデバイスを選択すると、PDFファイルが取得されます。

バウンディングボックスに関する限り、それはバグであるか、ファイルがマークを付けている可能性があり、外側の場所で白いインクを使用している可能性があります。この場合、バウンディングボックスデバイスはそれをページコンテンツの一部と見なします。そうではないことがわかるかもしれませんが、デバイスはできません。ページが最初に暗い背景で塗りつぶされたかどうか、およびコンテンツが白インクを使用して輪郭が描かれているかどうかを検討してください。

私はあなたが何をしたいのかをもっと理解し、理想的にはあなたの問題のあるファイルを1つ以上見なければ、包括的な解決策を提供することはできません。

于 2012-01-03T16:58:50.610 に答える
2

さて、DSCに簡単に触れて、Ghostviewについてのあなたのポイントは正しいですが、Ghostviewは:

  1. Ghostscriptの一部ではありません(驚くべきことかもしれませんが)
  2. DSC対応アプリケーション。

私のコメントはPostScript言語に適用可能であり、Ghostscriptがこれらのコメントを無視する理由を説明することを意味します。

'2番目に必要なコメント'についてのポイント; (DSC準拠のために)存在する必要があり、2行目である必要はありません。一部のアプリケーションが誤ってそれを必要としていると聞いても驚くことではありませんが。

原則として、GhostscriptのpdfwritePDF出力デバイスは何もラスターに変換しません。いくつかのまれな例外があります。通常、通常とは異なるフォントタイプや色空間が関係する場合や、透明度のあるPDFを透明度をサポートする前にPDFバージョンに変換する場合(PDF/AやPDF/Xなど)です。

Ghostscriptから必要に応じてトリミングされたPDFファイルを作成するには:

 gswin32c ^
  -o out.pdf ^
  -sDEVICE=pdfwrite ^
  -dPAGEWIDTHPOINTS=xx -dPAGEHEIGHTPOINTS=yy ^
  -dFIXEDMEDIA ^
  -c "-x -y translate" ^
  -f input.ps

PostScriptファイルにこの情報がまだ含まれていない場合は、前の呼び出しで返されたBoundingBoxからxx、yy、x、およびyを計算する必要があります。あなたが上で言ったことを考えると、それは事実のようです。

一般的な場合:

  • xx = urx-llx、
  • yy = ury-lly、
  • x = llx、
  • y = lly

より良い解決策は、おそらく、セットアップを行うためのPostScriptプログラムを作成することです。これは、簡単に実行できます。

'ken.sharp AT artifex.com'にファイルを電子メールで送信するか、便利なファイル転送機能を使用してURLをメールで送ってください。返されたBoundingBoxが期待したものではない場合に最も興味があります。

上記で投稿したURLを確認しましたが、64ビットバージョンのGhostscriptの問題を説明しているURLは見つかりません。最後の質問として、どのバージョンのGhostscriptを使用していますか?

于 2012-01-04T16:12:02.847 に答える
0

calibre/pdfmanipulate.exeについての回答

caliberは、最近のリリースからpdfmanipulate.exeを削除しました。pdfmanipulateを取得するには、バージョン0.8.66に戻らなければならないことがわかりました。ポータブルバージョンをダウンロードしました:calibre-portable-0.8.66.zip

于 2012-10-24T23:07:40.680 に答える