引言
本人从事打印机开发和打印驱动开发的相关工作,深感资料特别是中文资料的匮乏和不成系统,对新入门的从事该行业的人来说,门槛很高。在这里一方面是将开发中遇到的相关知识点整理出来,另一方面也能够促进自己的学习。打印相关的知识很多,这里分系列的写出来。主要分以下几个部分:

一、
概述。这一章节简单描述PCL语言的来源、演变,以及它的功能和目的。

二、
打印基础知识。这一章节介绍打印开发所需要的基础知识,专业术语等。

三、
PCL语言。这一章节介绍PCL语言的组成、命令格式等。

四、
PJL语言。这一章节介绍PJL语言的组成。

五、
PC打印驱动。这一章节介绍PC端打印驱动的流程、模型等。

六、
设备端打印驱动。这一章节简单介绍如何进行设备端打印驱动的开发。主要是USB gadget的驱动开发。

七、
打印文件解析。这一章节将具体解析打印驱动生成的发到打印机的文件。

八、
Ghostpdl介绍。这一章节主要介绍开源ghostpdl,以及它的功能、作用等。

九、
Ghostpdl编译和使用。这一章节讲述如何编译ghostpdl和使用ghostpdl软件,以及可以通过该软件进行哪些开发。

十、
CUPS。这一章节主要介绍CUPS的功能、作用及使用等。

一、
概述

PCL ,是Printer Command Language的简写,由HP公司创造的打印控制语言。目前已经成为业界标准了。它的目的是为各种打印设备提供一系列的经济且高效的方法,用来控制打印机的特性。

PCL命令嵌在打印任务数据流中,这样能减少数据传输和命令解析的开支。PCL格式和字体设计成能够很快转换成高质量、栅格化的打印图像。

PCL打印语言从PCL1 演变到PCL6。目前使用最广泛的是PCL5和PCL6,,包括PCL5e、PCL5c和PCL XL。PCL XL即为PCL 6增强版。关于PCL的详细文档可参见HP公司的《PCL 5e Technical Reference Manual》、《PCL XL Feature Reference Protocol Class 2.0》等等。这些资料都是十分权威和详实的。

PCL 6 类打印语言包含三种关键组成。一种是PCL 6 增强版,它是为视窗系统的图形界面优化的,如MicroSoft Windows,OS/2等;第二种是PCL 6 标准版,它提供向后兼容的能力,等价于 PCL 5e 或者 PCL 5c;第三种是字体综合。

PCL 6 增强版也称PCL XL,它以最少的命令和数据来描述打印页面,提高了在视窗系统下的打印效率。

PJL ,是Printer Job Language的简写,它提供了不同类别的打印控制。与PCL不同的是,PJL提供任务级别的控制,而PCL和HP-GL/2只控制打印页面上的打印点的位置。

二、
打印基础知识

  • 测量单位

在打印业界,有好几种测量单位,分别是英寸、厘米、点。英寸和厘米不用解释,1英寸=2.54厘米。点,即是物理上的意义,表示一个打印点。任何打印的图案都是有若干个不同排列组合的点构成。这个点的密度即称为DPI。DPI表示横向或纵向上一英寸上有多少个点。我们说的600DPI,则表示在一英寸上有600个点,如下图1所示。

图1


PCL坐标系

打印时需要进行定位,这就牵涉到坐标系。PCL的坐标系以左上角为起点,且分为物理页面和逻辑页面。逻辑页面小于物理页面。物理页面并不全是打印区域。如下图2所示。

图2


打印区域

打印区域是表示物理页面上的某一部分。物理页面、逻辑页面、默认图像框架和可打印区域定义见下图3。

 
图3 

图4

上表的单位是像素,即表示逻辑上的一点。如A4页面尺寸,在600DPI下,宽度为4676pixel,最大长度为7014pixel。一般,我们开发时就用像素这个单位。不同类型的纸张对应不同的尺寸。

