2014年11月22日土曜日

GhostScriptあれこれ

本稿の内容は、OS X Yosemiteまでを対象とする内容になっている。OS X El Capitan以降には使えないので注意されたい。

最初に書いておくがMac OS X(最近はMacではなく単にOS Xと呼ぶらしい)には、標準でPDFを作成する機能があり、一歩手前のPostScriptファイルも作成できる。だからGhostScriptは通常は必要ない。それにもかかわらずGhostScriptに手を出したそもそものきっかけはImageMagickを使ってみたいと思ったことだった。

ImageMagickのビルドチェックFor a more comprehensive test, run the ImageMagick validation suite. GhostScript is a prerequisite, otherwise the EPS, PS, and PDF tests will fail.と書いてあるので、それでは試しにやってみるか、ということでGhostScriptをビルドしてみることにしたのだ。

結論から言えば、まだImageMagickを本格的に使ってもいないし、当然GhostScriptを使った機能も試してもいない。ここ数日でやったことは、ImageMagickを使うという目的からは大幅に横道にそれていて、本当に必要だったのか怪しい部分もあるが、色々調べたので記録として残しておくことにする。

GhostScriptのビルドについて

  • X11(XQuartz)について
    X11は必要。画面上での確認はX11を入れないとできない。HomebrewのバージョンはX11をサポートしていない。

  • 日本語の縦書き表示について
    Mac OS Xで日本語の縦書き表示ができる上限のバージョンは、GhostScript9.05だと思われる。無論現行バージョンの9.15などでは縦書き表示はできない。
    また、縦書きは画面で表示できるだけで、PDFに変換すると横書きになってしまう。(Cent OSではGhostScript9.07で日本語の縦書き表示ができたがあるようだ)

  • ソースコードの入手先について
    ソースコードの入手は本家は接続が不安定でダウンロードに失敗することが多いのでこちらを用いるのが良い。ただし新しいバージョンは本家にしかない。

  • Dependency(依存ライブラリ)について
    GhostScriptをビルドする前にビルド、インストールしておかなければならない依存ライブラリはない。正確には、GhostScriptのソースコードパッケージに依存ライブラリが同梱されている。(Homebrewのバージョンは違うようだ)

  • configureオプションについて
    configureオプションは./configure --disable-compile-inits --disable-cups --disable-gtk --with-system-libtiffが良いと思われる。(HomebrewのコンパイルオプションからX11非サポートを取り除いたもの)
    なお--with-system-libtiffを使う場合は、あらかじめlibtiffを先にビルド、インストールしておくこと。

  • makeのオプションについて
    makeは-jオプションを使わない。ビルドが早くなるだろうと思ったら大間違いで、エラーで止まってしまう。

日本語フォントの設定について

  • ヒラギノフォントの利用について
    GhostScriptでヒラギノフォントを使用するためには、ResourceにあるCIDFontというフォルダにヒラギノフォントをコピーしてフォント名をローマ字に変更するか、フォント名をローマ字にしたシンボリックリンクを作成する必要がある。シェルスクリプトを作ったので利用されたい。使い方は以下を参照。

    $ sudo sh CIDFontLink.sh
    
  • DTP関連フォントの代用設定について
    GhostScriptでDTP関連フォントをヒラギノフォントで代用するためには、Resource/Init/にあるcidfmapに追記する必要がある。

    実行するコマンド

    $ sudo nano /usr/local/share/ghostscript/9.05/Resource/Init/cidfmap
    

    追記する内容

    /Ryumin-Light           /HiraMinPro-W3 ;
    /Ryumin-Regular         /HiraMinPro-W6 ;
    /FutoMinA101-Bold       /HiraKakuStd-W8 ;
    /GothicBBB-Medium       /HiraKakuPro-W3 ;
    /FutoGoB101-Bold        /HiraKakuPro-W6 ;
    /Jun101-Light           /HiraMaruPro-W4 ;
    

    これは、左側のフォントを右側のフォントで置き換えるという意味の記述である。

  • PostScript表示用フォントファイルについて
    GhostScriptが参照するフォント(ファイル)名は、PostScriptフォント名(ローマ字のフォント名+文字コード種別+横書き<H>と縦書き<V>の区別という書式で構成)になっている必要がある。

    PostScriptフォント名の例
    文字コード種別 PostScriptフォント名 PostScript文字コード*
    JIS X 208 HiraKakuPro-W3-H H
    HiraKakuPro-W3-V V
    EUC-JP HiraKakuPro-W3-EUC-H EUC-H
    HiraKakuPro-W3-EUC-V EUC-V
    UTF-8 HiraKakuPro-W3-UniJIS-UTF8-H UniJIS-UTF8-H
    HiraKakuPro-W3-UniJIS-UTF8-V UniJIS-UTF8-V
    UTF-16 HiraKakuPro-W3-UniJIS-UTF16-H UniJIS-UTF16-H
    HiraKakuPro-W3-UniJIS-UTF16-V UniJIS-UTF16-V

    *PostScript文字コードと勝手な名前で呼んでいるが、これらはResource/CMapに定義されているPostScriptファイルである。

  • フォントファイルの種類について
    最低限用意した方が良いフォントファイルは、ヒラギノファミリーが12種類と、DTP(置き換え)フォントが6種類の合計18種類である。

    最低限用意すべきフォントの種類
    ヒラギノフォント DTP系フォント
    HiraKakuPro-W3 HiraKakuPro-W6 FutoGoB101-Bold
    HiraKakuProN-W3 HiraKakuProN-W6 FutoMinA101-Bold
    HiraKakuStd-W8 HiraKakuStdN-W8 GothicBBB-Medium
    HiraMaruPro-W4 HiraMaruProN-W4 Jun101-Light
    HiraMinPro-W3 HiraMinPro-W6 Ryumin-Light
    HiraMinProN-W3 HiraMinProN-W6 Ryumin-Regular
  • フォントファイルの入手先について
    フォントファイルは上記の情報があれば自作することもできるが、上に書いたフォントだけでも18種類×文字コード4種類×縦横書きの区別2種類=144個作成する必要があり、とても手間がかかる。
    こちらのページの日本語フォントのインストール(3/3)のところにあるので、これを利用させてもらうのが良いだろう。ページ内の説明ではResource内のFontと入れ替えるようになっているが、Resource内のFontフォルダにはGhostScriptで使用されるフォントが35種類入っているので、入れ替えずに必要なものをコピーすること。なお、HiraKakuStdN-W8-UniJISの4種が欠損していたので作成した。こちらからダウンロードされたい。

