web-dev-qa-db-ja.com

Ghostscriptを使用してJPGをPDFに変換する

渡すべきパラメーターは何ですか?私が使用しているGhostscriptのバージョンは8.71です。

24
Chry Cheng
gs \
 -sDEVICE=pdfwrite \
 -o foo.pdf \
  /usr/local/share/ghostscript/8.71/lib/viewjpeg.ps \
 -c \(my.jpg\) viewJPEG

my.jpgを読み取ってfoo.pdfを生成します。インストールがPostScriptプログラムをインストールした場所を見つける必要がありますviewjpeg.ps

18
Henry

https://gitlab.mister-muffin.de/josch/img2pdf

PleaseStandで述べたように、GhostScriptはJPEGデータをデコードし、その結果 世代損失 となり、img2pdfよりも「10〜100」倍のパフォーマンスが低下します。

ImageMagick(つまり、convert)は、画像をデコードおよび再エンコードします。

29
Robert Fleming

私は、ヘンリーが彼の回答で提供したのと同じ基本的なコマンドラインを、しばらくの間、いくつかの微調整を加えた単純なBashスクリプトで使用してきました。

私の完全なスクリプトは、次の変更されたコマンドを使用して、複数のJPEG画像を複数ページのPDFに変換します。

gs \
 -sDEVICE=pdfwrite \
 -o foo.pdf \
  /usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \
 -c "(1st.jpg)  viewJPEG showpage \
     (2nd.jpg)  viewJPEG showpage \
     (3rd.jpg)  viewJPEG showpage \
     (last.jpg) viewJPEG showpage"

それは次のように呼ばれます:

jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]]

問題は、このコマンドがGhostscriptの同じ(デフォルト)ページサイズ(通常は縦長モードでレターまたはA4)を使用し、各JPEG画像がこのページ幅やページ高さに合わせて縮小され、左下隅に配置されることです。 。

私のスクリプトは、各PDFページで、ページの元のJPEGと同じページ寸法を使用します。JPEGの寸法を自動検出するには、ImageMagickのidentifyコマンドを使用します。

 identify -format "%[fx:(w)] %[fx:(h)]" some.jpeg

完全なスクリプトのコードは次のとおりです。

#!/bin/bash
#
#############################################################################
#  
#  Shellscript to convert a set of JPEG files to a multipage PDF.
#
#  Requirements: (1) Ghostscript needs to be installed on the local system.
#                (2) ImageMagick needs to be installed on the local system.
#
#  Usage:  jpegs2pdf.sh output.pdf file1.jpeg [file2.jpeg [file2.jpeg [...]]]
#
#  Copyright (c) 2007, <[email protected]>
#                Use, distribute and modify without any restrictions.
#
#  Versions:
#          v1.0.0, Jul 12 2007:  initial version
#          v1.0.1, Jan 07 2011:  set viewJPEG.ps path (self-compiled GS 9.02)
#
#############################################################################

outfile=$1
shift

param=""
for i in "$@" ; do
   dimension=$(identify -format "%[fx:(w)] %[fx:(h)]" "${i}")
   param="${param} <</PageSize [${dimension}]>> setpagedevice (${i}) viewJPEG showpage"
done

gs \
  -sDEVICE=pdfwrite \
  -dPDFSETTINGS=/prepress \
  -o "$outfile" \
   /usr/local/share/ghostscript/9.02/lib/viewjpeg.ps \
  -c "${param}"
13
Kurt Pfeifle

あるいは、一部のLinuxディストリビューションではconvert pic1.jpg pic2.jpg out.pdfは、さまざまな結果で仕事をします

5
vecvan

私はGhostscriptバージョン9.1を持っているので、次の行のコマンドDID N'T WORKED FOR ME

/usr/local/share/ghostscript/9.02/lib/viewjpeg.ps

だから私はコマンドを修正して行を編集し、これを使用しましたIT WORKED FOR ME

viewjpeg.ps

したがって、新しい変更されたコマンド IS以下:

gs \
     -sDEVICE=pdfwrite \
     -o foo.pdf \
      viewjpeg.ps \
     -c "(1st.jpg)  viewJPEG showpage \
         (2nd.jpg)  viewJPEG showpage \
         (3rd.jpg)  viewJPEG showpage \
         (last.jpg) viewJPEG showpage"
3
Rahul Gupta

GhostScriptはPostScriptインタープリターであるため、JPEG入力を直接サポートせず、JPEG出力のみをサポートします。とはいえ、JPEG解凍をサポートしています(プログレッシブJPEGを除く)。

PostScriptプログラムとそれに付随するシェルスクリプトがあり、これを利用して jpeg2eps と呼ばれます。 PDFを取得するには、ほとんどのシステムでスクリプト pstopdf を使用できます。このスクリプトは、GhostScriptを介して各入力ファイル(jpeg2epsスクリプトの出力を使用します)を実行します。

1
PleaseStand

Windowsでは、-cパラメータでの絶対パスを使用する必要がある場合、複数のjpgをPDFに上記の回答で変換すると問題が発生しました。ダブルスラッシュを使用する必要があることがわかりました " // "はファイルパスの区切り文字です。"\"文字を使用すると、メッセージが表示されました

エラー:--file ---の/ ioerror

これは私のために働いたコマンドです:

gswin32 -dNOPAUSE -q -sDEVICE=pdfwrite -r500 -dBATCH -sOutputFile="C:\temp\tempImageFiles\5e7e0cc2-9699-44d4-be6b-ad5cd338f012\output\test.pdf" "C:\Program Files (x86)\gs\gs9.06\lib\viewjpeg.ps" -c "(C://temp//tempImageFiles//5e7e0cc2-9699-44d4-be6b-ad5cd338f012//input//test0.jpg) viewJPEG showpage (C://temp//tempImageFiles//5e7e0cc2-9699-44d4-be6b-ad5cd338f012//input//test1.jpg) viewJPEG showpage (C://temp//tempImageFiles//5e7e0cc2-9699-44d4-be6b-ad5cd338f012//input//test2.jpg) viewJPEG showpage (C://temp//tempImageFiles//5e7e0cc2-9699-44d4-be6b-ad5cd338f012//input//test3.jpg) viewJPEG showpage (C://temp//tempImageFiles//5e7e0cc2-9699-44d4-be6b-ad5cd338f012//input//test4.jpg) viewJPEG showpage"

そして、これはエラーメッセージを生成したものです:

gswin32 -dNOPAUSE -q -sDEVICE=pdfwrite -r500 -dBATCH -sOutputFile="C:\temp\tempImageFiles\5e7e0cc2-9699-44d4-be6b-ad5cd338f012\output\test.pdf" "C:\Program Files (x86)\gs\gs9.06\lib\viewjpeg.ps" -c "(C:\temp\tempImageFiles\5e7e0cc2-9699-44d4-be6b-ad5cd338f012\input\test0.jpg) viewJPEG showpage (C:\temp\tempImageFiles\5e7e0cc2-9699-44d4-be6b-ad5cd338f012\input\test1.jpg) viewJPEG showpage (C:\temp\tempImageFiles\5e7e0cc2-9699-44d4-be6b-ad5cd338f012\input\test2.jpg) viewJPEG showpage (C:\temp\tempImageFiles\5e7e0cc2-9699-44d4-be6b-ad5cd338f012\input\test3.jpg) viewJPEG showpage (C:\temp\tempImageFiles\5e7e0cc2-9699-44d4-be6b-ad5cd338f012\input\test4.jpg) viewJPEG showpage"

Ghostscript error message

0
Danwize