跟我一起学PCL打印语言(一)的更多相关文章

  1. C语言学习书籍推荐《学通C语言的24堂课》下载

    下载地址:点我 编辑推荐 <学通C语言的24堂课>:用持续激励培养良好习惯以良好习惯铸就伟大梦想——致亲爱的读者朋友在开始学习<学通C语言的24堂课>的同时,强烈建议读者朋友同 ...

  2. 不懂指针就不要说自己学过C语言!

    不懂指针就不要说自己学过C语言! 1.掌握了指针,就掌握了C语言的精髓!计算机中绝大部分数据都放到内存中的,不同的数据放到不同的内存区域中. 内存角度没有数据类型,只有二进制:数据以字节(8位二进制) ...

  3. 学了C语言,如何利用cURL写一个程序验证某个网址的有效性?

    在<C程序设计伴侣>以及这几篇关于cURL的文章中,我们介绍了如何利用cURL写一个下载程序,从网络下载文件.可是当我们在用这个程序下载文件时,又遇到了新问题:如果这个网址是无效的,那么我 ...

  4. 学了C语言,如何写个程序计算出每个月的第一个星期一对应的日期

    在前面,我们分别利用泰勒公式和C标准库中的mktime()函数推算了某个特定日期所对应的星期几,刚做完这些,就又遇到了一个与日期相关的新任务: 老板把每个月例会的时间定在了每个月的第一个星期一,他让我 ...

  5. 学了C语言,如何利用CURL写一个下载程序?—用nmake编译CURL并安装

    在这一系列的前一篇文章学了C语言,如何为下载狂人写一个磁盘剩余容量监控程序?中,我们为下载狂人写了一个程序来监视磁盘的剩余容量,防止下载的东西撑爆了硬盘.可是,这两天,他又抱怨他的下载程序不好用,让我 ...

  6. 学了 C 语言到底能做什么, 能从事什么工作?

    前言 经常有小伙伴问我,你是做C/C++的,那学C语言可以做什么呢?尤其是还在学校的同学,感觉自己学了很久,什么也做不了,一度怀疑自己是不是不适合程序员这个方向. 开始我都是直接说可以开发嵌入式啊,做 ...

  7. 教孩子学编程 python语言版PDF高清完整版免费下载|百度云盘|Python入门

    百度云盘:教孩子学编程 python语言版PDF高清完整版免费下载 提取码:mnma 内容简介 本书属于no starch的经典系列之一,英文版在美国受到读者欢迎.本书全彩印刷,寓教于乐,易于学习:读 ...

  8. 闭嘴,给你一个数!1分钟,学完C语言指针,不扎手只扎心的针!

    序言 指针是C语言学习者绕不过的一道坎,也是C语言学习者不得绕过的一道坎.辨别一个人C语言学的好赖就看他对指针的理解怎么样.指针内容也是工作面试经常问到的问题.本文将带你重新认识那个绊倒你的指针,以解 ...

  9. 为什么学完C语言觉得好像没学一般?

    不少同学从Hello world学到文件操作之后,回顾感觉会又不会? 学会了又感觉没学会?这种不踏实.模糊虚无的感觉?   原因在于编程不同于理论学科,你听懂和理解了理论就可以运用. 比如历史地理,看 ...

随机推荐

  1. Java简介(4)-关键字

    abstract assert boolean break byte byte case catch char class const continue default do-while double ...

  2. 初涉JavaScript模式 (9) : 函数 【常用方式】

    回调模式 上一篇,对JavaScript函数进行了大体的介绍,这一篇对一些在工作中经常遇到的情况进行扩展. 在工作中,我们经常遇到很多需求,比如现在有一个需求: 一栋10层的大楼,当我们在坐电梯时,电 ...

  3. __PUBLIC__模板文件路径配置

    __PUBLIC__ 默认指向 项目文件下的Public文件夹 注意: __PUBLIC__不是一个常量,只在模板中进行替换,__ROOT__是一个常量 项目文件路径 defined('__PUBLI ...

  4. srpm包的编译方式

    基本说明:后缀仅为rpm的包如xxxxx.rpm称作为二进制包 ------ 可以直接安装到架构匹配的系统上; 后缀为src.rpm的包如webkitgtk-2.4.7-1.fc21.src.rpm称 ...

  5. c程序代码的内存布局(学好C的基础)

    一个程序本质上都是由 BSS 段.data段.text段三个组成的.这样的概念在当前的计算机程序设计中是很重要的一个基本概念,而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配, ...

  6. Yii2——MYSQL操作

    先创建连接对象 $connection = new \yii\db\Connection([ 'dsn' => $dsn, 'username' => $username, 'passwo ...

  7. 转:有事务处理的NoSQL数据库

    原文来自于:http://www.infoq.com/cn/articles/MarkLogic-NoSQL-with-Transactions Java平台在其几乎整个生命周期中,都在煞费苦心地努力 ...

  8. centos7 install mongodb

    $vi /etc/yum.repos.d/mongodb-org-3.0.repo [mongodb-org-3.0] name=MongoDB Repository baseurl=http://r ...

  9. Android应用开发学习笔记之多线程与Handler消息处理机制

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 和JAVA一样,Android下我们可以通过创建一个Thread对象实现多线程.Thread类有多个构造函数,一般通 ...

  10. Linux下的库操作工具-nm、ar、ldd、ldconfig和ld.so

    Linux下的库操作工具-nm.ar.ldd.ldconfig和ld.so .nm [options] file 列出file中的所有符号 [option] -c 将符号转化为用户级的名字 -s 当用 ...