as400->pdf
cschen33.tw@yahoo.com
¤é´Á:2006/02/22

³o¬OÀ³¥Îtn52500³nÅé¤ÎRedhat FC4¨Ó¹ê§@,¤£¨Ï¥ÎIBM personal communication(PC) ³nÅé
¨Ï¥ÎCUPS¦Lªí¨t²Î,§@§¹¤Fı±o¥i¥H§¹¥þ¨ú¥NPCªº¦Lªí¾÷Âà¦V¤u§@,¦ýµLªk¦C¦L¤¤¤å

­ì²z:
linux (lp5250d)->as400 (²£¥ÍµêÀÀ¦Lªí¾÷)
as400(¦C¦L)->linux(lp5250d)->²£¥ÍpdfÀÉ
¦]¦¹­«ÂI¦blinux¤Wªºlp5250dªº³]©w

¨Ï¥Î¨t²Î¤Î³nÅé
FC4
CUPS
tn5250
a2ps
ghostscript-ps2pdf
python

³]©wlp5250d
¥¦¥i¥H¦b©R¥O¦Cª½±µ¤U©R¥O,¤]¥i¥HŪ¨ú¨Ï¥ÎªÌ¥Ø¿ý¤U.tn5250rcªº³]©w
¨Ò:
lp5250d env.DEVNAME=testprint  outputcommand="scs2ascii | lpr"  192.168.0.100
³s½u¨ì192.168.0.100²£¥ÍµêÀÀ¦Lªí¾÷testprint,·í¨Ï¥ÎªÌ¦C¦L®ÉÂà¦V¥»¾÷ªº¹w³]¦Cªí¾÷

