週刊四方山話


昔の四方山話を読む   読まずに戻る

第10夜 印刷結果をファイルに出力する(その1)


 あまりにも更新頻度が低いので(笑)、ちょっと攻め方を変えてみることにします。

 ここでは、「すでに200万人が知っていることなんだけど、まだ知らない人が2000万人くらいはいるかもしれない」といったことを書いて、せめて20人くらいの人に知ってもらおうと思ってます。



 皆さんは、こんな経験がありませんか?

「Visio2000で描いた図面を渡したいんだけど、向こうはVisioを使ってないから、ファイルで渡したんじゃ開けないし。かといって、紙で渡すのもなぁ……」

 色々なファイル形式で出力できるものなら良いのですが、独自ファイル形式にしか対応していないアプリケーションだと、そのアプリケーションを持っていないとファイルを開くことができません。また、標準でない別のファイル形式で保存したら、一部の書式がおかしくなってしまって、けっきょく使えなかった……なんてのも、よくある話です。そのため、泣く泣く、画面のハードコピーを取って送ったりと、涙ぐましい努力を重ねている方も多いのではないでしょうか。

 しかし、印刷機能を持ったWindowsアプリケーションなら、全くアプリケーションに依存せず、同じ方法で印刷結果を汎用的なファイル形式に保存する方法があります。ここでは、それを紹介していきます。



 プリンタは、プリンタ制御言語というもので制御され、文字や図形を印刷します。代表的なものとして、ドットマトリクスならAT互換機標準のESC/PやNEC98シリーズ標準のPC-PR201など、ページ記述ならCanonLIPSEPSONESC/PageAdobePostScriptなどがあります。

 プリンタ制御言語はしょせん印刷イメージを記録したデータですから、このイメージ情報を画面に出力してやることは可能なはずです。もちろん、ファイルとして保存し、何らかのコンバートをかけてやれば、一般的な画像ファイルとして利用することも可能なはずです。

 Windowsのプリンタドライバには、このプリンタ制御コードをファイルに出力する機能が標準で備わっています。つまり、この機能を使って印刷イメージをファイル化してやれば、理屈の上では、どのようなアプリケーションの印刷イメージでもファイルで保存、あるいは交換することが可能になるわけです。

 プリンタ制御言語の種類は、プリンタ(ドライバ)に依存します。では、どのプリンタ制御言語を使うのが良いでしょう。ここでは、PostScriptを使用します。PostScriptは、UNIXで長年、標準のページ記述言語として使われてきました。そのため、有用なPostScript用アプリケーションも多く、Windowsに移植されているものも少なくありません。また、プリンタ制御だけではなく画面記述にも広く使用されているため、応用範囲が広いことも特徴の一つに挙げられます。

 そして、何より重要なのは、PostScriptは多くのページ記述言語がそうであるように、制御コードに絶対的なドットという概念を持たないということです。PostScriptで印刷される文字はアウトラインフォント、図形はベジェ曲線というベクトルデータで保持されます。図形情報をドットで持ってしまうと、図形を拡大したときにどうしても品質が劣化してしまいます。1ドットは、決して1ドット以外では有り得ないからです。しかし、ベクトルデータならば、図形が絶対位置情報ではなく相対位置情報で構成されるため、拡縮に柔軟に対応することができます。つまり、PostScriptはプリンタ等の出力デバイス側で解像度を制御できるため、データ自身は解像度の影響をほとんど受けません。

 印刷イメージを画像で出力する場合、サイズを1000x1000にすべきか2000x2000にすべきかというのは、非常に悩ましい問題です。これは、この画像データを最終的に表示するあるいは印刷するデバイスの能力に、極めて左右されやすい問題だからです。しかし、PostScriptならば、図形の拡縮を出力デバイス側で自在に行うことができるため、全く同じデータを用いても、600dpiのプリンタで印刷すれば600dpiのプリンタなりの、300dpiのプリンタで印刷すれば300dpiのプリンタなりの印刷結果を得ることが可能です。


 今回はまず、アプリケーションからPostScriptファイルを作成する汎用的なやり方を紹介します。なお、使用しているのはWindows 98 Second Editionです。



 まず、プリンタのプロパティで、新規にプリンタを追加します。ここで追加するプリンタは、現物が存在していなくても構いません。PostScriptプリンタであれば何でもいいのですが、わかりやすいところで、PostScript Printerというのを選択しておきます。このプリンタドライバは、Windows98SEならば標準で装備されています。汎用的なドライバだと思われるので、95やNTにも標準装備されているでしょう。

