[[Ghostscript]] > 使い方

*使い方 [#s2e0cdb0]

&color(White,#5F2F2F){  ''◆CONTENTS◆''  };&br;

#contents

**Ghostscript の起動コマンド [#se3b8ef2]

Microsoft Windows なら
-TeX Live, W32TeX に付属の rungs の場合は
 rungs
-64-bit 版の Ghostscript の場合は
 gswin64c
-32-bit 版の Ghostscript の場合は
 gswin32c

です。

UNIX 互換 OS なら
 $ gs
です。

**サポートしているデバイスを調べるには [#d708538b]

Ghostscript のサポートする出力形式を調べるには~
Microsoft Windows では
-TeX Live, W32TeX に付属の rungs の場合は
 rungs -h
-64-bit 版の Ghostscript の場合は
 gswin64c -h
-32-bit 版の Ghostscript の場合は
 gswin32c -h

と打ち込みます。

UNIX 互換 OS では
 $ gs -h
と打ち込みます。

あるいは Ghostscript を起動して
 GS>
のプロンプトで
 GS>devicenames ==
と打ち込みます。Ghostscript のプロンプトから抜け出るには
 GS>quit
と打ち込みます。

**EPS から PNG への変換 [#g1adcf94]
EPS を α(アルファ)チャンネルを使った透過機能附きの PNG に
変換する場合には Microsoft Windows の~
Windows PowerShell なら例えば
 PS > rungs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pngalpha -dEPSCrop `
 >> -r600 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 `
 >> -sOutputFile="output.png" "input.eps"
 >>
コマンド プロンプトなら例えば
 >rungs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pngalpha -dEPSCrop ^
 More? -r600 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 ^
 More? -sOutputFile="output.png" "input.eps"
とします。~
UNIX 互換 OS なら例えば
 $ gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=pngalpha -dEPSCrop -r600 \
 > -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="output.png" "input.eps"
とします。

EPS を256色 PNG に変換する場合には Microsoft Windows の~
Windows PowerShell なら例えば
 PS > rungs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=png256 -dEPSCrop `
 >> -r600 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 `
 >> -sOutputFile="output.png" "input.eps"
 >>
とします。~
コマンド プロンプトなら例えば
 >rungs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=png256 -dEPSCrop ^
 More? -r600 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 ^
 More? -sOutputFile="output.png" "input.eps"
とします。~
UNIX 互換 OS なら例えば
 $ gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=png256 -dEPSCrop -r600 \
 > -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="output.png" "input.eps"
とします。

**PS を GIF に変換するには [#p31562f1]

次のようにします。

 gs -q -dNOPAUSE -dBATCH -sDEVICE=ppm -sOutputFile=- foo.ps | ppmtogif >foo.gif

デフォールトの解像度は 72×72 ですが,“-r600x600” のようなオプションで
解像度が変えられます。

 gs -q -dNOPAUSE -dBATCH -sDEVICE=ppm -sOutputFile=- -r600x600 foo.ps | ppmtogif >foo.gif

周囲に余分な領域がある場合は,次のようにしてクロップします。

 gs -q -dNOPAUSE -dBATCH -sDEVICE=ppm -sOutputFile=- foo.ps | pnmcrop | ppmtogif >foo.gif

上で使っている ppmtogif,pnmcrop は PBMPLUS や NetPBM というフリーソフトの
画像フォーマット変換パッケージに入っています。
この ppmtogif の部分を変えればいろいろな形式に変換できます。

**PDF をアウトライン化するには [#b7g015t4]

いったん eps2write (gs9.10 以前の場合は epswrite) を用いてアウトライン化 EPS を出力し,それを再度 PDF に変換します。~
[[TeX2img]] (Win, Mac) の動作が参考になるかもしれません。

**PDF への CJK フォントの非埋め込み制御 [#zd1cf8d8]
標準ではオプション “-sDEVICE="pdfwrite"” や ps2pdf.bat によって
PDF を作成する場合,CJK フォントは全て埋め込まれます。~
CJK フォントを埋め込まないように制御するには “/NeverEmbed” を使います。~
例えば “foo.ps” という PostScript ファイルを PDF に
変換する場合に,/MS-Mincho (MS 明朝)を埋め込まないようにするためには~
Windows PowerShell に次のようにコマンドを入力します。~

 C:\Users\$Env:USERNAME> rungs -dSAFER -q -dBATCH -dNOPAUSE `
 >> -sDEVICE="pdfwrite" -dCompatibilityLevel="1.4" -sOutputFile="foo.pdf" `
 >> -c ".setpdfwrite <</NeverEmbed [/MS-Mincho]>> setdistillerparams" `
 >> -f "foo.ps"
 >>

コマンド プロンプトの場合は次のようにコマンドを入力します。

 >rungs -dSAFER -q -dBATCH -dNOPAUSE ^
 More? -sDEVICE="pdfwrite" -dCompatibilityLevel="1.4" -sOutputFile="foo.pdf" ^
 More? -c ".setpdfwrite <</NeverEmbed [/MS-Mincho]>> setdistillerparams" ^
 More? -f "foo.ps"

ここで “/NeverEmbed” で指定するフォント名は PostScript ファイル内に
記述されているフォント名ではなく,''実際に埋め込むフォント名''でなければ
効果がありません。

また,lib/neverembed.ps に非埋め込み制御を行うフォント名をあらかじめ
記述しておいて,次のように~
Windows PowerShell にコマンドを入力する方法もあります。

 C:\Users\$Env:USERNAME> rungs -dSAFER -q -dBATCH -dNOPAUSE `
 >> -sDEVICE="pdfwrite" -dCompatibilityLevel="1.4" -sOutputFile="foo.pdf" `
 >> -c .setpdfwrite -f "neverembed.ps" -f "foo.ps"
 >>

コマンド プロンプトの場合は次のようにコマンドを入力します。
 >rungs -dSAFER -q -dBATCH -dNOPAUSE ^
 More? -sDEVICE="pdfwrite" -dCompatibilityLevel="1.4" -sOutputFile="foo.pdf" ^
 More? -c .setpdfwrite -f "neverembed.ps" -f "foo.ps"

lib/neverembed.ps には,例えば次のように記述しておきます。

----
 %!
 % neverembed.ps
 %
 <<
 /NeverEmbed [
 %/Times-Roman /Times-Bold
 %/Times-Italic /Times-BoldItalic
 %/Helvetica /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique
 %/Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique
 %/Symbol /ZapfDingbats
 /Ryumin-Light /HeiseiMin-W3
 %/GothicBBB-Medium /HeiseiKakuGo-W5
 /STSong-Light
 %/STHeiti-Regular
 /MSung-Light
 %/MHei-Medium
 /HYSMyeongJo-Medium
 %/HYGoThic-Medium
 /KozMinProVI-Regular /KozGoProVI-Medium /KozGoPro-Medium
 /AdobeSongStd-Light
 %/AdobeHeitiStd-Regular
 /AdobeMingStd-Light /AdobeMyungjoStd-Medium
 /KozMinPro-Regular-Acro /KozGoPro-Medium-Acro
 /AdobeSongStd-Light-Acro /AdobeMingStd-Light-Acro /AdobeMyungjoStd-Medium-Acro
 /STSongStd-Light-Acro /MSungStd-Light-Acro /HYSMyeongJoStd-Medium-Acro
 /HeiseiMin-W3-Acro /HeiseiKakuGo-W5-Acro
 /STSong-Light-Acro /MSung-Light-Acro /HYSMyeongJo-Medium-Acro
 /MS-Mincho
 %/MS-Gothic /HGGothicM
 /NSimSun /MingLiU /BatangChe
 ]
 /AlwaysEmbed [
 %/Times-Roman /Times-Bold
 %/Times-Italic /Times-BoldItalic
 %/Helvetica /Helvetica-Oblique /Helvetica-Bold /Helvetica-BoldOblique
 %/Courier /Courier-Oblique /Courier-Bold /Courier-BoldOblique
 %/Symbol /ZapfDingbats
 ]
 >> setdistillerparams
----

この lib/neverembed.ps への設定を ps2pdf でも有効に
するためには,[[gs\gs$(rungs --version)\lib\ps2pdfxx.bat:http://git.ghostscript.com/?p=ghostpdl.git;a=blob;f=lib/ps2pdfxx.bat;hb=HEAD]] の記述内容の25行目
 echo -c .setpdfwrite -f%1 >>"%TEMP%\_.at"2
を
 REM echo -c .setpdfwrite -f%1 >>"%TEMP%\_.at"2
のようにコメントアウトし
 echo -c .setpdfwrite -f neverembed.ps -f%1 >>"%TEMP%\_.at"2
を追加します。~

さらに dvipdfmx が PostScript ファイルや EPS ファイルを PDF に変換する場合に
lib/neverembed.ps への設定を有効にするためには

[[TeX Live]] の場合は [[dvipdfmx.cfg:http://www.tug.org/svn/texlive/trunk/Master/texmf-dist/dvipdfmx/dvipdfmx.cfg?view=markup]] の記述内容の159行目
 D  "rungs -q -dNOPAUSE -dBATCH -dEPSCrop -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=%v -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dAutoRotatePages=/None -sOutputFile='%o' '%i' -c quit"
に次のように “-f neverembed.ps ” を挿入します。

 D  "rungs -q -dNOPAUSE -dBATCH -dEPSCrop -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=%v -dAutoFilterGrayImages=false -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false -dColorImageFilter=/FlateEncode -dAutoRotatePages=/None -sOutputFile='%o' -f neverembed.ps '%i' -c quit"

[[W32TeX]] の場合は $TEXMF/dvipdfmx/config/dvipdfmx.cfg の記述内容の33行目
 D "rungs -q -dNOPAUSE -dBATCH -dEPSCrop -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dAutoRotatePages=/None -dCompatibilityLevel=%v -dAutoFilterGrayImages=false -dAutoFilterColorImages=false -dGrayImageFilter=/FlateEncode -dColorImageFilter=/FlateEncode -dUseFlateCompression=true -sOutputFile='%o' -c .setpdfwrite -f '%i' -c quit"
に次のように “-f neverembed.ps ” を挿入します。

 D "rungs -q -dNOPAUSE -dBATCH -dEPSCrop -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dAutoRotatePages=/None -dCompatibilityLevel=%v -dAutoFilterGrayImages=false -dAutoFilterColorImages=false -dGrayImageFilter=/FlateEncode -dColorImageFilter=/FlateEncode -dUseFlateCompression=true -sOutputFile='%o' -c .setpdfwrite -f neverembed.ps -f '%i' -c quit"

**PDF への欧文用フォントの埋め込み制御 [#y3b70de6]
Ghostscript では “/NeverEmbed”,“/AlwaysEmbed” を使って
PDF への欧文用フォントの埋め込み制御が行えます。~
“/NeverEmbed”,“/AlwaysEmbed” がうまく働かない場合は
[[Resource/Init/gs_pdfwr.ps:http://git.ghostscript.com/?p=ghostpdl.git;a=blob;f=Resource/Init/gs_pdfwr.ps;hb=HEAD]] の記述内容を書き換えることで
PDF への欧文用フォントの埋め込み制御を行います。

デフォルトでは PostScript Level 1 での基本14書体である
Times ファミリ,Helvetica ファミリ,Courier ファミリ,Symbol,ZapfDingbats が
埋め込まれません。~
しかし macOS を除く UNIX 互換 OS での Adobe Reader で
Times-Italic や Times-BoldItalic を埋め込んでいない PDF を
表示すると,Times-Italic や Times-BoldItalic の部分が Italic 体ではなく
Oblique 体(Slanted 体,斜体)で表示されてしまいます。
(Xpdf で表示すると PostScript Level 1 での基本14書体は埋め込まれていなくても
正確に表示されます。しかし Xpdf の場合は非埋め込みの中国語フォント・韓国語
[&#xd55c;&#xad6d;&#xc5b4;]フォントが表示されず,非埋め込みの日本語フォントに
使われる書体にも不満がある方が多いとのこと。)~
そこで Times-Italic と
Times-BoldItalic だけを埋め込み,Times-Roman,Times-Bold,Helvetica
ファミリ,Courier ファミリ,Symbol,ZapfDingbats だけを
埋め込まないようにすると,ほとんどの環境で PostScript Level 1 での基本14書体が
正確に表示されます。~
このような設定にするには,Resource/Init/gs_pdfwr.ps の
記述内容の[[31&ndash;38行目:http://git.ghostscript.com/?p=ghostpdl.git;a=blob;f=Resource/Init/gs_pdfwr.ps;hb=HEAD#l31]]のうち36行目を次のように変更してください。~

 /.a2112 [2 1 1 2] readonly def
 /.a1111 [1 1 1 1] readonly def
 /.standardfonts [
   /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique
   /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique
   /Times-Roman /Times-Bold
 %  /Times-Italic /Times-BoldItalic
   /Symbol /ZapfDingbats
 ] readonly def

また TeX ファイルから作った Times ファミリや
Helvetica ファミリを埋め込んでいない PDF を Microsoft Windows の
Adobe Reader/Acrobat で表示すると,Times ファミリや Helvetica ファミリでの
文字の一部(\={o} [&#x14d;],\b{b} [&#x1e07;],\dj [&#x111;],$\hbar$ など)が
正確に表示されません。~
そこで Times ファミリと Helvetica ファミリは
埋め込み,Courier ファミリ,Symbol,ZapfDingbats だけを
埋め込まないようにすると,Microsoft Windows を含めたほとんどの環境で
PostScript Level 1 での基本14書体が正確に表示されます。~
このような設定にするには,Resource/Init/gs_pdfwr.ps の記述内容の[[31&ndash;38行目:http://git.ghostscript.com/?p=ghostpdl.git;a=blob;f=Resource/Init/gs_pdfwr.ps;hb=HEAD#l31]]の
うち[[35&ndash;36行目:http://git.ghostscript.com/?p=ghostpdl.git;a=blob;f=Resource/Init/gs_pdfwr.ps;hb=HEAD#l35]]を次のようにコメントアウトしてください。~

 /.a2112 [2 1 1 2] readonly def
 /.a1111 [1 1 1 1] readonly def
 /.standardfonts [
   /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique
 %  /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique
 %  /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic
   /Symbol /ZapfDingbats
 ] readonly def


*関連リンク [#we8f22aa]
-[http://acetaminophen.hatenablog.com/archive/category/Ghostscript &quot;Ghostscript&quot; - 記事一覧 - Acetaminophen’s diary]
--[[Ghostscript のこと(1):アウトライン化の詳細:http://acetaminophen.hatenablog.com/entry/2014/10/16/110255]]
--[[Ghostscript のこと(2):不具合?:http://acetaminophen.hatenablog.com/entry/2014/10/17/145447]]
--[[Ghostscript のこと(3):新しいアウトライン化の知見:http://acetaminophen.hatenablog.com/entry/2015/03/14/221359]]
-[[GhostScriptを使ってPDFファイルを印刷する:https://qiita.com//Masahiro-Ito/items/ffea4838f57bb3de5232]]