关于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 source
wget 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中STDLIBS=@PTHREAD_LIBS@ -lm 为STDLIBS=@PTHREAD_LIBS@ -static -lm
cd ghostscript-9.04-arm &&
sed -i '387s/STDLIBS=@PTHREAD_LIBS@ -lm/STDLIBS=@PTHREAD_LIBS@ -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/doc
rm -rf ${DESTDIR}/system/usr/share/ghostscript/9.04/examples
cd ${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文件内容。

文章写的草率了。暂就这样结束了。还要赶着研究其它内容。

Ghostscript的介绍和移植相关推荐

  1. 亲测有效的UCOSIII嵌入STM32F103C8T6实验,介绍常见移植问题,付实测代码!!!

    花了两天时间,作为一名UCOSIII系统小白终于成功地将该系统移植到了C8T6中,当LED闪烁时,成就感与喜悦感不亚于第一次用51或者STM32点亮LED.我认为类似我这样的第一次接触UCOSIII并 ...

  2. Android系统的软件OpenGL介绍以及移植

    一. 简介 Android从很早之前就给出了软件OpenGL的实现,主要应用场景还真不在于代替GPU来实现UI的绘制,它主要目的是让芯片厂商在GPU驱动还没集成之前带起系统. 先讲下软件OpenGL为 ...

  3. The FreeRTOS Distribution(介绍、移植、类型定义)

    1 Understand the FreeRTOS Distribution 1.1 Definition :FreeRTOS Port FreeRTOS目前可以在20种不同的编译器构建,并且可以在3 ...

  4. 如何将三万行代码从Flow移植到TypeScript?

    作者 | David Gomes 译者 | 弯月 责编 | 郭芮 来源 |  CSDN(ID:CSDNnews) [编者按]在内存安全中,类型安全是很重要的一个命题.为了确保JavaScript项目运 ...

  5. 交叉编译VIM并移植到ARM嵌入式Linux系统

    原创作品,允许转载,转载时请务必以超链接形式标明文章.作者信息和本声明,否则将追究法律责任.   众所周知,vim是vi的增强版本,实际体验要比vi好用很多,由于笔者为ARM系统制作的基于busybo ...

  6. UBI 文件系统移植 sys 设备信息【转】

    转自:http://blog.chinaunix.net/uid-25304914-id-3058647.html cat /sys/class/misc/ubi_ctrl/dev --------- ...

  7. Linux内核移植之三:内核配置选项

    内容来自 韦东山<嵌入式Linux应用开发完全手册> Linux内核配置选项多达上千个,一个个地进行选择既耗费时间,对开发人员的要求也比较高(需要了解每个配置选项的作用).一般的做法是在某 ...

  8. u-boot移植第三弹——移植2013.10u-boot到RealARM210 cortex-A8开发板(支持moviNAND_Fusing_Tool_v2.0)

    在移植2012.10过程中遇到个麻烦的问题,到写这篇文章的时候还是没找原因在哪,导致无法正常运行.我遇到的问题如下:__bss_start和__bss_end__这两个地址无法正确得到地址,也就是bs ...

  9. 2.11.1.移植前的准备工作

    本节介绍uboot移植工作正式开始前的准备工作,主要是环境搭建和必备工具的使用. 2.11.1.1.三星移植过的uboot源代码准备 (1)三星对于S5PV210的官方开发板为SMDKV210,对应的 ...

  10. OSS.Social微信项目标准库介绍

    经过本周的努力,昨晚终于完成OSS.Social微信项目的标准库支持,当前项目你已经可以同时在.net framework和.net core 中进行调用,调用方法也发生了部分变化,这里我简单分享下, ...

最新文章

  1. 如何通过 Vue+Webpack 来做通用的前端组件化架构设计
  2. 第一个DNN 模块PictureGallery已经完成
  3. PL/SQL批处理语句:BULK COLLECT 和 FORALL
  4. phpcmsv9全站搜索,不限模型
  5. jquery动画切换引擎插件 Velocity.js 学习01
  6. 安卓端和IOS端小程序蓝牙通讯问题
  7. python requests text content_python 3 关于requests库的 text / content /json
  8. java语法让反编译报错_java 反编译
  9. 人工智能翻译能否替代人工翻译,人工智能翻译何去何从
  10. 前端特效 —— 八卦图旋转(纯css)
  11. 数学建模——SPSS的非参数检验
  12. python自己制作视频_你还在为看电影发愁?Python制作全网视频播放工具!
  13. java cmd 隐藏窗口_运行bat时隐藏cmd窗口
  14. Rails Controller中的concerns测试编写
  15. python paramiko连接时报错Authentication (publickey) failed
  16. win10 安装docker msi主板开启虚拟化
  17. 数据分析与数据挖掘方面招聘的笔试题分享
  18. 用计算机的笔来画来画画说课稿,电脑画画教案设计
  19. 被困在深海沉船近3天,他奇迹般地活了下来!
  20. C++教程网编程视频

热门文章

  1. 云教室管理平台 部署手册(无图)
  2. 曲线拟合最小二乘法优缺点_最小二乘法、回归分析法、灰色预测法、决策论、神经网络等5个算法的使用范围及优缺点是什么?...
  3. PLINK-GWAS学习9------对于二元数据的关联分析
  4. ETL设计详解(数据抽取、清洗与转换)
  5. 手机论文查重软件哪个好?
  6. ElasticSearch + kibana 基础查询文档大全
  7. win11安装ie浏览器
  8. nodejs mysql嵌套查询_nodejs+mysql嵌套查询的问题
  9. xp激活30天到期_我的XP系统还剩30天激活怎么办
  10. 编译google libyuv so库