以下の記事は,見当外れです.試行の記録として残しておきます.
内容
序
今まで動いていた自作のPerlスクリプトによるQSLカード記入面のデータ出力(enscript入力形式) から,enscript (PS=Postscript形式の出力)により印刷イメージのPSを生成する手順で,それぞれは動くのですが,出力されたPS形式のファイルをPDF化すると,どうしても等幅フォントCourierが文字抜けします.全部が出ないわけでなく,ざっと見て大文字だけかと思えばそうでもなく,また数字は “1” 以外全部抜けているようです.
試しにCourierをTimesに変えてみると,全部文字が出ますのでフォントに依存した問題のようです.残念ながらEnscriptに備えられたフォントの中で等幅のものはCourierしかないので,別の等幅フォントをインストールして動くかな,というのが,ここまでの経緯と現在の考えです.
Courierはデータを等幅で印刷するのに非常に優れています.これに代わる等幅フォントがないかとネットでいろいろ調べましたが,少なくとも筆者の趣味に合うものはありませんでした.
そこで,あとの作業が混乱しそうな気もしますが,フリーで出回っている “Courier New” を追加インストールしてみることにしました.Enscriptに大昔, “Monaco” を追加インストールした経験があるはずですが,なんの記録も残っていませんので,ゼロからの出発となります.
想定している手順
- フリーのCourier New のTrue Typeのフォント(TTF)をネットで探し出す(たぶん “Courier New.TTF”)
- TTFからAFMを作成(事前の調べではLinux用のツールは見つかりませんでしたが,オンラインで変換するサイトが複数あるようです)
- Courier New.TTFを正しい方法でホストにインストールする
- AFMを
/usr/share/enscript/afm
に追加し,font.map
を編集する - 自作Perlスクリプトを編集して,これまで “Courier” と指定していたところを “CourierNew” と指定するようにする.
- 祈ってパールスクリプトの出力をenscriptにかける
- ps2pdf (Ghostscriptの付属品)でPDFに変換して,文字抜けがなければめでたしめでたし
実践
フリーのCourier New
あちこちにありますが,Fonts Geekというサイトから,Courier NewとCourier New Boldをダウンロードしました(ついでにMonacoも).
Linuxのホストへのインストール
Slackware ARM 15.0のホストにTrue Typeフォントをインストールする手順を探してインストールします./usr/share/fonts/TTF
にコピーしてから,テーブルファイルをupdateするコマンドを実行するような方法だと思いましたが,そのとおりでした.
ダウンロードしたフォントのファイル名は, “Courier New Bold.ttf”などスペースが入っていますが, “Courier-New-Bold.ttf” のように,スペースをハイフンに変えました.また, “Regular” は削除しました.
Updateには,mkfontdir
とmkfontscale
コマンドを使います.
AFMファイルの作成
AFMは, “Adobe Font Metrics” というらしいです.Enscriptにはこのファイルが必要です.
事前の調査では変換ツールが見つかりませんでしたが,改めて調べると,ttf2afm
というツールがSlackware ARM 15.0のホストにインストール済みでした.
出力のファイル名については,/usr/share/enscript/afm
内の例に習って,例えば “Courier-New-Bold.ttf” に対応するafmは "cnb.afm"
としました.
AFMファイルのインストールとmapの修正
さて,AFMファイルができたので,/usr/share/enscript/afm
にコピーします.
同じディレクトリーにあるfont.mapの内容に習って追加したAFMファイルを記述します.
祈って実行
自作のPerlスクリプトで,これまで “Courier” としていたところを “Courier-New” と置き換えて実行し,出力ファイルをenscriptで処理してみます.
成功!
うまくいきました.ただし,Monacoに関してはライセンス上の成約からフォントを組み込めないとかメッセージが出ましたが,出力に全く問題ないので良しとします.
PSファイルは,Ghostscript付属のps2pdf
でPDF化しています.