Ghostscriptであそぶ

しむどん 2025-01-26

Ghostscriptは簡潔に表現するとPostScriptとPDFの処理系となるだろう。

Postscriptは印刷機からデータを印刷するためのプログラミング言語であり、PDFは環境に依存せず文章や図版を表示するためのファイル形式として広く普及している。PostscriptやPDFは、それを解釈する機械やソフトウェアに読み込ませる事で処理し、印刷したり表示したりする。

Ghostscriptは、そのようなPostscriptやPDFを処理し、表示したり別の形式に変換するといった事ができる。今回はこのGhostscriptを使って遊んでみる。

Ghostscriptをビルドする

Ghostscriptは人気のあるソフトウェアでもあるため、 portsapthomebrew など主要なパッケージマネージャを用いてインストールできるだろうし、ビルド済みバイナリも用意されているだろう。

今回はGhostscriptがどういったものかも良く分かっていないため、ソースコードをダウンロードし、手動でビルドして使う事にした。ソースコードはここからtarballをダウンロードした。

https://www.ghostscript.com/releases/gsdnld.html

tarballを解凍し、作業ディレクトリを移動する。

tar -zxvf ghostscript-10.04.0.tar.gz
cd ghostscript-10.04.0

Ghostscriptは、初期化コードをビルド時にコンパイルし、実行ファイルに組み込む。起動にかかる時間は速くなるが、デバッグしにくくなったり、初期化ファイルの変更ができなくなる。この機能はコンパイル時に configure の段階で --disable-compile-inits を指定する事で無効にできる。

--disable-compile-inits を指定し、 ./configure を実行する。また、今回はドライバーとして画像しか使うつもりがないため、 --with-drivers\=PNG を指定する。

./configure --disable-compile-inits --prefix ${HOME}/.ghostscript --with-drivers=PNG

コンパイルする。

make

インストールする。

make install

--prefix~/.ghostscript を指定したため、この配下にインストールされる。

これは必須ではないが、パスを直接指定するのは面倒なので、環境変数 PATH に設定を追加しておく。

export PATH=~/.ghostscript/bin:${PATH}

使用可能なフォントを確認する

現代的なソフトウェアで文字を表示する場合、アウトラインフォントを使用される事がほとんどだろう。組版や印刷で使用されるTeX、DVI、PDF、PostScriptなどでは、用途のせいなのか又は古くから存在するせいか自由度が高く、その分フォントの指定に癖があり、しばしば文字化けする。文字化けの理由の多くは、正しく設定できていない事だろう。

設定を間違わないためにも、使用可能なフォントを確認しておこう。

Ghostscriptを起動する。

gs

使用可能なフォント一覧を表示する。

(*) { == } 256 string /Font resourceforall

小さなPostScriptを書く

小さなPostScriptを作成し、それを元に画像を生成する事で、制作の手順を確認する。

%!PS-Adobe-3.0
%%Title: Hello world!
%%Creator: TakesxiSximada
%%CreationDate: Thu Feb  4 04:51:03 2025
%%Orientation: Portrait
%%Pages: 1
%%EndComments

/NimbusSans-Regular findfont 15 scalefont setfont
60 80 moveto
(Hello world!) show
showpage

このPostScriptからPNGを生成する。

gs -dNOPAUSE -dBATCH -r350 -g1254x758 -sDEVICE=png16m -sOutputFile=minimal.png minimal.ps

白地に「Hello world!」という文字だけのPNGファイルが生成される。

グリフを直接指定して表示する

フォントのグリフを直接指定し、印字する事ができる。

%!PS-Adobe-3.0
%%Title: example
%%Creator: symdon
%%CreationDate: Thu Feb  4 04:51:03 2025
%%Orientation: Portrait
%%Pages: 1
%%EndComments

/HackGen-Regular findfont 15 scalefont setfont
60 80 moveto
/cid01454#1 glyphshow
/cid01456#1 glyphshow
/cid01458#1 glyphshow
/cid01460#1 glyphshow
/cid01462#1 glyphshow
showpage

この機能は通常使う事はないが、フォント周りの問題の調査時には役に立つかもしれない。

雑感

今回はGhostscriptを使って遊んだ。今さらこんなものを学ぶ意味はないかもしれないし、内部でこれらが使われていたとしても直接使う事はないのだから、仕事としての使い所はないのかもしれない。それでも、少しだけできる事が増えた事は嬉しい。