3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

PostScriptたるものを初めて知った

ちょっとアプリからの印刷のデバッグ作業中に、ふと印刷ダイアログの「ファイルへ出力」ボタンを押してみました。

(ちなみに、プリンタは Brother MFC-9440CN でLAN接続)

これがきっかけでいろいろ調査したまとめもです。

まず、印刷ダイアログの「ファイルへ出力」ボタンで出力されたファイルは、実際にプリンタに送信されるデータが記述されているようです。

ただ、このデータはダイアログで選択したドライバによって、若干出力データが変わるようですね。

Brother MFC-9440CN で出力したファイルの中身は下記のようになっていました。

%-12345X@PJL

@PJL SET REPRINT=OFF

@PJL SET HOLD=OFF

@PJL JOB NAME="ARNet Document"

@PJL PRINTLOG ITEM = 1,PRINTER

@PJL PRINTLOG ITEM = 2,Thu,2 Jul 2009 10:51:35

@PJL PRINTLOG ITEM = 3,thirdPG

@PJL PRINTLOG ITEM = 4,TestPC

@PJL SET STRINGCODESET=JISX02011976

@PJL COMMENT ECONOMODE=OFF

@PJL SET RENDERMODE=COLOR

@PJL SET COLORADAPT=ON

@PJL SET APTMODE=OFF

@PJL SET RESOLUTION=600

@PJL ENTER LANGUAGE=XL2HB

) BROTHER XL2HB;1;0

タ ムXXAタ タHタ ・タ・タ・ネタdPostcard・タ ・Cモd d ・uタ タ チ€チ・ム€・ノチ チ ・ーチuチE タチ アⅡ xV~)?(~)・・

以下省略....

途中からはどうやらバイナリデータになっており、テキストエディタでみると文字化けしてます。

このデータ形式は @PJL ENTER LANGUAGE というところ見ると、XL2HB となっており、Brother オリジナルのフォーマットっぽいですね。

同じように、自宅で使ってる Canon MP610 のドライバを使ってファイルへ吐かすとこんな感じになりました。

