第一波
> 1>. 通过上面demo可知,这个适用于HP打印机,那我这里想使用epson打印机,想使用ijsgutenprint,这里也就要求移植gutenprint,
是的,是这样的。需要移植gutenprint.
> 那请问在这里,gutenprint 编译仅只需要ijsgutenprint即可,还是同时需要其他什么文件(按照我的理解是同时需要其他文件,但不知道其他配置文件 应该如何设置)?
是需要编译gutenprint就可以了。
2>. 在cups打印时,发现在设置打印机时会生成ppd文件,请问该ppd文件与打印机驱动有什么关系?
正是由于cups才有了ppd,cups是一个大管家,全部型号它都管理,如何管理就是依靠的ppd文件。Ppd文件决定了cups在每一步应该派谁出场。
3>. 按照我的理解,像hpijs、ijsgutenprint等才是打印机的驱动,那ppd 文件在打印时起到什么作用?
Hpijs ijsgutenprint仅仅是整个驱动中的九牛一毛而已.ppd文件应用在cups在宏观调控时,比如决定在最后时刻调用hpijs还是ijsgutenprint。
4>. 请问命令: $ gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5550" -r300x300 -dNOPAUSE -dSAFER -sOutputFile="/dev/lp0" ./tiger.ps -c quit
中-sDeviceManufacturer -sDeviceModel 是根据什么规则生成的?
这个是hpijs中写的。由于hpijs开发时间比较早,新的型号驱动中并没有,所以对于这里使用型号“deskjet 5550”是试出来的。
20140926更:补充网友的提问
第二波
第三波
20141010更:
第4波:
你好,前段时间根据你的思路实现了ARM-LINUX平台下的USB打印机,使用方案是gs-hpijs,打印机为deskjet1000。对这块非常感兴趣,再次咨询几个问题:
1. 大致了解了下,在Linux打印系统中,只要Linux内核支持USB打印通信协议,然后使用打印系统 CUPS→gs→hpijs就可以在命令行上输入命令进行打印了,问题是三个软件都移植了,而只使用了gs和hpijs就可以实现命令行打印了,而CUPS不知道是如何调用gs软件的,也不知道如何用,请指点一二?(只大概认为gs通过ijs接口调用hpijs的)
这就要用到之前提到过「ppd文件」,需要添加「打印机」到cups中,这个过程中要指定ppd文件(包含在hpijs源码中),这样就可以使用通用的lpr xxx.ps命令来打印了。Cups会自动根据ppd文件中调用之前手动执行的打印命令。
2. hpijs是针对惠普公司的喷墨打印机驱动,如果我要在ARM-LINUX平台上实现爱普生、佳能打印机,是不是还是可以使用gs--xxx方案,这个xxx可以是其他驱动?
Gutenprint中包含了一个ijsgutenprint和hpijs类似的基于ijs的实现,可以支持市面上各个厂商70%打印机型号。
3. 命令行打印时,都是把ps格式的文件送给/dev/lp0,如果要打印常用的txt、jpg等格式的文件时,应该把txt、jpg文件先转换为ps格式的文件,然后再用命令行打印,可以使用gs软件转换吗?不知道怎么转换,没有一点思路,请提醒一下.
Ps格式是比较原始的 中间格式,Gs同样支持PDF格式作为 中间格式,txt,jpg等格式文件转换成PDF就相对容易了。整体思路就是先使用其它库或者工具将常见格式如txt,jpg等等转换为PDF,接下来交给GS处理就好了。
4. 我想深入理解,而只看了gs和hpijs软件源代码中的说明文档,需要看gs和hpijs软件的源代码吗?如何下手?
这些开源项目很成熟,个人目前看法是会用就好。
还有一些东西也存在这里吧:
嵌入式Linux开发板:
-dFirstPage=2 -dLastPage=3
/system/usr/bin/gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5550" -r300x300 -dNOPAUSE -dSAFER -sstdout=%stderr -sOutputFile="/dev/lp0" /sdcard/ruler.pdf -c quit
/system/usr/bin/gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5550" -r300x300 -dNOPAUSE -dSAFER -sstdout=%stderr -sOutputFile=- - < /sdcard/ruler.pdf > /dev/lp0
/system/usr/bin/gs \
-sDEVICE=ijs \
-sIjsServer=hpijs \
-dIjsUseOutputFD \
-sDeviceManufacturer="HEWLETT-PACKARD" \
-sDeviceModel="deskjet 5550" \
-r300x300 \
-dNOPAUSE \
-dSAFER \
-sstdout=%stderr \
-sOutputFile=- - < \
/sdcard/ruler.pdf \
> /dev/lp0
Android:
/system/usr/bin/gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5550" -r300x300 -dNOPAUSE -dSAFER -sstdout=%stderr -sOutputFile="/dev/usb/lp0" /mnt/external_sd/chinese.pdf -c quit
gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5550" -r300x300 -dNOPAUSE -dSAFER -sstdout=%stderr -sOutputFile=- - < /mnt/external_sd/chinese.pdf > /dev/usb/lp0
PC:
/system/usr/bin/gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5550" -r300x300 -dNOPAUSE -dSAFER -sOutputFile="/dev/usb/lp0" /home/kangear/Work/Printer/res/Ruler/ruler.pdf -c quit
gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5550" -r300x300 -dNOPAUSE -dSAFER -sstdout=%stderr -sOutputFile=%stdout ~/HelloWorld.pdf -c quit > HelloWorld.PCL3GUI