Announce

PukiWiki contents have been moved into SONOTS Plugin (20070703)

07.blpr

一括印刷 (batch lpr)

投稿者s1080134
作成日2001/07 (学部2年前期)
最終更新日2003/09/09
言語bash
Table of Contents

説明

テキストファイルや画像ファイルを印刷するときに楽するために作ったシェルスクリプトです。

後記:会津大学の環境にどっしりと依存しています。

書式

使い方は以下のようになっています。

   blpr: batch lpr. lpr front end.
   Usage: blpr [options] [file ...]
     options: -txt           txt print
              -image         image print (default)
              -Pprinter      select printer
              -num           multiple pages per sheet
                             default, 2 in -txt, 1 in -image
              -noboth        no both side
              -rotate        rotate 90 degree in -image
          ex: blpr -image -2 -Pstd4pr1 *.gif
        Tips: lprm -P printer userid

txt ファイルを印刷するときは -txt を、 image ファイルを印刷するときは -image を指定してください。またプリンターを指定していなくても自動的に設定するようになっています。

印刷コマンドは txt の場合、

   a2ps -p $@ | psnup $psnup | lpr -P$printer $both 

image の場合、

   convert -colorspace GRAY $rotate $@ ps:- | psnup $psnup | lpr -P$printer $both 

のような感じになっています。自分の好きなスタイルになってしまっているので、変更したい場合は、このスクリプトをコピー、編集してくださってもかまいません。

ソースコード

#!/usr/local/bin/bash
# Copyright (C) Naotoshi Seo, s1080134

function printUsage {
  cmd=${0##*/}
  echo "Batch lpr. lpr front end." 1>&2
  echo "Usage: $cmd [options] [file ...]" 1>&2
  echo "  options: -txt		  txt print" 1>&2
  echo "           -image	  image print (default)" 1>&2
  echo "           -Pprinter      select printer" 1>&2
  echo "           -num           multiple pages per sheet" 1>&2
  echo "                          default, 2 in -txt, 1 in -image" 1>&2
  echo "           -noboth        no both side" 1>&2
  echo "           -rotate        rotate 90 degree in -image" 1>&2
  echo "       ex) $cmd -image -2 -Pstd4pr1 *.gif" 1>&2
  echo "    Check: lprm -P printer userid" 1>&2
}

if [ $# -lt 1 ];then
  printUsage
  exit 0
fi

#Options
mode="image"
psnup="-1"
both="-Cduplex"
rotate=""
while [ $# -gt 0 ]
  do
  if [ $(expr "x$1" : 'x-') -eq 0 ]; then
    break
  fi

  if [ "$1" = "-txt" ];then
    mode="txt"
    psnup="-2"
  elif [ "$1" = "-image" ];then
    mode="image"
    psnup="-1"
  elif [ $(expr "x$1" : 'x-P') -ne 0 ] ; then
    printer=`echo $1 | sed s/^-P//`
  elif [ $(expr "x$1" : 'x-[1-9][1-9]*$') -ne 0 ] ; then
    psnup="$1"
  elif [ "$1" = "-noboth" ] ; then
    both=""
  elif [ "$1" = "-rotate" ] ; then
    rotate="-rotate 90"
  else
    usage="1"
  fi

  if [ "$usage" = "1" ]; then
    printUsage
    exit 1
  fi
  shift
done
#$@ become [file ... ]
if [ "$1" = "" ]; then
  exit 0
fi

#printer setting
if [ -z $printer  ]; then
  printer=$PRINTER
fi
if [ -z $printer  ]; then
case `hostname` in
pross*)
printer=localbp
;;
std1*)
printer=std1pr1
;;
std2*)
printer=std2pr1
;;
std3*)
printer=std3pr2
;;
std4*)
printer=std4pr2
;;
std5*)
printer=std5pr1
;;
std6*)
printer=std6pr1
;;
hdw1*)
printer=hdw1pr1
;;
hdw2*)
printer=hdw2pr1
;;
cai1*)
printer=cai1pr1
;;
cai2*)
printer=cai2pr1
;;
lml1*)
printer=lml1psv2
;;
lml2*)
printer=lml2psv2
;;
esac
fi
if [ -z $printer ]; then
  echo "Please specify the printer." 1>&2 
  exit 1;
fi

#main
if [ "$mode" = "txt" ]; then
  echo "a2ps -p $@ | psnup $psnup | lpr -P$printer $both"
  a2ps -p $@ | psnup $psnup | lpr -P$printer $both
else
  echo "convert -colorspace GRAY $rotate $@ ps:- | psnup $psnup | lpr -P$printer $both"
  convert -colorspace GRAY $rotate $@ ps:- | psnup $psnup | lpr -P$printer $both
fi