PostScript Printerドライバ

PostScript Printer

 さくっと追加したら、今度はプリンタのプロパティを変更します。[詳細]タブで、出力先のポート[FILE:(ディスクにファイルを作成)]に変更します。

プロパティ

 これで、プリンタに送信される制御コードが全てファイルに保存されるようになりました。では実際に、ファイルを出力してみましょう。

 サンプルとして、Wordでこんな文書を作ってみました。

Word文書

 これを印刷してみます。ここで忘れてならないのは、出力先のプリンタに、先ほど追加したPostScript Printerを選択するということです。

印刷

 この状態から印刷を行うと、保存するファイル名を指定するダイアログボックスが表示されます。適当な名前を付けて、保存してください。ここでは、printtest.prnという名前で保存します。

ファイル出力

 では、ここで保存したファイルの中身を見てみましょう。PostScriptプリンタ用の制御ファイルはテキスト形式ですので、メモ帳等でも開くことができます。

%!PS-Adobe-3.0
%%Title: Microsoft Word - XXXX 1
%%Creator: PSCRIPT.DRV Version 4.0
%%CreationDate: 12/05/01 09:34:58
%%BoundingBox: 18 23 577 819
%%Pages: (atend)
%%PageOrder: Special
%%Requirements:
%%DocumentNeededFonts: (atend)
%%DocumentSuppliedFonts: (atend)
%%DocumentData: Clean7Bit
%%LanguageLevel: 1
%%EndComments

%%BeginProlog
%%BeginProcSet: Pscript_Win_ErrorHandler 1.0 1 /currentpacking where{pop/oldpack currentpacking def/setpacking where{pop false setpacking}if}if/$brkpage 64 dict def $brkpage begin/prnt{dup type /stringtype ne{=string cvs}if dup length 6 mul/tx exch def/ty 10 def currentpoint/toy exch def/tox exch def 1 setgray newpath tox toy 2 sub moveto 0 ty rlineto tx 0 rlineto 0 ty neg rlineto closepath fill tox toy moveto 0 setgray show}bind def/nl{currentpoint exch pop lmargin exch moveto 0 -10

 こんなものですから、文法を知っていれば、プログラミングする感覚でPostScriptプリンタを制御することも不可能ではありません。

 さて、先ほど作ったファイルprinttest.prnですが、このファイルの拡張子.prnをPostScriptファイルの拡張子である.psに変更します。

 では、printtest.psをグラフィックソフトに読み込んでみましょう。ここでは、AdobePhotoshopを使います。ファイルを開くと、下のようなダイアログボックスが表示されます。ここでは、サイズをA4用紙に合わせた上で、300dpiで読み込んでみることにします。

ファイルを開く

 そして、読み込んだ結果がこれです。ちょっとデカいですが、倍率100%の実寸表示です(あまりにデカすぎるので、一部を切り取ってます)。

300dpi

 なかなか綺麗ですよね。では試しに、解像度を100dpiにして読み込みなおしてみましょう。

ファイルを開く

 そして、読み込んだ結果がこれです。こちらも、倍率100%の実寸表示です。たしかに、解像度を落とした分だけ画像は小さくなっています。

100dpi

 と、このように、簡単にプリントアウトのイメージをファイル化することができました。ただ、今回紹介した方法については、問題がないわけではありません。

 今回使用したPostScript Printerドライバはモノクロプリンタのため、カラーで印刷イメージを表示させることができません。これについては、カラー対応のPostScriptプリンタを選べば良いので、追々紹介していきたいと思います。

 PostScriptで表示している文字列は、画像ではなくアウトラインフォントを埋め込んでいます(Windowsなら、TrueTypeフォントですね)。そのため、PostScriptファイルに含まれているフォントがインストールされていないと、その部分の文字が表示されなくなってしまいます。(これに関してはプロパティの設定で、フォントをアウトラインフォントではなくビットマップフォントで出力することで回避できます)

 また、PostScriptファイルはテキスト記述のため、非常にサイズが大きくなります。10ページを超えると、サイズが数MBにもなります。

 そして、PostScriptがいかに汎用的なページ記述言語だと云えど、なかなかきっちり表示してくれる環境はWindowsにはありません。できれば、手軽に広く配布できるような形式にしたいものです。

 そこで、こういった問題をクリアにするため、次回はPostScriptファイルをAcrobat Readerで表示できるPDF形式にする方法をご紹介します。


TOTLOT! -MyS WebSite- のホームへ


このページへは、御自由にリンクしてください。