PostScript をインタプリタ形式で実行できる Ghostscript の AGPL 版を用いて、PostScript に定義されている関数をコマンドプロンプト上で実行して結果を出力する手順です。
例として、プログラムを魔法陣の画像に変換できる「mystical_ps」の中に含まれているクイックソートを行うサンプルの .ps スクリプトを使用します。

※ GhostScript のバージョンは 10.05.1 です。
GhostScript (AGPL 版) のインストール
GhostScript (AGPL 版) のインストールについては以下の記事を参照してください。
GhostScript のフォルダパスを Path 環境変数に追加
前回、 GhostScript をインストールしましたが、それをコマンドプロンプトなどで用いる場合は、 Path 環境変数にその実行形式 (.exe) ファイルがあるフォルダのパスを追加しておくと、さまざまなディレクトリでファイル名だけで利用できて便利です。
※追加しなくても、 exe ファイルまでのフルパスをコマンドプロンプトで指定することで実行は可能です。
コマンドプロンプトから利用できる gswin64c.exe は、インストールしたフォルダの bin フォルダにあります。

また、下記の引用のとおり、 lib フォルダの Path 環境変数に追加しておかないと、正常に動作しない可能性があります。
そのため、Path 環境変数に、 GhostScript の bin と lib の2つのフォルダパスを追加します。

インストールした Ghostscript に含まれる bin フォルダーと lib フォルダーをユーザー環境変数 Path またはシステム環境変数 Path のリストに追加します。 bin だけでなく lib も忘れずに追加しないと,正常に動作しません。
Ghostscript/Windows – TeX Wiki
Path 環境変数にパスを追加するために「システム環境変数の編集」ダイアログを開きます。
Windows 10 の場合、デスクトップ左下の検索ボックスで「環境変数」と入力すると検索される「システム環境変数の編集 コントロールパネル」の「開く」リンクをクリックしても開くことができます。

表示された「システムのプロパティ」ダイアログの「詳細設定」タブの「環境変数」ボタンを押します。

PC の全ユーザが使う場合はシステム環境変数でもよいですが、ユーザごとに設定したい場合は、「ユーザー環境変数」枠内の Path 環境変数を選択して「編集」ボタンを押します。

システム環境変数は全ユーザで共通の環境変数です。
「システム環境変数」と「ユーザ環境変数」の違い|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
(中略)
それに対して、ユーザ環境変数は設定したユーザでのみ有効な環境変数です。
「環境変数名の編集」ダイアログで「新規」ボタンを押すと、空行に新たなパスを追加できます。

GhostScript のインストールフォルダの bin と lib それぞれのフォルダパスを追加して、 OK ボタン尾を押します。
この章で開いてきた各ダイアログも OK ボタンで閉じましょう。

Path が通ったことの確認
Path 環境変数に GhostScript の bin フォルダパスが追加されていれば、コマンドプロンプトから、そのフォルダ内にある gswin64c.exe をフォルダパスをつけずに実行できます。
実行したい PostScript のあるフォルダをエクスプローラで開いて、アドレスバーに cmd⏎ を入力してコマンドプロンプトを開きます。
※最初からそのフォルダが作業ディレクトリに設定されています。