¦P¤U¥ý½s¿è.tn5250rc¦b­Ó¤Hªº¥Ø¿ý¤U
cd
vi .tn5250rc,¥[¤J¤U­±¤º®e
mytest {
          host=192.168.0.100
         env.DEVNAME=testprint
          outputcommand=scs2ascii  | lpr
}
µM«á¦b©R¥O¦C¤U
lp525pd  mytest 
´N¥i¥H¤F

¤T­Ó¦³¥Îªºµ{¦¡
scs2ascii
scs2ps
scs2pdf
³o­Ó¤T­Óµ{¦¡¥i¥H¥Î¦boutputcommand=
scs2ascii-±N¸ê®ÆÂର¤å¦rÀÉ
scs2ps-±N¸ê®ÆÂରpsÀÉ
scs2pdf-±N¸ê®ÆÂରpdfÀÉ
#outputcommand ·|±N¦Ûas400¨ú±oªº¦C¦L¸ê®Æ¬y(stream)Âà¨ì³oùةҨϥΪºµ{¦¡
#scs2pdf¤Îscs2ps¹ï©ó¼eªº³øªí·|²£¥Í¤@Ãä³Qµô±¼,¦]¦¹µLªkÀ³¥Î¤~¦³¥»¤å¥ó

lp5250d³]©w
outputcommand =scs2ascii  | ¦Û¤vªºµ{¦¡
²{¦b©w¤F¤§«á­«ÂI´N¬O¦Û¤vªºµ{¦¡
§Úªu¥Î¤§«e¨Ï¥Îpythonªºµ{¦¡

´ú¸Õ
¨Ï¥Îoutputcommand=scs2ascii > /tmp/abc.txt
¥Ñ400¦L¦C¨ìlinux«á,²£¥Í¤@­Óabc.txtÀÉ®×
ª`·N:¦C¦Lªº¤å¥ó¦³¨âºØ,¤@ºØ¬O§t¦³^M,¥t¥~¤@ºØ¬O¤£§t^M,­Y¤£§t^M«Ü²³æ(¨ú±o³Ì¼e¦æ¡A¦pªG¶W¹L¬Y­Ó¼e«×,°²³]85,¦ba2ps ¨Ï¥Î¾î¦V¦C¦L°Ñ¼Æ-r,¤p©ó85ª½¦V°Ñ¼Æ-R)
¥H¤U°Q½×§t¦³^M
¦blinux¤U
viÀ˵ø
¦h¤F^M ¤Î^L
hexdump  abc.txt  -C | more
¬d¨ì
^M = 0d
^L=0c  
man ascii
¬d¨ì
0d-¦^¨ì¦æ­º
0a-´«¦æ(linux)
0d 0a -´«¦æ(dos)

0c-´«­¶
#^M¬O±N¸Ó¦æ¤å¦r¤À¬°¨â¬q°²³]¸Ó¦æ¬° aaaaa^Mbbbbb, ¤å¦r¬°A¤ÎB¬q,B¦^¨ì¦æ­ºª½±µÂмg¦bA¤W,^M¥i¯à¦³¦h­Ó
#¦]¬°¦³10¶i¦ì¡B16¶i¦ì¡BASCIIªºªí¥Üªk,µLªk±oª¾¦bpythonµ{¦¡¤¤ªí¥Üªk¬°¦ó?
python ´ú¸Õ
python
>> tmpf=open("/tmp/abc.txt")
>>line=tmpf.readline()      
##­«½Æ°õ¦æ¼Æ¦¸¨ì§t¦³^M
>>sub_string=line.split("\r")
##±N¦r¦ê¤À³Î

¥H¤U¬Oµ{¦¡½X:
#!/usr/bin/python
import sys,tempfile,commands,time,string
from time import localtime,time,strftime
dir='/home/samba/ps2pdf/'
tempdir=dir+'temp/'
output_dir='outfile/'
tempn1=tempfile.mktemp('.tmp')
tempn2=tempfile.mktemp('.txt')
tempn3=tempfile.mktemp('.ps')
maxline=0
p_unix2dos=commands.getoutput('which unix2dos ')+" -o "
p_a2ps=commands.getoutput('which a2ps')+" "
p_ps2pdf=commands.getoutput('which ps2pdf14')+" "
#½Ð­×§ïout_file¨ì§A­n¿é¥Xªº¦a¤è
out_file=dir+output_dir+strftime('%m%d-%H%M%S.pdf',localtime(time()))
def combine_string(subs1,subs2):
    return_string=""
    s_wide=max(len(subs1),len(subs2))
    subs1=subs1.ljust(s_wide)
    subs2=subs2.ljust(s_wide)
    for i in xrange(0,s_wide):
        if subs1[i]==" " and subs2[i]!=" " :
           return_string=return_string+subs2[i]
        else:
           return_string=return_string+subs1[i]
    return return_string+"\n"


pipefile=sys.stdin
tempf1=open(tempn1,'w+')
tempf1.write(pipefile.read())
tempf1.close()
tempf1=open(tempn1,'r')
line=tempf1.readline()
tempf2=open(tempn2,'w+')
while line:
     sub_str=line.split("\r")
     if len(sub_str)==1:
        line=sub_str[0]   
     elif len(sub_str)==2:
        s1=sub_str[0]
        s2=sub_str[1]
        s2=s2[1:]
        s2=s2.replace("\n","")
        line=combine_string(s1,s2)
     else:
        s1=sub_str[0]
        s2=sub_str[1]
        line=combine_string(s1,s2)
     if len(line)>=maxline:
        maxline=len(line)

     tempf2.write(line)
     line=tempf1.readline()

tempf1.close()
tempf2.close()
pipefile.close()
convert_prg1='/usr/bin/a2ps '
convert_prg2='/usr/bin/ps2pdf14 '
#page width
#if width >85 then we chang the print orientation from
if maxline>=85:
   print_dir=' -r '
else:
   print_dir=' -R '

convert_opt=' --no-header --borders=0 -M letter --columns=1 --rows=1 '+print_dir+'-l '+str(maxline)+' -o '
convert_string=p_a2ps+tempn2+convert_opt+tempn3
a=commands.getoutput(convert_string)
#Âà´«PDFÀÉ,¬°¤F°£¿ù§Ú¤À¦¨¨â¦æ,§A¥i¥H¨Ï¥Î|¦X¦¨¤@¦æ
a=commands.getoutput('/usr/bin/ps2pdf '+tempn3+" "+out_file)
a=commands.getoutput('/bin/chmod 444 '+out_file)
#¦C¦LPSÀɨì¦Lªí¾÷laser
#­Y­n¨Ï¥Î¤U³o­Ó¥\¯à,±N«e¨â¦æmark°_¨Ó
#a=commands.getoutput('lpr -P laser '+tempn3)
a=commands.getoutput('unlink '+tempn1)
a=commands.getoutput('unlink '+tempn2)
a=commands.getoutput('unlink '+tempn3)



µ{¦¡ »¡©ú
Ū¨úscs2ascii©Ò¶Ç¨Óªºstream,±N¦æ¤¤¦³^M¦X¨Ö¦r¦ê,¨Ï¥Îa2psÂରpsÀÉ¡A¦A¨Ï¥Îps2pdf14±NÀÉ®×ÂରpdfÀÉ,a2ps¨Ï¥Î ªº°Ñ¼Æ--no-header --borders=0 -M letter --columns=1 --rows=1 ,ÁÙ¦³¤@­Ó¬O­n®Ú¾Ú¨C¦æªº¦r¼Æ¬Ý­nª½¦LÁÙ¬O¾î¦L,§Ú¬O¨Ï¥Î 85¬°¤À¬É,<85 -R ,>=85 -r

¦A³]©w.tn5250rc
°²³]¼g¦nªºµ{¦¡¬°/home/csc/txt2pdf
pdf  {
          host=192.168.0.100
         env.DEVNAME=pdf
          outputcommand=scs2ascii  | /home/csc/txt2pdf
}

±Æµ{
§A¥i¥H¦b/etc/cron.d¤º½s¿è,©Î¬O¥Î¨ä¥¦¤u¨ã¨Ó³]©w,®É¶¡¦Û¤v©w
1.±Ò°Ê
    lp5250d  pdf
2.Ãö³¬
    killall lp5250d -s KILL
    ¥Î©ó¶]¦h­Ólp5250d

EPSON2080CÂà¦V´ú¸Õ
¥H¤U¥Ü½d¨âºØ¤è¦¡
1.smb -°²³]¥D¾÷¦WºÙ¬°test1,¤À¨É¦Lªí¾÷epson
2.lpd  - °²³]ip=192.168.0.50,¤À¨É¦Lªí¾÷ epson
°õ¦æsetup -> printer configure ->·s¼W¦Lªí¾÷(dot,dot1)¿ï¥Îepson ÂI¯x°},¶ñ¤J¤W­z¸ê®Æ,ÅX°Êµ{¦¡¦b³]©w¸ÑªR«×180x180

dot{
   host=192.168.0.100
   env.DEVNAME = dot
   env.IBMMFRTYPMDL = *EPLQ1170
   outputcommand = lpr -P dot -oraw
}
dot1 {
   host=192.168.0.100
   env.DEVNAME = dot1
   env.IBMMFRTYPMDL =*EPLQ1170
   outputcommand = lpr -P dot1 -oraw
}
¨ä¤¤-oraw¤@©w­n¤U§_«h¦b/var/log/cups/error_log,·|ĵ§i§AµLªk¦C¦Lstream
#©Î¬O  ­×§ï/etc/cups/¤¤
mime.convs-application/octet-stream
mime.types-application/octet-stream
ªº#¥h±¼,«h¥i¥H¤£¥Î-oraw
±NÂনªºpdfÀɪ½±µ¦C¦L
´ú¸Õ,§A­n¥ý³]©w¦n¦Lªí¾÷°²³]laser
lpr abc.pdf -P laser ¦pªG¦C¦L¥¿±`³]©w
.tn5250rc
laser {
         host=192.168.0.100
          env.DEVNAME=laser
          env.IBMMFRTYPMDL=*HP4
         outputcommand=scs2pdf | §AªºpdfÂàÀɵ{¦¡ 
}
§Aªºµ{¦¡¤¤¥i¥H¥[¤Jlpr ÀɮצWºÙ -P laser -oraw ,·í¨Ï¥ÎªÌ¦C¦L³o­Ó¦Lªí¾÷®É·|³QÂনpdfÀÉ,µM«á¦A¦C¦L

§Úªºkyeroa mita fs1010,µLªk¨Ï¥Îhp4¬Û®eª½±µ¦C¦L
laser {
         host=192.168.0.100
          env.DEVNAME=laser
          env.IBMMFRTYPMDL=*HP4
         outputcommand=lpr -P laser  -oraw
}
¦]¦¹¨Ï¥ÎÂରpsµM«á¦A¦C¦L,¨S¦³°ÝÃD,¥ô¦ó¸ê®Æ³£¥i¥H³Q§Úªºµ{¦¡Âରps¦A¦C¦L