[K BJLSTART

ControlMode=Common

SetTime=20090702125804

BJLEND

[K BJLSTART

ControlMode=Common

SetSilent=OFF

BJLEND

[K BJLSTART

ControlMode=Common

PEdgeDetection=ON

BJLEND

[K (r d(b (c 0 (d XX(t* €€" " " (P (l 4 (q (p. ォ ・ X P F

以下省略...

なんか Brother と全然フォーマットが違います。

Brother ドライバから「ファイルへ出力」でできたファイルをUSBメモリにコピーし、 Brother MFC-9440CN のUSBポートに指して印刷すると、ちゃんと印刷できました。(Canonドライバから生成したファイルを Brother プリンタで印刷しようとすると、やっぱりダメと怒られました。)

ただ、Brother オリジナルのフォーマットだからあんま使えない、と思ってさらに調べてると、PostScript というフォーマットが存在するらしいです。

PostScript はページ記述言語の一つであの PDF の元祖らしいです。

この PostScript のいいところは広く使われてるフォーマットであり、PostScript対応プリンタであれば印刷できるということでしょう。

たとえば、Word が入ってないPCで、誰からから Word のファイル印刷してって頼まれたときに有効です。(プリンタは PostScript対応)

Word のファイルをもらう代わりに、PostScript 対応プリンタドライバでWord印刷ダイアログボックスで「ファイルへ出力」でできたファイル(PostScript形式)さえもらえればいいのです。

後は、コマンドプロンプトからちょちょいとすれば印刷ができます。

また、他のプラットフォーム間での印刷データの受け渡し等にも利用できそうですね。

で、PostScript ファイルの作り方ですが、対応プリンタを購入しないとできないかというと、そういうわけでもないようです。

Windows にもともと付属してる PostScript 対応プリンタドライバで、ファイルに出力すればOKのようです。

ここら辺は、PostScriptファイルに出力するPostScript形式でファイル出力できるプリンタドライバを使って印刷結果を画像にに詳しく手順が載せられてます。(特に後者はプリンタドライバの PostScript オプションについても若干言及)

今回は RICOH IPSiO Color 8150 PS のドライバをインストールしてみました。

そして、このプリンタドライバを使って出力されたファイルの中身はこんな感じです。

%-12345X@PJL JOB

@PJL ENTER LANGUAGE = POSTSCRIPT

%!PS-Adobe-3.0

%%Title: ARNet Document

%%Creator: PScript5.dll Version 5.2.2

%%CreationDate: 7/2/2009 11:30:0

%%For: thirdPG

%%BoundingBox: (atend)

%%Pages: (atend)

%%Orientation: Portrait

%%PageOrder: Special

%%DocumentNeededResources: (atend)

%%DocumentSuppliedResources: (atend)

%%DocumentData: Clean7Bit

%%TargetDevice: (RICOH IPSiO Color 8100 PS3) (3011.103) 2

%%LanguageLevel: 3

%%EndComments

%%BeginDefaults

%%PageBoundingBox: 12 12 583 830

%%ViewingOrientation: 1 0 0 1

%%EndDefaults

%%BeginProlog

%%BeginResource: file Pscript_WinNT_ErrorHandler 5.0 0

/currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false

setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type/stringtype

以下省略....

2行目をみると、 PostScript で記述されてることが定義されてます。また3行目では PostScript のバージョン3.0を使ってることが分かります。

また、データも7bitでAsciiエンコードされているので、バイナリみたいに見にくいこともありません。

この PostScript ファイルの印刷ですが、Windows だと下記のようなコマンドで印刷できるようです。(参考:MS:プリントファイルを出力する方法印刷画面の「ファイルへ出力する」とは?Using MATLAB Graphics

copy /b PostScriptファイル名 プリンタポート名

で、会社の Brother プリンタが BRND600D0 というポート名(TCP/IP直付)なので、

copy /b test.ps BRND600D0

とやってみたんですが、test.ps のファイルコピーが生成されるだけでダメでした。

サーバ上のプリンタなら

copy /b test.ps \\ServerName\Printer

とすればいいようですが、Brother プリンタはネットワークプリンタで直接LANをつないでいるので、無理でした。

Canon MP610 (USB)接続でも試しました。

この場合 USB 接続なので、ポートに USB001 としてダメなようです。

めもブロ。:プリントファイルを使うでは、USB接続のプリンタを共有して、 \\サーバ名\共有プリンタ名でやってみる方法と、net useコマンドで LPT1 ポートに共有プリンタを割り当てる方法が紹介されてます。

どちらとも試し見ましたが、ダメででした。

C:\>copy /b postscript.ps \\testpc\MP610

1 個のファイルをコピーしました。

C:\>net use LPT1: \\samel\mp610

コマンドは正常に終了しました。

C:\>copy /b postscript.ps lpt1

1 個のファイルをコピーしました。

コピーしましたって出るんですが、印刷されません。

おそらくですが、Canon MP610 が PostScript に対応してないんじゃないかと思われます。

(Mac OS Xからプリントサーバ経由でワイヤレス印刷でも「大抵の家庭用プリンタはPostScriptなんかAdobeへの上納金(ライセンス料)の関係で対応してません。」ってあります)

PostScript ファイルのイメージをみる方法ですが、Ghostscript と GSview というソフトを使うとOKのようです。

Ghostscript が実際のエンジンで、GSview が GUI で触れるようにしたツールのようですね。

インストール方法や置き場所はWindows 用 Ghostscript と GSview のインストールWindows 用 Ghostscript と GSview のインストール等に詳しく掲載されてます。

注意点としては

環境変数 TEMP と TMP に2バイト文字を含んではいけない。

・Ghostscript インストーラーで「Use Windows TrueType fonts for Chinese, Japanese and Korean」をチェックしておく。

・GSview インストーラで、Ghostscript の正しいバージョンを選択する。

環境変数 PATH に C:\gs\gs8.64\bin;C:\gs\gs8.64\lib というように Ghostscript の bin と lib にパスを通す。

ということくらいでしょうか。

上述の RICOH IPSiO Color 8150 PS のドライバからファイルに落とした PostScript ファイルはちゃんと GSview でみることができました。

ただ、Brother や Canon のドライバから出したものは PostScript ではないので、GSview では表示不可でした。

PostScript対応プリンタがある場合、使いようによっては結構使えるかもしれない PostScript。

ただ、フォント関連は注意しないといけないのと、非対応プリンタが多そうなので、一般向けには難しいかもしれませんね。