微软统一打印机驱动程序
本章叙述了微软统一打印机驱动程序(Unidrv),解释了怎样增加小驱动程序来允许Unidrv来支持新的打印机,主要包括了下面的主题:
■4.1统一打印机驱动程序介绍
■4.2GPD文件介绍
■4.3打印机属性
■4.4打印机命令
■4.5打印机特性
■4.6打印机选项
■4.7打印机字体描述
■4.8条件语句
■4.9压缩光栅数据
■4.10过滤光栅数据
■4.11处理彩格式
■4.12用Unidrv进行中间调整
■4.13控制图像质量
■4.14处理可安装的特性及选项
■4.15指定特性和选项显示的顺序
■4.16描述打印机内存配置
■4.17指定纸张大小
■4.18引用场所
■4.19安装一个Unidrv小驱动程序
4.1统一打印机驱动程序介绍
统一打印机驱动程序(Unidrv)是微软公司对非Postscritp打印机的标准打印机驱动程序,对Unidrv的介绍包括下列主题:
■4.1.1Unidrv能力
■4.1.2Unidrv组件
■4.1.3Unidrv小驱动程序
■4.1.4Unidrv用户接口
■4.1.5Unidrv绘制器
■4.1.6GPD文件实例
■4.1.7微软小驱动程序开发工具
4.1.1Unidrv能力
Unidrv提供以下能力:
■用描述每一个打印机的特征的特定打印机Unidrv小驱动程序,支持所有的非Postscript打印机。
■一个Unidrv的用户接口,基于Treeview控件和属性表单,它对所有的打印机者是一致的,而且对每一个打印机的单一选项也是可以修改的。
■一个单一的Unidrv绘制器,即与GDI图形引擎一起,转换微软Win32 GDI调用从应用程序到打印机的可以发送给假脱机的命令。
为提供对以前的打印机驱动程序用GPC文件编写的小驱动程序的支持,RasDD,即微软小驱动程序开发工具(Microsoft Minidriver Development Tool)提供从RasDD GPC文件到Unidrv GPD文件的自动转换。
4.1.2Unidrv组件
Unidrv组件由DLL加上文本及二进制数据文件构成,如下图所示:
插入Unidrv组件图???
在图中的组件包括:
应用程序
一个用户应用程序,如字处理程序,它提供给用户打印的能力。
gdi32.dll
用户模式的DLL,导出Win32 GDI函数
内核模式图形引擎
实现GDI函数功能的NT的可执行代码
小驱动程序文本文件
基于文本的Unidrv小驱动程序,它利用GPD文件的条目描述打印机
二进制数据文件
Unidrv在解析了包含于小驱动程序文本文件中的信息后创建的临时文件(具有.bud扩展名)
Unidrvui.dll
Unidrv用户接口的DLL,对所有Unidrv支持的打印机提供一个通用的UI代码。
用户接口插件
可选的、特定打印机的用户接口插件
compstui.dl
l
CPSUI给打印机的用户接口
Unidrv.dll
Unidrv绘制器,它绘制图像及发送图像数据流到打印假脱机
绘制插件
可选的、特定打印机的绘制插件
4.1.3Unidrv小驱动程序
Unidrv小驱动程序是包含打印机说明的文本文件。每一个小驱动程序描述了一种生产厂家的打印机类型。这一基于文本的说明即称为GPD(Generic Printer Desciption),并且每一个文件都称为GPD文件,每一个小驱动程序由一个或多个GPD文件构成。
利用GPD文件来描述一个打印机,Unidrv支持以下能力:
■在许多打印机上发现的一般的、标准的打印机特性。
■打印机提供的唯一的、定制的打印机特性。
■可安装的打印机选项,只要在选项被安装的情况下可以选择。
■选项约束,允许指定不兼容的选项。
■条件语句,允许指定一些依赖于其他特征的打印机的特征。
■打印机命令的规范说明,它可以包括当前一大堆选择的标准变量的值,也可以对这些变量执行算术操作。
■一个定制的帮助文件,它不同于Unidrv提供的标准的帮助文件,而是用于描述定制的特性。
关于创建GPD文件的信息,参考GPD文件介绍部分。
一个Unidrv小驱动程序可以由一个或多个GPD文件构成,更多的信息,可以参考在一个小驱动程序中使用多个GPD文件部分的内容。
当一个打印机被安装,Unidrv的GPD解析阅读所有的GPD文件,GPD文件中包含的信息被用于创建打印机的临时的二进制文件。所有的Unidrv用户接口和Unidrv绘制器的参考都在这个二进制文件中。
通常,小驱动程序必须提供资源,如字体、位图以及本地化文本字符串等。这些资源被置于一个资源DLL中。更多的信息,参考在小驱动程序中使用资源DLL部分的内容。
4.1.4Unidrv用户接口
Unidrv用户接口用CPSUI以创建以下的属性表单页面:
■设备设置(Device Settings)页面:用于打印机属性表单,它在一个用户选择了来自打印文件夹或打印机窗口的“属性”菜单项的时候被显示。该页面列出了特定打印机的配置信息。
■文档属性表单的布局(Layout)、纸张/质量(Paper/Quality)以及高级(Advanced)属性页面:它在一个用户选择了打印机折叠器或打印机窗口的文档默认值(Document Defaults)菜单项时被显示,或者当一个应用程序调用了PrinterProperties或者DocumentProperties函数被显示(在SDK平台文档中有描述)。该页面列出了特定文档的配置信息。
这些属性表单页包含有由一个打印机的Unidrv小驱动程序指定的打印机的特性及打印机的选项,它们也允许用户修改选项值。
Unidrv用户接口作为一个用户模式的打印机接口DLL来实现,代码都
含在DLL中,并与CPSUI连接来指定了属性表单的内容。DLL基于在小驱动程序中的信息,实施哪一个打印机选项可以被组合的限制。它也保证用户不选择没有在打印机上安装的选项。
4.1.5Unidrv绘制器
Unidrv绘制器作为一个打印机图形DLL来实现,并导出由微软设备驱动程序接口(Microsoft Device Driver Interface DDI)为图形驱动程序定义的函数。当一个应用程序调用图形设备接口(Graphics Device Interface GDI)函数以发送图像到一个打印机设备,内核模式的图形引擎调用绘制器的DDI函数,这些DDI函数帮助GDI绘制一个打印作业的页图像。
绘制器也负责与打印机的命令序列一起发送已绘制的图像数据到打印假脱机,打印假脱机然后再直接将图像和命令送到打印机硬件。打印机绘制器发送的命令是在Unidrv小驱动程序被指定的。
可以通过提供一个绘制的插件来修改Unidrv的绘制操作,该绘制插件在第7章定制微软打印机驱动程序部分有详细描述。
4.1.6GPD文件实例
DDK包括大量的小驱动程序实例,对一些类型的打印机来说,这些实例包括GPD以及字体和资源文件。实例文件被放置于包含DDK实例的树形目录的mini子目录中。
4.1.7微软小驱动程序开发工具
微软小驱动程序开发工具(Microsoft MDT),即包含在该DDK中的,是设计用于Unidrv的小驱动程序开发的软件开发工具。
微软的MDT提供下列特征:
■一般打印机描述(GPD:Generic Printer Description)编辑器
一个用于创建构成Unidrv小驱动程序的GPD文件的、可以进行语法检查的文本编辑器。
■Unidrv字体规格(UMF:Unidrv Font Metrics)编辑器
基于属性表单的产生Unidrv字体规格文件的编辑器
■符号翻译表(GTT:Glyph Translation Table)编辑器
基于属性表单的产生符号翻译表文件的编辑器
■小驱动程序工作间
对Unidrv小驱动程序的基于Windows的编辑工作间,提供对小驱动程序的GPD文件、资源文件及GTT文件的存取。
■小驱动程序转换向导
自动转换二进制小驱动程序为基于文本的Windows 2000小驱动程序,用于以前的Windows及Windows NT版本。当使用该转换向导,它将根据转换下表列出的文件而产生一个Windows 2000的小驱动程序。
输入文件            文件内容                        输出文件
Windows GPC文件
打印机能力描述
Windows 2000GPD文件
Windows PFM文件
字体描述
Windows 2000UFM文件
Windows CTT文件
符号翻译描述
Windows 2000GTT文件
另外,转换向导将用正确的文件名及资源标识符产生资源文件。
■INF向导
对被转换的小驱动程序自动产生一个INF文件(参考安装一个Unidrv小驱动程序部分)
关于
怎样使用微软的MDT的教学指导,可以运行该开发工具并阅读其帮助文件。
4.2GPD文件介绍
GPD文件用于创建Unidrv小驱动程序,一个Unidrv小驱动程序由一个基于文本的一般打印机描述(GPD)构成,它可以包含一个或多个GPD文件。
GPD文件用GPD语言描述一个打印机,GPD文件包含用GPD语言提供下列类型信息的GPD文件条目:
■描述打印机特征的打印机属性
■控制打印机操作的打印机命令
■可以被Unidrv控制的描述打印机能力的特性
■表示可以分配于打印机特性的打印机选项
■打印机字体描述,说明了和硬件驻留与Cartridge字体相联系的特性。
■描述打印机特性及打印机配置的相互依赖关系的条件语句
GPD语言同样定义了GPD文件的条目,这些条目用于控制以下操作:
■压缩光栅数据
■处理彩格式
■用Unidrv过渡调
■处理可安装的特性及选项
■描述打印机内存配置
这一介绍性部分也包括了对在小驱动程序中使用多个GPD文件和在小驱动程序中使用资源DLL的基本单位(Master  Unit)的讨论。
4.2.1GPD文件条目
GPD文件由条目构成,并使用描述每一个光栅打印机的特定设备的特征的GPD语言,这一部分包括以下的主题,这们描述了GPD文件的条目:
■GPD文件条目格式
■GPD值类型
■行连续(Line Continuation)
4.2.1.1GPD文件条目格式
所有的GPD文件和条目符合下面的格式:
*条目名:条目值{GPD文件条目(GPD_FileEntry),GPD文件条目,……}
条目名总是一个预定义的GPD解析器可识别出的关键字,其前置星号。
条目值必须是GPD值类型的一种。
每一个GPD_FileEntry是另外一个GPD文件的条目,符合上面显示的格式。每一个条目的子条目必须对指定的包含该它自身的条目是有效。
一些条目名称不接受包含花括号或封闭的子条目。
每一个GPD条目由行尾(end-of-line)或右括号(})终止。
一个简单的GPD文件条目,它不接受子条目,是一个下面这样属性的条目:
*MaxCopies:99
这一条目指定了打印机可以处理的最大的复制数量是99。
下面,是一个更复杂的例子,描述了一个可以两种方向(portrait或landscape,即横向或竖向)打印的打印机。例子中了指定了驱动程序必须发送以选择每个方向的命令。
*Feature:Orientation
{
*Name:”Orientation”
*DefaultOption:Portrait
*Option:Portrait
{
*Name:”Portrait”
*Command:CmdSelect
{
*Order:DOC_SETUP.7
*Cmd:”<1B>&100”
}
}
*Option:Landscape_CC90
{
*Name:”Landscape”
*Command:CmdSelect
{
*Order:DOC_SETUP.7
*Cmd:”<1B>&110”
}
}
}
4.2.1.2GPD值类型
所有的GPD文件条目包含一个值的规范说明,GPD语言定义了下列值类型:
■Symbolic names(符号名称)
■Text strings(文本字符串)
■Constants(常量)
■Numeric values(数字值)
■Boolean values(布尔值)
■Lists(列表)
■Pairs(对值)
■Rectangles(矩形)
Symbolic names
符号名称是一个用作标识符的字母串,它具有如下特征:
■第一位字符必须是大写或小写的字母
■在第一位字符之后的名称部分可以由大写或小写的字母、数字或下划线组成。
■名称是大小写敏感的。
■名称中的字母数不受限制。
GPD语言预定义了大量的符号名称,预定义的名称为打印机属性、命令名称、标准特性、标准选项以及标准变量等而存在。
可以为定制的特性、定制的选项及宏等定义符号名称。
Text Strings
文本字符串是文字字母的字符串,以引号作为分隔符,应用于Unidrv小驱动程序的字符串可以被置于以下两种位置的任一个:
■可以被放置在资源文件中。需要本地化的字符串,如用户接口文本,就应放置当在资源文件中,在小驱动程序中使用资源DLL部分中已经描述过。
■可以包含于一个GPD文件中。字符串代表了构成打印机命令的escape序列,这些通常都包含于GPD文件中,但这些字符串不需要被本地化。
字符串必须服从以下规则:
■字符串必须以引号分隔开(“……”)。
■十六进制字节值可以被置于一个尖括号中,括起来的十六进制数就是一个字符串,如,<03><1B>。在一套尖括号中,每两个数字被解释为一个十六进制的字节值,因此,<03><1B>,<03 1B>和<031B>都是等同的。
■百分号(%)被用作escape字符,为了在字符串中包括引号或左尖括号(“<”),先于它们之前使用一个百分号。为了指定一个以百分号结束的字符串,必须指定百分号的十六进制值,如“<25>”。另外,为在一个文本字符中包括一个百分号并代表一个打印机命令,必须用另外一个百分号来处理它,为指定一
个以百分号结束的打印机命令,必须指定两个十六进制的%值,如“命令字符串<25><25>”
一个字符串的实例是这样一个命令,它为佳能BJC-600打印机选择信纸大小的纸张,这一命令的字节序列是1B 28 67 03 00 6E 01 72,可以被指定如下:
“<1B>(g<03 00>n<01>r”
每一个包含于字符串中的ASCII字符都被转换成为一个字节的十六进制等值。
在GPD文件中包含的字符串必须服从下列附加规则:
■为扩展超过一个单行上的字符串,在处理第一行之后每行之前
加上一个连续字母(+),并且在每一行上以引号分隔文本。
■一个字符串值可以由多个文本字符串构成,例如,下列的两上GPD条目是等同的:
generic打印机*Name:    “abc”“def”* % Comment
+        “gh”“ijk”
*Name:    “abcdefghijk”
对属于被定义于资源文件中的附加的字符串规则,可以参考平台的SDK文档中的STRINGTABLE语句声明的描述。
更多的关于指定打印机命令escape序列的信息,参考命令字符串格式部分的内容。
Constants
常量是由GPD语言预定义的名称值,常量名称通常由大写字母构成。如GPD常量可以是PAGE、SERIAL、TTY,它们是可以赋给*PrinterType属性的值。
Numeric Values
数字型值,所有的指定的条目值或GPD文件中的参数值的Numeric Values数字值都必须是整数。十进制小数是不允许的,除非在文本字符串中。
数字值被假定为正数,除非在其前有一个减号(“-”)。
数字值被假定为十进制数,除非在其前有0x的情况时,它们是非负的十六进制值。
如果可适用于一个特殊的GPD文件的设备环境,则星号(“*”)可以被用于指明或者是无穷大值,或者是忽略值,
Boolean Values
布尔值被定义为等于预先定义的常量TRUE或FALSE。根据常规,所有打印机属性的字符名称都接受以问号标识结束的布尔值,如下例所示:
*RotaterasterData?:FALSE
Lists
列表值。用于分配属性的一系列值,利用LIST关键字,其格式为:
LIST(值1,值2,值3,……,值n)
这里,值1,值2,值3,……,值n代表了一套一个或多个值,所有的类型都是为属性指定的。例如,打印机的彩平面数据的顺序可以按如下指定的顺序来发送:
*ColorPlaneOrder:LIST(YELLOW,MAGENTA,CYAN,BLACK)
Pairs
分配一对值给属性,可利用PAIR关键字,其格式如下:
PAIR(值1,值2)
当值1和值2是数字型值时,例如,光标的起始点位置可以被指定为基本单位,如:*CursorOrigin:PAIR(120,180)
Rectangles
矩形值描述在GPD文件中的一个矩形,利用RECT关键字,其格式为:
RECT(left,top,right,bottom),其中left,top,right,bottom都代表基本单位格式的数字值。
4.2.1.3行连续
GPD文件条目如果太长而不能在一行容纳下,则可以放在接下面的行里。为了连续一个条目,在第一行之后的每一行都必须以加号(“+”)打头,加号必须是每一行的第一个字母,不用预置空格,如下边例子所示:
#DeviceFonts:
+    LIST(
+        =RC_FONT_courier_10pt_regular
+        =RC_FONT_CGTimes_regular
+        =RC_FONT_Univers_regular
+        =RC_FONT_Univers_condensed

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。