GhostScriptの使い方について
GhostScriptはPostScriptとPDFのインタープリターである。起動コマンドはgsで、直接起動するか、またはgs anPostScriptFile.psのようにコマンドに続けて開きたいPostScriptファイルを指定する。例えば、

$ gs /usr/local/share/ghostscript/9.05/examples/cjk/article9.ps

と入力すると、次のように一部では有名らしい日本国憲法第9条の条文が表示される。

article9.psの表示画面
article9.psの表示画面

次に表示するのはコマンドを直接起動した場合の使い方の例である。

01 $ gs
02 GPL Ghostscript 9.05 (2012-02-08)
03 Copyright (C) 2010 Artifex Software, Inc.
   All rights reserved.
04 This software comes with NO WARRAN
   TY: see the file PUBLIC fordetails.
05 GS>/HiraKakuStdN-W8-UniJIS-UTF16-H
   findfont
06 Loading HiraKakuStdN-W8-UniJIS-UTF
   -16-H font from /usr/local/share/
   ghostscript/9.05/Resource/Font/
   HiraKakuStdN-W8-UniJIS-UTF16
   -H... 11967552 7243357 38132
   88 25247281 done.
07 GS<1>30 scalefont setfont
08 GS>50 300 moveto
09 GS><30533093306B3061306F> show
10 GS>50 350 moveto
11 GS><533093306B3061306F30> show
12 GS>/HiraKakuStdN-W8-UniJIS-UTF16-V
   findfont
   Loading HiraKakuStdN-W8-UniJIS
   -UTF16-V font from /usr/local/share/
   ghostscript/9.05/Resource/Font/
   HiraKakuStdN-W8-UniJIS-UTF16-V... 
   12000416 7302733 3833472 2534
   870 1 done.
13 GS<1>30 scalefont setfont
14 GS>400 700 moveto
15 GS><30533093306B3061306F> show
16 GS>quit

以下行番号別に説明する。

1行目
起動コマンド。

2〜4行目
お約束のコピーライト、無保証の宣言。

5行目
PostScriptコマンド入力待ちの状態。この例ではフォントを指定している。

6行目
フォントのローディングメッセージ。

7行目
現在のスタックにたまっている数が<1>になっている。ここではフォントのサイズ指定待ちを示し、指定を受けて8行目に移行する。

8行目
どこに印字するかの指定。原点は起動時に開くウインドウの左下でX Y movetoの形で指定する。座標の単位はポイント(1/72インチ)、つまり約0.35mmである。

9行目
印字する文字の指定。半角の大小記号<>で囲まれた中にフォントで指定した文字コードの16進数(Hexdump)で記述する。この例ではUTF16(BE)で「こんにちは」と書いている。16進数文字コード変換は例えば こちらなどがある。
なお、半角カッコ()で囲まれた中には、文字コードではなくHuman Readableな文字そのものを直接書くこともできるが、当然のことながら環境依存性が出るし、作法として正しくないと考える。
特にMac OS XのPreview.appは、文字を直接書いてGhostScriptで作成したPDFを開くとクラッシュするので注意が必要。(Adobe Readerでは平気らしいが未確認。Windows 8.1のリーダーでも読めた)

10〜11行目
UTF16(LE)で入力した例。当然文字化けする。

12〜15行目
縦書きフォントで文字を書いた例。縦書きフォントを指定して縦書き表示ができるのはGhostScript9.05までらしい。9.05でもPDFにすると横書きになってしまう。

16行目
終了命令。GhostScriptとのセッションを終了するときに入力する。

おまけ
縦書き表示のPostScriptファイルを縦書きのままPDF化できないかと考えていたら、 こんなページに出くわした。この手順にそってarticle9.psを改造したものをこっそりと置いておく。GhostScriptの画面と見比べてみるのも、また一考かと思う。

所感
使えるようになるまでずいぶん苦労したが、結局GhostScriptは実用に堪えないというのが実感だ。何しろ縦書き表示がファイルにできない。ただ、ごくわずかではあるがPostScriptと画面表示について勉強できたのが収穫と言えば収穫かも知れない。

付表:GhostScript PDFとPreview.appの互換性
文字コード種別 日本語フォント 日本語と英数字の混在
JIS X 208 英数字が文字化け
EUC-JP
UTF-8 × ×
UTF-16 英数字が文字化け

0 件のコメント :

コメントを投稿