JPRINTプロシジャの出力結果が間延びする

[OS]ALL
[リリース] 6.07, 6.08, 6.09, 6.10
[キーワード] graph, jprint, ftext, none, simfont, kanji, nocharacters, goptions, gdevice, copy, modify, printer, hardware, software, font

[質問]

JPRINTプロシジャを使用してTABULATEプロシジャの表結果を出力しましたが、表が間延びしてしまい、また数値の出力位置が揃いません。
なぜでしょうか。また、数値を見やすくする方法はありませんか。

[回答]

JPRINTプロシジャの出力でkanjiなどの2バイトフォントを使用する場合、スペースが完全に変換されず「間延び」することがあります。
これはソフトウェアフォントでスペースを出力する際に半角スペースが全角スペースに変換されるための現象です。
スペースを半角のまま残すには、ハードウェアフォントを標準のフォントに設定し、文字のみをソフトウェアフォントに変換することで対応できます。

  goptions ftext=none simfont=kanji nocharacters;

上記のGOPTIONSステートメントでは、FTEXT=NONEで標準のフォントをハードウェアフォントに設定します。
SIMFONT=KANJIは、ハードウェアフォントで出力できないコードをソフトウェアフォントに変換します。
最後にNOCHARACTERSで、文字として出力される(スペースは除く)フォントをすべてソフトウェアフォントとして出力します。

プリンタ側にスケーラブルな日本語フォントが存在する場合には、DEVICEファイルの使用する文字フォントに追加して、 ハードウェアフォントを使用することが可能です。
その場合には、次のように標準のデバイスドライバをコピーして変更を加え、新しく作成されることをお勧めします。

  libname gdevice0 'xxxxxx';
  proc gdevice catalog=gdevice0.devices nofs;
    copy ps300 from=SASHELP.DEVICES newname=PS300B4;
    modify PS300B4 Lrows=70 Lcols=121 Prows=101 Pcols=84 
           Xmax=24.2 cm Ymax=34.9 cm
           Xpixels=2858 Ypixels=4122
           gaccess=sasgaedt gsfmode=replace gsfname=gsasfile
           rotate=landscape
           charrec=(14,101,84,'/Times-Roman,/Ryumin-Light-H','Y')
           description="Post Script - B4 size paper using DBCS hardware font";
  run; quit;

次の設定で、上記で作成したデバイスドライバを使用することができます。

  libname gdevice0 'xxxxxx';
  filename gsasfile pipe 'lpr -C"filetype=ps,mag=1.6,paper=b4,"';
  goptions reset=all device=PS300B4 ftext=none simfont=kanji characters;
  title h=2 f=none 'JPRINTの実行結果';
  proc jprint unit=21;
  run;

ただし、あくまでもプリンタが日本語フォント(上記の場合、/Ryumin-Light-H)を持っている場合にのみ有効です。