SSブログ

テキストファイルを明朝体で印刷 [UNIX]

Solarisでテキストファイルを印刷するには
  lp ファイル名
     か
  lpr ファイル名
で可能ですが、
この時使用されるフォントはCourierというフォントが使われていて
日頃、明朝体やゴシック体に慣れているためか違和感を感じてしまいます。
またCourierは英字フォントのため日本語が混ざったテキストですと
文字化けが発生してしまいます。

サンプルファイル
123 ABC 日本語
を印刷した場合下図の様になりました。
  lp サンプルファイル
■ご注意
このサイトではパソコンのUSBポートに接続されたプリンターで動作確認を行っているため、lpコマンドを使って解説していますが
使用する環境によってはlprコマンドを使用する場合もありますので、お使いの環境に合せて読み替えて頂きますようお願いいたします。


そこで、日本語混じりの文書でも文字化けせずに印刷できる様にするために
Solarisには「jtops」というフィルタコマンドが用意されています。
このコマンドを使用するとPostScript形式に変換してくれるため
プリンターに搭載されている明朝体やゴシック体で印刷する事ができます。

コマンドの書式は以下の通り
  jtops [オプション] [ファイル名(s)]

先程のサンプルファイルを「jtops」で変換して印刷してみました。
  jtops -j -s10 サンプルファイル | lp


  jtops -j -g -s10 サンプルファイル | lp


コマンドの処理結果は標準出力に送られるので、出力をファイルに切り替えるかパイプを使ってlpコマンドに渡してやる必要があります。

覚えてしまえば難しいコマンドではありませんが
キーボードから入力する文字数が増えるので面倒といえば面倒・・・

そこで、ファイル名を指定するだけで印刷出力までやってくれる
Cシェルスクリプトを作ってみました。
使い方は簡単で
  psp ファイル名
とするだけで、明朝体10ポイントで縦書き出力されます。

#!/bin/csh -f
#
#   psp                     Version 2.0
#   PostScript形式でプリンタへ出力
#              1.0 1999/06/08 yutaka-k
#              2.0 2006/08/13 yutaka-k
#     CopyLeft (c) 1999-2006  by yutaka-k

# 印刷出力コマンド
set print = lp

# デフォルトフォントサイズの設定
set fsize = 10

# 最小フォントサイズの設定(変更不可)
set minsize = 4

if ( $#argv == 0 ) goto HELP
set direction = -R
set font = -m
foreach i ( $argv[*] )
   set check = `echo $i | cut -b1`
   if ( $check == - ) then
      set count = 2
      set num = `echo $i | wc -m`
      while ( $count < $num )
         set character = `echo $i | cut -b"$count"`
         switch ( $character )
            case r:
               set direction = -r
               breaksw
            case g:
               set font = -g
               breaksw
            case L:
               @ fsize = $fsize + 4
               breaksw
            case l:
               @ fsize = $fsize + 2
               breaksw
            case S:
               @ fsize = $fsize - 4
               if ( $fsize < $minsize ) set fsize = 4
               breaksw
            case s:
               @ fsize = $fsize - 2
               if ( $fsize < $minsize ) set fsize = 4
               breaksw
            case [hH]:
               goto HELP
               breaksw
            case *:
               echo "error>指定されたオプション $character が無効です。"
               exit 1
               breaksw
         endsw
         @ count++
      end
   else
      if ( $?file == 0 ) then
         set file = $i
      else
         set file = ( $file $i )
      endif
   endif
end
set fsize = "-s$fsize"
if ( $?file == 0 ) then
   echo 'error>ファイルが指定されていません。'
   exit 1
endif

foreach i ( $file )
   if ( -e $i ) then
      if ( -d $i ) then
         echo "error>$i はディレクトリーです。"
      else
         (jtops -j $direction $font $fsize $i | $print) >& /dev/null
         if ( $status == 0 ) then
            echo ">ファイル $i をプリンタに出力しました。"
         else
            echo "error>ファイル $i でエラーが発生しました。"
         endif
      endif
   else
      echo "error>$i ファイルが存在しません。"
   endif
end
exit 0

HELP:
echo '書式: psp [オプション] ファイル名(s)'
echo '         r :横書き印刷'
echo '         g :ゴシック体フォント'
echo '         L :フォントサイズ +4'
echo '         l :フォントサイズ +2'
echo '         S :フォントサイズ -4'
echo '         s :フォントサイズ -2'
ファイルはcompressにより圧縮されています(ファイル名:psp.Z)

スクリプト内で印刷出力コマンドを設定していますが
コマンドに引数を与えたい場合はシングルクォーテーションかダブルクォーテーションでコマンドを囲ってやる必要があります。
  set print = 'lpr -P プリンタ'

デフォルト設定では明朝体10ポイント縦書き印刷になっていますが
オプションを与えてフォントサイズを変えたり横書き印刷にする事ができます。
UNIXのコマンドと同じ様にオプションを1つにまとめたりばらばらに指定したりどちらでもOKです。
以下の指定ではどちらもゴシック体14ポイント横書きで出力されます。
  psp -g -L -r ファイル名
  psp -gLr ファイル名

フォントサイズを変更するオプションの{L,l}及び{S,s}は複数個重ねる事ができます。
最少フォントサイズは4ポイントに制限されていますが大きくするのに制限はありません。
以下の場合、10+4+4+4で22ポイントで出力されます。
  psp -LLL ファイル名

このスクリプトは必ずファイル名を指定する必要があるため
以下の様な使い方はできません。
  × ls -l | psp

■お願い
ご自由にカスタマイズして頂いて構いませんが、
何らかの障害は発生しても作者のyutaka-kは責任を負わないものとします。

nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。