LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1539|回复: 4

求教:嵌入式Linux打印功能的实现

[复制链接]
发表于 2008-8-13 17:28:35 | 显示全部楼层 |阅读模式
  我打算实现一个嵌入式arm linux系统中的打印接口,请教一下思路。因为之前没有做过,所以概念比较模糊。具体来说,我的应用程序是一个基于Minigui的程序,系统是 arm926核的CPU+ 2 FPGA的硬件架构,常用的外设接口都有,包括RS232,USB Host/Device,VGA,Ethernet等。打印机准备选用HP的,使用USB接口。

  现在我想实现的是一个简单的打印功能,比如软件中生成一个报告,按打印键打印出来。具体实现的思路是什么?我大概知道"应用程序 ->Ghostscript->打印任务管理模块->打印驱动"这样一个流程,但是具体的实现方式比较模糊。有相关经验的朋友,指教一下。谢谢。
 楼主| 发表于 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打印管理系统的方案。
回复 支持 反对

使用道具 举报

发表于 2008-10-6 22:05:52 | 显示全部楼层
不错,顶一个!
回复 支持 反对

使用道具 举报

发表于 2008-10-7 17:17:30 | 显示全部楼层
目前还没有想到什么地方用得上
回复 支持 反对

使用道具 举报

发表于 2008-10-7 19:29:57 | 显示全部楼层
肯定有用呀,很多东西都需要支持打印功能,我们有个东西就是,目前只能用串口打印机,又破又贵。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表