8

私は GS を使用して PDF から JPEG への変換を行っています。使用するコマンドは次のとおりです。

gs -sDEVICE=jpeg -dNOPAUSE -dBATCH -g500x300 -dPDFFitPage -sOutputFile=image.jpg image.pdf

-g500x300このコマンドでは、変換された画像サイズ (幅 x 高さ) を設定することがわかります。

高さを入力せずに幅を設定するだけで、幅に基づいて元の縦横比を使用して高さをスケーリングする方法はありますか? 高さパラメータ0、つまり-resize 500x0. GhostScript を試してみましたが、それが正しい方法だとは思いません。

大きなサイズの複数ページの PDF の変換に関しては非常に遅いため、ImageMagick convert の理由を使用しないことにしました。

助けてくれてありがとう!

4

3 に答える 3

5

この投稿では、ghostscript が高速である理由を説明しています - https://serverfault.com/questions/167573/fast-pdf-to-jpg-conversion-on-linux-wanted。それを修正する唯一の回避策は、imagemagick コードを変更することです。

残念ながら、ghostscript は自動決定された出力サイズをサポートしていません。これは主に、-g使用されるオプションが、レンダリングされた出力自体ではなく、レンダリングされた出力を保持するデバイスサイズを実際に決定しているためです。-dPDFFitPageその出力サイズは、デバイス サイズに一致させようとするスイッチのために変化しています。また、 を使用して jpeg の「デバイス」の高さだけを定義することもできますが-dDEVICEHEIGHT=n、デバイスの幅は変更されていないデフォルトのままになります。

少し面倒な回避策ですが、ghostscript または imagemagick を使用して、pdf ページの幅と高さを取得できます。Ghostscript を使用してこれを行うには、 Using GhostScript to get page size への回答を参照してください。次に、適切な幅を計算して、アスペクト比を保持するように -g フラグを設定できます。これらすべてを行うための単一のコマンドセットを理解できれば、ボーナスポイント:)

于 2012-04-05T03:13:24.777 に答える
4

これを簡単に行うためのPostScriptプログラムを作成できます。ここにスタートがあります:

%!
使用率:gs -sFile=____。pdfscale.ps

/ファイル以外の場所{
  (\ n ***ソースファイルがありません。\(-sFile = ____。pdf\を使用)\ n)=
  使用法
}{
  ポップ
} ifelse

%PDFページの幅と高さを取得します
%
/ GetSize {
  pdfgetpage currentpagedevice
  1インデックスget_any_box
  exch pop dup 2 get exch 3 get
  / PDFHeight exch def
  / PDFWidth exch def
} def


%
%メインループ
%元のPDFファイルのすべてのページ
%
1 1 PDFPageCount
{{
  / PDFPage exch def
  PDFPage GetSize

%ここでは、目的の宛先サイズを知っています
%PDFが収まるように倍率を計算します
%幅または高さ、あるいは何でも
%幅と高さはPDFWidhtとPDFHeightに保存されます
  PDFPage pdfgetpage
  pdfshowpage
} にとって

pdfgetpageとpdfshowpageは、PDFファイルを処理するためのPostScript言語の内部Ghostscript拡張機能です。

于 2012-04-05T07:37:28.530 に答える