Ghostscript的介绍和移植
关于ghostscript(以下简称gs)。Gs是一个地下工作者,一般用户不熟悉它,因为它上不和用户直接打交道,下不直接接触打印机。但是在打印工作中它却扮演了极为重要的解色。
一般从用户常见文件如图片或者word到打印机经过这么几套工序,以word为例子:
Doc -> 中间文件(如pdf,以前是postscript)->打印机语言(如:PCL)->打印机
Gs所做的工作就是将中间文件转化为适应各种打印机的打印机语言(或者叫光栅文件)。然后将该文件发送给打印机,打印机将光栅文件打印到纸张上,就是一次完整的打印过程。
我使用两个版本的gs有8.15和9.04,前者静态编译出来4M大小,后者是16M大小。前者是打印文字需要装字库,但是后者不需要。前者对PDF的处理不是太完善,其实也可以理解,8.15版本是2004年发布的,而9.04是2011年发布的。所以这个只给出9.04版本的编译脚本:
#!/bin/sh#author kangear#date 2014.05.08#build ghostscript9.00#print PDF return code "0" not "1", Fix 8.15 return "1"DESTDIR=${PWD}/_install# 1. download sourcewget http://iweb.dl.sourceforge.net/project/ghostscript/GPL%20Ghostscript/9.04/ghostscript-9.04.tar.bz2 &&# 2.解压源码tar xvjf ghostscript-9.04.tar.bz2 &&# 3.分别拷贝为PC版本和ARM版本cp ghostscript-9.04 ghostscript-9.04-arm -r && mv ghostscript-9.04 ghostscript-9.04-pc &&# 4.编译PC版本cd ghostscript-9.04-pc && ./configure && make XCFLAGS=-DHAVE_SYS_TIME_H=1 && cd ../ &&# 5.修改Makefile.in中[email protected][email protected] -lm 为[email protected][email protected] -static -lmcd ghostscript-9.04-arm && sed -i '387s/[email protected][email protected] -lm/[email protected][email protected] -static -lm/' ./Makefile.in &&# *5.1. 修定/tmp目录sed -i '74s/"\/tmp\/"/"\/data\/misc\/printer\/tmp\/"/' ./base/gp_unifs.c &&# 6.配置arm版本./configure --host=arm-linux --prefix=/system/usr/ --disable-fontconfig --disable-gtk --disable-cups &&# 7.拷贝PC版本工具test -d ./obj/aux || mkdir -p obj/aux/ && cp ../ghostscript-9.04-pc/obj/aux/genarch ../ghostscript-9.04-pc/obj/aux/genconf ../ghostscript-9.04-pc/obj/aux/echogs ../ghostscript-9.04-pc/obj/aux/mkromfs ./obj/aux/ &&# 8.编译make XCFLAGS=-DHAVE_SYS_TIME_H=1 || cp ../ghostscript-9.04-pc/obj/aux/mkromfs ./obj/aux/ &&make XCFLAGS=-DHAVE_SYS_TIME_H=1 &&# 9.安装make install DESTDIR=${DESTDIR}# 10.rm -rf ${DESTDIR}/system/usr/share/ghostscript/9.04/docrm -rf ${DESTDIR}/system/usr/share/ghostscript/9.04/examplescd ${DESTDIR}/system/usr/bin && rm -f !(gs) && cd - &&cd ${DESTDIR}/ && tar cvzf gs904.tar.gz system/
注意gs的启动需要${TEMPDIR}(一般是/tmp目录),但是Android中没有/tmp目录所以就启动不了,要像脚本中修改/tmp目录或者在Android系统根目录中建立tmp目录。
可以直接将输出到打印机的设备节点,但是也可以只生成PCL文件,通过其它方式传送到打印机,这里基于hpijs来生成PCL文件。例如:
gs -sDEVICE=ijs -sIjsServer=hpijs -dIjsUseOutputFD -sDeviceManufacturer="HEWLETT-PACKARD" -sDeviceModel="deskjet 5550" -r300x300 -dNOPAUSE -dSAFER -sstdout=%stderr -sOutputFile=%stdout test.pdf > pcl3gui.bin
会将test.pdf文件生成pcl3gui格式的PCL文件。无论通过什么方式将其传送到打印机都可以实现打印机test.pdf文件内容。
文章写的草率了。暂就这样结束了。还要赶着研究其它内容。
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
上一篇: Mac-使用AppleScript脚本(网络和终端篇)
下一篇: iconv库的移植