Microsoft Windows [Version 10.0.19045.5854]
(c) Microsoft Corporation. All rights reserved.
G:\Dev\Mistical\mystical_ps-main\mystical_ps-main\examples>gswin64c -h
GPL Ghostscript 10.05.1 (2025-04-29)
Copyright (C) 2025 Artifex Software, Inc. All rights reserved.
Usage: gs [switches] [file1.ps file2.ps ...]
Most frequently used switches: (you can use # in place of =)
-dNOPAUSE no pause after page | -q `quiet', fewer messages
-g<width>x<height> page size in pixels | -r<res> pixels/inch resolution
-sDEVICE=<devname> select device | -dBATCH exit after last file
-sOutputFile=<file> select output file: - for stdout, |command for pipe,
embed %d or %ld for page #
Input formats: PostScript PostScriptLevel1 PostScriptLevel2 PostScriptLevel3 PDF
Default output device: display
Available devices:
bbox bit bitcmyk bitrgb bitrgbtags bj10e bj200 bjc600 bjc800 bmp16 bmp16m
bmp256 bmp32b bmpgray bmpmono bmpsep1 bmpsep8 cdeskjet cdj500 cdj550
cdjcolor cdjmono chameleon cljet5 cljet5c cljet5pr declj250 deskjet
devicen display dj505j djet500 djet500c dnj650c docxwrite eps2write
eps9high eps9mid epson epsonc fpng fs600 hocr ibmpro ijs imagen ink_cov
inkcov jetp3852 jpeg jpegcmyk jpeggray laserjet lbp8 lj250 lj3100sw
lj4dith lj4dithp lj5gray ljet2p ljet3 ljet3d ljet4 ljet4d ljet4pjl
ljetplus lp2563 m8510 mswinpr2 necp6 nullpage oce9050 ocr paintjet pam
pamcmyk32 pamcmyk4 pbm pbmraw pclm pclm8 pcx16 pcx24b pcx256 pcxcmyk
pcxgray pcxmono pdfimage24 pdfimage32 pdfimage8 pdfocr24 pdfocr32 pdfocr8
pdfwrite pgm pgmraw pgnm pgnmraw picty180 pj pjetxl pjxl pjxl300 pkmraw
plan planc plang plank planm planr plib plibc plibg plibk plibm png16
png16m png16malpha png256 png48 pngalpha pnggray pngmono pngmonod pnm
pnmcmyk pnmraw ppm ppmraw pppm ps2write psdcmyk psdcmyk16 psdcmykog
psdcmyktags psdcmyktags16 psdrgb psdrgb16 psdrgbtags pxlcolor pxlmono
r4081 sj48 spotcmyk st800 stcolor t4693d2 t4693d4 t4693d8 tek4696
tiff12nc tiff24nc tiff32nc tiff48nc tiff64nc tiffcrle tiffg3 tiffg32d
tiffg4 tiffgray tifflzw tiffpack tiffscaled tiffscaled24 tiffscaled32
tiffscaled4 tiffscaled8 tiffsep tiffsep1 txtwrite uniprint urfcmyk
urfgray urfrgb xpswrite
Search path:
D:\ProgramFiles\gs10.05.1\bin ; D:\ProgramFiles\gs10.05.1\lib ;
D:\ProgramFiles\gs10.05.1\fonts ; %rom%Resource/Init/ ; %rom%lib/ ;
c:/gs/gs10.05.1/Resource/Init ; c:/gs/gs10.05.1/lib ;
c:/gs/gs10.05.1/Resource/Font ; c:/gs/fonts
Initialization files are compiled into the executable.
For more information, see https://ghostscript.readthedocs.io/en/gs10.05.1/Use.html
Please report bugs to bugs.ghostscript.com.
サンプルの PostScript ファイル(クイックソート処理)の実行
例として GitHub に公開されている denismm/mystical_ps の examples フォルダの quicksort.ps を実行します。
この quicksort.ps には quicksort と test_quicksort 関数が定義されいるだけなので、-c オプションで関数名 test_quicksort を指定することで、その関数を実行します。

コマンドプロンプトに出力された [] に囲まれた数値が昇順で並んでいて、クイックソートの関数による並び替えが成功していることが確認できました。
G:\Dev\Mistical\mystical_ps-main\mystical_ps-main\examples>gswin64c quicksort.ps -c test_quicksort
GPL Ghostscript 10.05.1 (2025-04-29)
Copyright (C) 2025 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.
[1 13 24 42 63 73 91 94 97 99 105 115 123 124 144 149 153 157 165 169 188 194 195 196 228 228 249 267 272 278 298 298 303 327 335 336 337 357 393 404 408 425 438 440 451 485 490 492 501 503 505 512 517 530 536 544 549 560 566 579 612 629 633 635 658 666 668 669 672 708 709 709 716 722 729 745 752 801 807 810 814 816 821 826 840 853 865 878 882 903 923 930 933 933 944 967 977 979 981 987]
GS>quit
G:\Dev\Mistical\mystical_ps-main\mystical_ps-main\examples>
まとめ
今回は、PostScript をインタプリタ形式で実行できる Ghostscript の AGPL 版を用いて、PostScript に定義されている関数をコマンドプロンプト上で実行して結果を出力する手順を紹介しました。
例として、プログラムを魔法陣の画像に変換できる「mystical_ps」の中に含まれているクイックソートを行うサンプルの .ps スクリプトを使用しました。
参照サイト Thank You!
- Ghostscript
- Ghostscript – Wikipedia
- Ghostscript/Windows – TeX Wiki
- denismm/mystical_ps
- 「システム環境変数」と「ユーザ環境変数」の違い|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
記事一覧 → Compota-Soft-Press
コメント