掴んだ物(技術)はちゃんと食べる記録帳

興味を持ったものに対する足跡を残していくために作成しました。勉強しながら書いているので、間違いや短絡もあると思います。ご指摘いただけると喜びます。

Let's PostScript(1) Hello World!!

教材と環境

いまさらながら、PostScript(一部PDF)について、ざっくりと勉強していこうと思います。

使用する教材は、いわゆる赤本です。

環境はGhostScriptのVersion9.52を用います。

対話モードで遊ぶ

引数なしでGhostScriptを起動すると、対話モードで起動するので、これを使って描画してみます。

GPL Ghostscript 9.52 (2020-03-19)
Copyright (C) 2020 Artifex Software, Inc.  All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
GS>

Hello world

PostScriptは文字列の表現方法として3つの種類があります。

  • テキスト(Hello World!!)
  • 16進データ<48656C6C6F20576F726C642121>
  • ASCII85データ※今は扱わない。

ASCII85は対話モードで使うには無理があるので、まずは上記二つのHallo world!!を表示します。

文字を表示するには、"どの書体で、どのサイズで、どこに、何を書くかを示す必要があります。

フォントの選択

findfontオペレータで選択します

書式設定

scalefontオペレータで指定します。

座標指定

movetoオペレータで指定します。

文字指定

テキスト(Hello World!!)

16進データ<48656C6C6F20576F726C642121>

で今回はHello Worldします。

初めてのshowpage

これをGhostScriptの対話モードで入力していくとこのような感じになります。

GS>/Helvetica findfont 20 scalefont setfont
GS>0 0 moveto
GS>(Hello world!!) show
GS>100 100 moveto
GS><48656C6C6F20576F726C642121> show
GS>showpage
>>showpage, press <return> to continue<<

最後のshowpageで画像を出力します。出てくる画像は以下のようなものです。ほとんどが空白なのですが、少し下にスクロールすると、Hello Worldが見えてきます。

f:id:hlsme:20200927181453j:plain

リテラルテキストのHello World(座標0,0)が下で、16進データで指定したHellow World(座標100,100)が上です。 違和感を感じますが、この辺りはグラフィックのあたりで勉強していこうと思います。

最後に、先ほどのHello Worldですが、複数のオペレータをまとめて実行しているので、できるだけ細かく指示しなおしてみます。出力される画像は同じです。

GS>/Helvetica
GS<1>findfont
GS<1>20
GS<2>scalefont
GS<1>setfont
GS>0 0
GS<2>moveto
GS>(Hello World!!)
GS<1>show
GS>0 0
GS<2>moveto
GS><48656C6C6F20576F726C642121>
GS<1>show
GS>showpage
>>showpage, press <return> to continue<<

増減するGS<...>は何なんのかってあたりを次回勉強していこうかと思います。