|
楼主 |
发表于 2008-10-1 12:57:23
|
显示全部楼层
------------------------------------------------------------------------------------------------------------------------------------
经过一段时间的研究,现已基本实现在arm linux里打印的功能。
首先交叉编译CUPS,这个就不细说了,configure一下即可。
先后用过两个打印机,第一个打印机HP P1008由于不支持标准的PCL,而只支持特殊的XQX Stream Protocol,最终无法搞定在板子上的文档数据转换而放弃。原因主要是:cups使用foomatic-rip做智能文档过滤器,这是一个perl程序,需要一个perl运行环境;需要调用第三方驱动foo2xqx和gs去进行数据转换,太复杂,通用性也不够(假如换打印机或支持更多打印机)。后来更换了一个支持PCL的HP打印机。
最终的实现抛开了cupsd和ghostscript,因为我的需求比较简单:打印jpeg图片。
我最终只使用了cups的两个过滤器程序imagetoraster, rastertohp,后端backend程序usb,还有打印机的PPD文件,一共只有几百K的大小。自己写脚本和程序实现打印,基本的流程如下:
imagetoraster | rastertohp | cat > /dev/usb/lp0
因为/dev/usb/lp0是独占打开的,所以这样打印会导致无法并发提交打印任务,所以自己写了个to_printer程序代替cat,其中使用简单的文件锁来产生当前有进程在打印时另外的打印进程等待的效果。
如果要支持多种复杂文档格式的打印,估计gs还是必不可少的,因为cups的过滤器也会调用gs,比如imagetops。
------------------------------------------------------------------------------------------------------------------------------------
目前针对支持HP PCL打印语言的打印机可以使用上贴的方法进行打印。如果是使用Epson的打印机,如果支持ESC/P,应该使用rastertoepson也可以实现。
上述的实现主要针对打印图片。实际上打印其他任何文档的思路应该是一样的,选择一个过滤器路径,用管道组合,比如pdftops | pstoraster | rastertohp > printer 。只是涉及到要转换到ps的状况,要调用gs。
另外,我自己实现打印过程的原因是CUPS没有彻底搞定(我这里主要是backend/usb的问题)。如果彻底搞定CUPS(配合ghostscript),那么会是一个比较理想的嵌入式Linux打印管理系统的方案。 |
|