Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
#! /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