这一个条普通的打印命令:
gs -sDEVICE=ijs -sIjsServer=ijsgutenprint -dIjsUseOutputFD -sDeviceManufacturer="Canon" -sDeviceModel="bjc-MULTIPASS-MX420" -r600x600 -dNOPAUSE -dSAFER -sOutputFile="/dev/usb/lp0" /system/usr/share/ghostscript/examples/tiger.ps -c quit
在PC上看打印图片就比打印普通文档多了一步设置纸张类型,想来命令行也很简单,不过这差点成了压倒我的最后一根稻草。
第一个打印图片的例子是在这里找到的《hpijs_readme》:
$ gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" \ -sDeviceModel="DESKJET 990" -r300 -dNOPAUSE -dSAFER -sOutputFile="/dev/lp0" \ -dDEVICEWIDTHPOINTS=288 -dDEVICEHEIGHTPOINTS=432 photo.ps -c quit
这让我学会了调整真实的纸张大小,在
重点是关于纸张类型这一步,hpijs给出的例子是这样确定的:
-sIjsParams="Quality:Quality=n,Quality:ColorMode=n,Quality:MediaType=n, Quality:PenSet=n,Quality:FullBleed=n,PS:MediaPosition=n" |
关于MediaType如下:
MediaType equals: 0=plain (default), 1=premium, 2=photo |
很快验证是不可行的,测试前还没有抱多大希望,毕竟一个是hpijs一个ijsgutenprint,多少会有差异的。
下面就开始疯狂的Google关于ijsgutenprint如何设置纸张类型,在《blcmdl1_ijsgimpprint.》(gimpprint是gutenprint的前辈)找到这样一个例子:
gs -sDEVICE=ijs -sIjsServer=/usr/bin/ijsgimpprint -sDeviceManufacturer=EPSON -sDeviceModel=escp2-870 -sOutputFile=/dev/lp0 -sIjsParams='Quality=1440x720hq,MediaType=GlossyPhoto,Density=0.8,ImageType=2' foo.ps |
兴奋过后就是失望,无论如何测试输出的都是:
DEBUG: ijsgutenprint: Settings: Model bjc-MULTIPASS-MX420 DEBUG: ijsgutenprint: Settings: PageSize Letter DEBUG: ijsgutenprint: Settings: MediaType Plain DEBUG: ijsgutenprint: Settings: InputSlot Rear DEBUG: ijsgutenprint: Settings: CDOuterDiameter 329 DEBUG: ijsgutenprint: Settings: CDInnerDiameter 121 DEBUG: ijsgutenprint: Settings: CDXAdjustment 0 DEBUG: ijsgutenprint: Settings: CDYAdjustment 0 |
后边的参数还用了ppd文件中的glossygold,glossypaper都没有任何效果。且一再尝试是否是在IjsParams设置的参数,依旧没有任何效果。倒是找到这些个文档《blcmdl7_gimpprint-mediatypes》文中详细叙述了Canon打印机支持的MediaType。再补充一点,还尝试了用cups打印,然后查看/var/log/cups/error_log文件看命令会是什么:
hostscript command line: gs -dQUIET -dPARANOIDSAFER -dNOPAUSE -dBATCH -dNOINTERPOLATE -sDEVICE=cups -sstdout=%stderr -sOutputFile=%stdout -sMediaClass=Rear -sMediaType=GlossyPaper -r600x600 -dDEVICEWIDTHPOINTS=595 -dDEVICEHEIGHTPOINTS=842 -dcupsBitsPerColor=8 -dcupsColorOrder=0 -dcupsColorSpace=1 -dcupsRowFeed=2 -scupsPageSizeName=A4 -I/usr/share/cups/fonts -c -f -_ |
照做也没有任何的效果。
一整天疯狂的Google,尝试各种关键词,在我几乎绝望的时候我Google了这样的关键词《sIjsServer=ijsgutenprint GlossyPaper canon》,在google的仅有的一条搜索结果中《gimp-print-devel - SourceForge》找到了当初还并不确信的结果:
-dDEVICEWIDTHPOINTS=3D595 -dDEVICEHEIGHTPOINTS=3D842 -r360x360 -sProcessColorModel=3DDeviceRGB -sIjsParams=3D"STP_VERSION=3D5.0.0-rc2,STP_InputSlot=3DStandard,STP_MediaTy= pe=3DInkjet,STP_Brightness=3D1.000000,STP_Saturation=3D1.000000,STP_Contras= t=3D1.000000,STP_Density=3D1.000000,STP_BlackDensity=3D1.000000,STP_CyanDen= |
注明一点:gutenprint-ijs.5.2-stp_mediatype.xml文件名字。
我的最终结果是:-sIjsParams="STP_MediaType=GlossyPaper"。
完全打印一个4x6寸照片的完整命令:
# mx428打印照片 gs -sDEVICE=ijs -sIjsServer=ijsgutenprint -dIjsUseOutputFD -sDeviceManufacturer="Canon" -sDeviceModel="bjc-MULTIPASS-MX420" -r600x600 -sIjsParams="STP_MediaType=GlossyPaper" -dNOPAUSE -dSAFER -sOutputFile="/dev/usb/lp0" -dDEVICEWIDTHPOINTS=288 -dDEVICEHEIGHTPOINTS=432 photo.ps -c quit |
Ijsgutenprint的输出信息也正常了:
DEBUG: ijsgutenprint: about to print DEBUG: ijsgutenprint: Settings: Model bjc-MULTIPASS-MX420 DEBUG: ijsgutenprint: Settings: PageSize w288h432 DEBUG: ijsgutenprint: Settings: MediaType GlossyPaper DEBUG: ijsgutenprint: Settings: InputSlot Rear |
其它额外收获:《cropping-a-pdf-using-ghostscript-9-01》。
回头想想,如果早一点对gutenprint进行RTFC,也许问题也就没有那么难了。一直有一个思想就是遇到问题先找巨人,然后我站他肩膀上,这事就算ok了。这样做的结果是这一次成功的很快,但是到时候遇到相邻的一点新问题就有可能造成要找新的巨人。
这个问题至此结束。