


Ghostscriptであそぶ
Ghostscriptは簡潔に表現するとPostScriptとPDFの処理系となるだろう。
Postscriptは印刷機からデータを印刷するためのプログラミング言語であり、PDFは環境に依存せず文章や図版を表示するためのファイル形式として広く普及している。PostscriptやPDFは、それを解釈する機械やソフトウェアに読み込ませる事で処理し、印刷したり表示したりする。
Ghostscriptは、そのようなPostscriptやPDFを処理し、表示したり別の形式に変換するといった事ができる。今回はこのGhostscriptを使って遊んでみる。
Ghostscriptをビルドする
Ghostscriptは人気のあるソフトウェアでもあるため、 ports
、 apt
、 homebrew
など主要なパッケージマネージャを用いてインストールできるだろうし、ビルド済みバイナリも用意されているだろう。
今回は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を使って遊んだ。今さらこんなものを学ぶ意味はないかもしれないし、内部でこれらが使われていたとしても直接使う事はないのだから、仕事としての使い所はないのかもしれない。それでも、少しだけできる事が増えた事は嬉しい。