#! /bin/sh # # psopt -- PostScriptプリンタ印刷時にさまざまなオプションを設定する # # revision history # 0.0: May 10, 2002 by Dai ISHIJIMA # 0.1: Jul. 22, 2002 (fix filename argument) # 0.2: Aug. 2, 2003 (add -?shift, -scale options) # 0.3: Aug. 3, 2004 (sethalftone for PS{2|3} printers) # # usage # psopt [option] [file] # # options # -数字 印刷部数の指定 # -[no]tray 手差しトレイを使う # -[no]mftray 手差しトレイを使う # -[no]manufeed 手差しトレイを使う # -cassette 番号 用紙カセットの指定 # -[no]ptray 用紙トレイを使う # -[no]faceup フェイスアップトレイに出力する/しない # -[no]duplex 両面印刷する/しない # -[no]tumble 短辺とじ/長辺とじの切り替え # -short 短辺とじ両面印刷の指定 # -long 長辺とじ両面印刷の指定 # -[no]tonersave トナー節約モードの指定 # -[no]fine ファインプリントを使う/使わない [ALW16] # -[no]photograde フォトグレードを使う/使わない [ALW16] # /* -[no]rit RITを使う/使わない [LP8300CPD] */ # /* -mono モノクロ印刷の指定 */ # -[no]ohp 専用OHPシートで印刷する/しない [LP8300CPD] # -lpi 周波数 ハーフトーン周波数 (スクリーン線数) の指定 # -lpx 倍率 ハーフトーン周波数の倍率指定 # -tombow 先頭ページにA4用紙サイズのトンボを入れる/入れない # -date 先頭ページの余白部に日付を印字する # -xshift ミリ 横方向にずらす # -yshift ミリ 縦方向にずらす # -scale 倍率 拡大縮小 # -halftone [周波数] ハーフトーン定義 (PostScript L2/L3) # # examples # LaserWind1040PSで複数枚印刷するとき # % cat ppst.ps | psopt -3 | lpr -Plw1040ps # LaserWriter16/600PSでPhotoGradeを有効にするとき # % cat ppst.ps | psopt -photograde | lpr -Palw16 # LaserPress2100PSで手差しトレイを使うとき # % jdvi2kps -d 600 hoge | psopt -tray | lpr -Plpress # HL-1670Nで片面印刷するとき # % dvi2ps cafepara | psopt -noduplex | lpr -Phl1670 # LP8300Cで専用OHPシートに印刷するとき # % dvi2ps hoge | psopt -ohp | lpr -Plp8300c # LP8700PS3でスクリーン線数を変更して印刷するとき # % djpeg hoge.jpg | pnmtops | psopt -halftone 60 | lpr -Plp8700ps3 # # 注意点 # オプション指定と使用プリンタの組み合わせによっては、 # 意図したとおりの印刷ができなかったり、 # エラーが発生 (場合によってはプリンタの電源断・再起動が必要) する # かもしれません。 # # A4サイズ (210 mm × 297 mm) paperwidth='210 72 mul 25.4 div' paperheight='297 72 mul 25.4 div' # A4用紙にトンボ付きでB5原稿 (182 mm × 257 mm) pagewidth='182 72 mul 25.4 div' pageheight='257 72 mul 25.4 div' tombowofs='3 72 mul 25.4 div' tombowlen='15 72 mul 25.4 div' # 日付用文字サイズ (3 mm) fontsize='3 72 mul 25.4 div' graylevel='0.7' # 日付印刷位置 (原点を用紙の中心として指定) ##posdate="$paperwidth 4 div $paperheight 2 div $fontsize 3 mul sub" posdate="$pagewidth 4 div $pageheight 2 div $fontsize 3 mul add" # # オプションのチェック # while [ $# -gt 0 ]; do case x"$1" in # 印刷部数の指定 x-[1-9]*) numcopies=`echo "x$1" | tr -c -d '0-9\012'` ;; # 手差しトレイの選択 x-tr*) manualfeed='true' ;; x-notr*) manualfeed='false' ;; x-mftr*) manualfeed='true' ;; x-nomftr*) manualfeed='false' ;; x-man*) manualfeed='true' ;; x-noman*) manualfeed='false' ;; # 用紙カセットorトレイの指定 x-cas*[0-9]) mediaposition=`echo "x$1" | tr -c -d '0-9\012'` ;; x-cas*) shift case "x$1" in x[0-9]) mediaposition=`echo "x$1" | tr -c -d '0-9\012'` ;; *) echo "Usage: $0 -cassette number" 1>&2 exit 1 ;; esac ;; x-pt*) mediaposition='0' ;; # 両面印刷の指定 x-du*) duplex='true' ;; x-nodu*) duplex='false' ;; x-tum*) tumble='true' ;; x-notum*) tumble='false' ;; x-sh*) duplex='true' tumble='true' ;; x-lo*) duplex='true' tumble='false' ;; # 排紙先の指定 x-fa*) outputtype='FaceUp' ;; x-nofa*) outputtype='Starndard' ;; # トナー節約 x-ton*) tonersaver='true' ;; x-noton*) tonersaver='false' ;; # スムージングその他 x-fi*) postenhance='true' ;; x-nofi*) postenhance='false' ;; x-ph*) preenhance='true' ;; x-noph*) preenhance='false' ;; x-rit*) rit='true' ;; x-norit*) rit='false' ;; # 専用OHPシート x-oh*) manualfeed='false' mediaposition='0' mediatype='Trnsprncy' outputtype='FaceUp' ;; x-nooh*) mediatype='Normal' outputtype='Standard' ;; # スクリーン線数 x-lpi) shift case "x$1" in x[0-9]*) lpi=`echo "x$1" | tr -c -d '0-9\012\056'` lpx='NONE' ;; *) echo "Usage: $0 -lpi frequency" 1>&2 exit 1 ;; esac ;; x-lpx) shift case "x$1" in x[.0-9]*) lpx=`echo "x$1" | tr -c -d '0-9\012\056'` lpi='NONE' ;; *) echo "Usage: $0 -lpx frequency" 1>&2 exit 1 ;; esac ;; # スクリーン線数 (sethalftone) x-half*) halftone='true' freq=60 case "x$2" in x[0-9]*) freq=`echo "x$2" | tr -c -d '0-9\012\056'` shift ;; esac ;; # 拡大/縮小 x-scale) shift case "x$1" in x[.0-9]*) scale=`echo "x$1" | tr -c -d '0-9\012\056'` ;; *) echo "Usage: $0 -scale factor" 1>&2 exit 1 ;; esac ;; x-xshift) shift case "x$1" in x[\-.0-9]*) xshift=`echo "x$1" | tr -c -d '\-0-9\012\056\055'` ;; *) echo "Usage: $0 -xshift mm" 1>&2 exit 1 ;; esac ;; x-yshift) shift case "x$1" in x[\-.0-9]*) yshift=`echo "x$1" | tr -c -d '0-9\012\056\055'` ;; *) echo "Usage: $0 -yshift mm" 1>&2 exit 1 ;; esac ;; # トンボ x-tom*) usetombow='true' ;; x-date*) printdate='true' ;; x-*) echo "Usage: $0 [options] [file]" 1>&2 echo " -[no]tray|-[no]duplex|-short|-long" 1>&2 exit 1 ;; *) break ;; esac shift done # # 実行部 # case x"$#" in x[1-9]*) if [ ! -r "$1" ] ; then echo "$0: can't open $1" 1>&2 exit 1 fi ;; esac echo '%!' # # パラメータの設定 # case x"$numcopies" in x[0-9]*) echo "1 dict dup /NumCopies $numcopies put setpagedevice" ;; esac case x"$manualfeed" in xtrue|xfalse) echo "1 dict dup /ManualFeed $manualfeed put setpagedevice" ;; esac case x"$mediaposition" in x[0-9]*) echo "1 dict dup /MediaPosition $mediaposition put setpagedevice" ;; esac case x"$outputtype" in xFaceUp|xStandard) echo "1 dict dup /OutputType ($outputtype) put setpagedevice" ;; esac case x"$duplex" in xtrue|xfalse) echo "1 dict dup /Duplex $duplex put setpagedevice" ;; esac case x"$tumble" in xtrue|xfalse) echo "1 dict dup /Tumble $tumble put setpagedevice" ;; esac case x"$tonersaver" in xtrue|xfalse) echo "(%Engine%) 1 dict dup /TonerSaver $tonersaver put setdevparams" ;; esac case x"$preenhance" in xtrue|xfalse) echo "1 dict dup /PreRenderingEnhance $preenhance put setpagedevice" ;; esac case x"$postenhance" in xtrue|xfalse) echo "1 dict dup /PostRenderingEnhance $postenhance put setpagedevice" ;; esac case x"$mediatype" in xTrnsprncy|xNormal) echo "1 dict dup /MediaType ($mediatype) put setpagedevice" ;; esac case x"$halftone" in xtrue) echo "<< /HalftoneType 1" echo " /Frequency $freq" echo " /Angle 45" echo " /SpotFunction { 180 mul cos exch 180 mul cos add 2 div }" echo ">> sethalftone" ;; esac case x"$lpi" in x[0-9]*) echo "currentscreen 3 2 roll pop $lpi 3 -2 roll setscreen" ;; esac case x"$lpx" in x[.0-9]*) echo "currentscreen 3 2 roll $lpx mul 3 -2 roll setscreen" ;; esac # # 印刷を伴う処理 # case x"$usetombow" in xtrue) echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" echo "gsave" echo "" echo "% 寸法指定" echo "/PaperWidth { $paperwidth } def" echo "/PaperHeight { $paperheight } def" echo "/PageWidth { $pagewidth } def" echo "/PageHeight { $pageheight } def" echo "/TombowOfs { $tombowofs } def" echo "/TombowLen { $tombowlen } def" echo "" cat <<'EOF' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 用紙隅のトンボ /CornerTombow { newpath 0 0 moveto TombowLen 0 rlineto stroke newpath 0 0 moveto 0 TombowLen rlineto stroke newpath 0 TombowOfs neg moveto TombowLen 0 rlineto stroke newpath TombowOfs neg 0 moveto 0 TombowLen rlineto stroke } bind def % 解像度の取得 -> 線幅決定 /Resolution 300 def systemdict /currentpagedevice known { currentpagedevice /HWResolution get 0 get /Resolution exch def } if 72 Resolution div setlinewidth % 原点を用紙の真中に PaperWidth 2 div PaperHeight 2 div translate % 中心線 newpath 0 PageHeight 2 div TombowOfs add moveto 0 TombowLen rlineto stroke newpath 0 PageHeight 2 div TombowOfs add neg moveto 0 TombowLen neg rlineto stroke newpath PageWidth 2 div TombowOfs add 0 moveto TombowLen 0 rlineto stroke newpath PageWidth 2 div TombowOfs add neg 0 moveto TombowLen neg 0 rlineto stroke % 四隅のトンボ gsave PageWidth 2 div TombowOfs add PageHeight 2 div TombowOfs add translate CornerTombow grestore gsave PageWidth 2 div TombowOfs add PageHeight 2 div TombowOfs add neg translate 1 -1 scale CornerTombow grestore gsave PageWidth 2 div TombowOfs add neg PageHeight 2 div TombowOfs add translate -1 1 scale CornerTombow grestore gsave PageWidth 2 div TombowOfs add neg PageHeight 2 div TombowOfs add neg translate -1 -1 scale CornerTombow grestore grestore %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% EOF ;; esac case x"$printdate" in xtrue) echo "gsave" echo "$paperwidth 2 div $paperheight 2 div translate" echo "$posdate moveto" echo "$graylevel setgray" echo "/Helvetica findfont $fontsize scalefont setfont" timestamp=`date '+%Y-%m-%d %H:%M:%S'` echo "($timestamp) show" echo "grestore" ;; esac # # 拡大縮小・シフト # case x"$scale" in x[.0-9]*) echo "$paperwidth 0.5 mul $paperheight 0.5 mul translate" echo "$scale dup scale" echo "$paperwidth 0.5 mul neg $paperheight 0.5 mul neg translate" ;; esac case x"$xshift" in x[\-.0-9]*) echo "$xshift 72 mul 25.4 div 0 translate" ;; esac case x"$yshift" in x[\-.0-9]*) echo "0 $yshift 72 mul 25.4 div translate" ;; esac cat "$@" exit 0