微软统一打印机驱动程序要点.docx
- 文档编号:6173406
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:92
- 大小:71.77KB
微软统一打印机驱动程序要点.docx
《微软统一打印机驱动程序要点.docx》由会员分享,可在线阅读,更多相关《微软统一打印机驱动程序要点.docx(92页珍藏版)》请在冰豆网上搜索。
微软统一打印机驱动程序要点
微软统一打印机驱动程序
本章叙述了微软统一打印机驱动程序(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图形引擎一起,转换微软Win32GDI调用从应用程序到打印机的可以发送给假脱机的命令。
为提供对以前的打印机驱动程序用GPC文件编写的小驱动程序的支持,RasDD,即微软小驱动程序开发工具(MicrosoftMinidriverDevelopmentTool)提供从RasDDGPC文件到UnidrvGPD文件的自动转换。
4.1.2Unidrv组件
Unidrv组件由DLL加上文本及二进制数据文件构成,如下图所示:
插入Unidrv组件图?
?
?
在图中的组件包括:
应用程序
一个用户应用程序,如字处理程序,它提供给用户打印的能力。
gdi32.dll
用户模式的DLL,导出Win32GDI函数
内核模式图形引擎
实现GDI函数功能的NT的可执行代码
小驱动程序文本文件
基于文本的Unidrv小驱动程序,它利用GPD文件的条目描述打印机
二进制数据文件
Unidrv在解析了包含于小驱动程序文本文件中的信息后创建的临时文件(具有.bud扩展名)
Unidrvui.dll
Unidrv用户接口的DLL,对所有Unidrv支持的打印机提供一个通用的UI代码。
用户接口插件
可选的、特定打印机的用户接口插件
compstui.dll
CPSUI给打印机的用户接口
Unidrv.dll
Unidrv绘制器,它绘制图像及发送图像数据流到打印假脱机
绘制插件
可选的、特定打印机的绘制插件
4.1.3Unidrv小驱动程序
Unidrv小驱动程序是包含打印机说明的文本文件。
每一个小驱动程序描述了一种生产厂家的打印机类型。
这一基于文本的说明即称为GPD(GenericPrinterDesciption),并且每一个文件都称为GPD文件,每一个小驱动程序由一个或多个GPD文件构成。
利用GPD文件来描述一个打印机,Unidrv支持以下能力:
■在许多打印机上发现的一般的、标准的打印机特性。
■打印机提供的唯一的、定制的打印机特性。
■可安装的打印机选项,只要在选项被安装的情况下可以选择。
■选项约束,允许指定不兼容的选项。
■条件语句,允许指定一些依赖于其他特征的打印机的特征。
■打印机命令的规范说明,它可以包括当前一大堆选择的标准变量的值,也可以对这些变量执行算术操作。
■一个定制的帮助文件,它不同于Unidrv提供的标准的帮助文件,而是用于描述定制的特性。
关于创建GPD文件的信息,参考GPD文件介绍部分。
一个Unidrv小驱动程序可以由一个或多个GPD文件构成,更多的信息,可以参考在一个小驱动程序中使用多个GPD文件部分的内容。
当一个打印机被安装,Unidrv的GPD解析阅读所有的GPD文件,GPD文件中包含的信息被用于创建打印机的临时的二进制文件。
所有的Unidrv用户接口和Unidrv绘制器的参考都在这个二进制文件中。
通常,小驱动程序必须提供资源,如字体、位图以及本地化文本字符串等。
这些资源被置于一个资源DLL中。
更多的信息,参考在小驱动程序中使用资源DLL部分的内容。
4.1.4Unidrv用户接口
Unidrv用户接口用CPSUI以创建以下的属性表单页面:
■设备设置(DeviceSettings)页面:
用于打印机属性表单,它在一个用户选择了来自打印文件夹或打印机窗口的“属性”菜单项的时候被显示。
该页面列出了特定打印机的配置信息。
■文档属性表单的布局(Layout)、纸张/质量(Paper/Quality)以及高级(Advanced)属性页面:
它在一个用户选择了打印机折叠器或打印机窗口的文档默认值(DocumentDefaults)菜单项时被显示,或者当一个应用程序调用了PrinterProperties或者DocumentProperties函数被显示(在SDK平台文档中有描述)。
该页面列出了特定文档的配置信息。
这些属性表单页包含有由一个打印机的Unidrv小驱动程序指定的打印机的特性及打印机的选项,它们也允许用户修改选项值。
Unidrv用户接口作为一个用户模式的打印机接口DLL来实现,代码都含在DLL中,并与CPSUI连接来指定了属性表单的内容。
DLL基于在小驱动程序中的信息,实施哪一个打印机选项可以被组合的限制。
它也保证用户不选择没有在打印机上安装的选项。
4.1.5Unidrv绘制器
Unidrv绘制器作为一个打印机图形DLL来实现,并导出由微软设备驱动程序接口(MicrosoftDeviceDriverInterfaceDDI)为图形驱动程序定义的函数。
当一个应用程序调用图形设备接口(GraphicsDeviceInterfaceGDI)函数以发送图像到一个打印机设备,内核模式的图形引擎调用绘制器的DDI函数,这些DDI函数帮助GDI绘制一个打印作业的页图像。
绘制器也负责与打印机的命令序列一起发送已绘制的图像数据到打印假脱机,打印假脱机然后再直接将图像和命令送到打印机硬件。
打印机绘制器发送的命令是在Unidrv小驱动程序被指定的。
可以通过提供一个绘制的插件来修改Unidrv的绘制操作,该绘制插件在第7章定制微软打印机驱动程序部分有详细描述。
4.1.6GPD文件实例
DDK包括大量的小驱动程序实例,对一些类型的打印机来说,这些实例包括GPD以及字体和资源文件。
实例文件被放置于包含DDK实例的树形目录的mini子目录中。
4.1.7微软小驱动程序开发工具
微软小驱动程序开发工具(MicrosoftMDT),即包含在该DDK中的minidev.exe,是设计用于Unidrv的小驱动程序开发的软件开发工具。
微软的MDT提供下列特征:
■一般打印机描述(GPD:
GenericPrinterDescription)编辑器
一个用于创建构成Unidrv小驱动程序的GPD文件的、可以进行语法检查的文本编辑器。
■Unidrv字体规格(UMF:
UnidrvFontMetrics)编辑器
基于属性表单的产生Unidrv字体规格文件的编辑器
■符号翻译表(GTT:
GlyphTranslationTable)编辑器
基于属性表单的产生符号翻译表文件的编辑器
■小驱动程序工作间
对Unidrv小驱动程序的基于Windows的编辑工作间,提供对小驱动程序的GPD文件、资源文件及GTT文件的存取。
■小驱动程序转换向导
自动转换二进制小驱动程序为基于文本的Windows2000小驱动程序,用于以前的Windows及WindowsNT版本。
当使用该转换向导,它将根据转换下表列出的文件而产生一个Windows2000的小驱动程序。
输入文件文件内容输出文件
WindowsGPC文件
打印机能力描述
Windows2000GPD文件
WindowsPFM文件
字体描述
Windows2000UFM文件
WindowsCTT文件
符号翻译描述
Windows2000GTT文件
另外,转换向导将用正确的文件名及资源标识符产生资源文件。
■INF向导
对被转换的小驱动程序自动产生一个INF文件(参考安装一个Unidrv小驱动程序部分)
关于怎样使用微软的MDT的教学指导,可以运行该开发工具并阅读其帮助文件。
4.2GPD文件介绍
GPD文件用于创建Unidrv小驱动程序,一个Unidrv小驱动程序由一个基于文本的一般打印机描述(GPD)构成,它可以包含一个或多个GPD文件。
GPD文件用GPD语言描述一个打印机,GPD文件包含用GPD语言提供下列类型信息的GPD文件条目:
■描述打印机特征的打印机属性
■控制打印机操作的打印机命令
■可以被Unidrv控制的描述打印机能力的特性
■表示可以分配于打印机特性的打印机选项
■打印机字体描述,说明了和硬件驻留与Cartridge字体相联系的特性。
■描述打印机特性及打印机配置的相互依赖关系的条件语句
GPD语言同样定义了GPD文件的条目,这些条目用于控制以下操作:
■压缩光栅数据
■处理色彩格式
■用Unidrv过渡调色
■处理可安装的特性及选项
■描述打印机内存配置
这一介绍性部分也包括了对在小驱动程序中使用多个GPD文件和在小驱动程序中使用资源DLL的基本单位(MasterUnit)的讨论。
4.2.1GPD文件条目
GPD文件由条目构成,并使用描述每一个光栅打印机的特定设备的特征的GPD语言,这一部分包括以下的主题,这们描述了GPD文件的条目:
■GPD文件条目格式
■GPD值类型
■行连续(LineContinuation)
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语言定义了下列值类型:
■Symbolicnames(符号名称)
■Textstrings(文本字符串)
■Constants(常量)
■Numericvalues(数字值)
■Booleanvalues(布尔值)
■Lists(列表)
■Pairs(对值)
■Rectangles(矩形)
Symbolicnames
符号名称是一个用作标识符的字母串,它具有如下特征:
■第一位字符必须是大写或小写的字母
■在第一位字符之后的名称部分可以由大写或小写的字母、数字或下划线组成。
■名称是大小写敏感的。
■名称中的字母数不受限制。
GPD语言预定义了大量的符号名称,预定义的名称为打印机属性、命令名称、标准特性、标准选项以及标准变量等而存在。
可以为定制的特性、定制的选项及宏等定义符号名称。
TextStrings
文本字符串是文字字母的字符串,以引号作为分隔符,应用于Unidrv小驱动程序的字符串可以被置于以下两种位置的任一个:
■可以被放置在资源文件中。
需要本地化的字符串,如用户接口文本,就应放置当在资源文件中,在小驱动程序中使用资源DLL部分中已经描述过。
■可以包含于一个GPD文件中。
字符串代表了构成打印机命令的escape序列,这些通常都包含于GPD文件中,但这些字符串不需要被本地化。
字符串必须服从以下规则:
■字符串必须以引号分隔开(“……”)。
■十六进制字节值可以被置于一个尖括号中,括起来的十六进制数就是一个字符串,如,<03><1B>。
在一套尖括号中,每两个数字被解释为一个十六进制的字节值,因此,<03><1B>,<031B>和<031B>都是等同的。
■百分号(%)被用作escape字符,为了在字符串中包括引号或左尖括号(“<”),先于它们之前使用一个百分号。
为了指定一个以百分号结束的字符串,必须指定百分号的十六进制值,如“<25>”。
另外,为在一个文本字符中包括一个百分号并代表一个打印机命令,必须用另外一个百分号来处理它,为指定一个以百分号结束的打印机命令,必须指定两个十六进制的%值,如“命令字符串<25><25>”
一个字符串的实例是这样一个命令,它为佳能BJC-600打印机选择信纸大小的纸张,这一命令的字节序列是1B286703006E0172,可以被指定如下:
“<1B>(g<0300>n<01>r”
每一个包含于字符串中的ASCII字符都被转换成为一个字节的十六进制等值。
在GPD文件中包含的字符串必须服从下列附加规则:
■为扩展超过一个单行上的字符串,在处理第一行之后每行之前加上一个连续字母(+),并且在每一行上以引号分隔文本。
■一个字符串值可以由多个文本字符串构成,例如,下列的两上GPD条目是等同的:
*Name:
“abc”“def”*%Comment
+“gh”“ijk”
*Name:
“abcdefghijk”
对属于被定义于资源文件中的附加的字符串规则,可以参考平台的SDK文档中的STRINGTABLE语句声明的描述。
更多的关于指定打印机命令escape序列的信息,参考命令字符串格式部分的内容。
Constants
常量是由GPD语言预定义的名称值,常量名称通常由大写字母构成。
如GPD常量可以是PAGE、SERIAL、TTY,它们是可以赋给*PrinterType属性的值。
NumericValues
数字型值,所有的指定的条目值或GPD文件中的参数值的NumericValues数字值都必须是整数。
十进制小数是不允许的,除非在文本字符串中。
数字值被假定为正数,除非在其前有一个减号(“-”)。
数字值被假定为十进制数,除非在其前有0x的情况时,它们是非负的十六进制值。
如果可适用于一个特殊的GPD文件的设备环境,则星号(“*”)可以被用于指明或者是无穷大值,或者是忽略值,
BooleanValues
布尔值被定义为等于预先定义的常量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_regular
+=RC_FONT_Antique_Olive_regular
+=RC_FONT_Albertus_Medium
+=RC_FONT_Albertus_Extra_Bold
+=RC_FONT_Courier_regular
+=RC_FONT_Letter_Gothic_regular
+=RC_FONT_Letter_Gthic_regular
+=RC_FONT_Wingdings
在下面行的开始,不需要使用行连接字母:
■以星号开始的行。
■以左括号开始的行。
4.2.1.4注解及忽略块
GPD文件可以包含注释,注释的格式如下:
*%注解字符串
注解字符串可以是任何以行结束符终止的字符串。
在一个多行注解的每一行注解里都必须以*%字开始,*%必须放置于空格或分行符之前。
下面是一个有效的注解的例子:
*%ThissectionoftheGPDfile
*%Containsmacrodefinitions
*Macros:
HP4L
{
*%Thesemacrosdefinecommandprefixesforthepapersizefeature
LetterCmdPrefix:
”<1B>&12a8c1E<1B>*p0x0Y”*%Prefixforletteroption.
A4CmdPrefix:
”<1B>&126a8c1E<1B>*p0x0Y”*%PrefixforA4option
Env10CmdPrefix:
”<1B>&181a8c1E<1B>*p0x0Y”*%PrefixforEnv10option.
}
为请求GPD解析器忽略一组GPD条目,可以创建一个包含被忽略条目的被忽略块,忽略块的格式如下:
*IgnoreBlock{IgnoredEntries}
被忽略的条目是一套GPD文件的条目,包含有相同数目左括号和右括号。
在下边的例子中,GPD解析器将忽略GPD条目描述Landscape_CC90的选项。
*Feature:
Orientation
{
*Name:
”Orientation”
*DefaultOption:
Portrait
*Option:
Portrait
{
*Name:
”Portrait”
*Command:
CmdSelect
{
*Order:
DOC_SETUP.7
*Cmd:
”<1B>&100”
}
}
*IgnoreBlock
{
*Option:
Landscape_CC90
{
*Name:
”Landscape”
*Command:
CmdSelect
{
*Order:
DOC_SETUP.7
*Cmd:
”<1B>&110”
}
}
}
}
4.2.1.5宏
GPD语言支持两种类型的宏:
■块宏(BlockMacros),它允许指定一套GPD文件条目,并可以插入到GPD文件的任何条目位置。
■值宏(ValueMacros),它允许指定一套值,它可以被分别插入到GPD文件的任何位置。
块宏
块宏用于划定一套GPD的将重复插入到GPD文件中的一套GPD文件条目。
可以包括任何条目类型到块宏定义中,如特性、选项语句、属性说明及对值宏的引用或者其他块宏。
下面的规则将应用于块宏中:
■在一个GPD文件中的块宏定义必须位置于任何对它的引用之前。
■在根层次(即不在括号里)的块宏定义可以通过GPD文件的定义来获得,并在GPD定义之后。
否则,块宏的范围将是设置于左括号与右括号之间的定义部分。
■块宏的定义可以包含另外块宏或值宏的定义。
■块宏的定义可以引用其他前边定义的块宏及值宏,但是它不能引用它自身。
■块宏不能接受参数。
■如果括号包含于一个宏体中,它们必须成对的(即,必须有相同数量的左、右括号)。
■如果用同一个名称创建两个块宏,则直到解析器遇到第二个定义之前第一个定义一直是有效的,这时第二个将替代第一个。
如果第二个定义的范围结束,则第一个块宏又处于有效的任命状态。
块宏格式
在GPD文件中,用如下格式定义块宏:
*BlockMacr:
BlockMacroName{BlockMacroBody}
BlockMacroName是一个唯一的名称,而BlockMacroBody则是一套一个或多个GPD文件的条目。
如果BlockMacroBody包含括号,则相同数量的左括号及右括应当被包含其中。
例如,可以定义一个名为EnvelopeDefaults的块宏,并定义如下:
*BlockMacro:
EnvelopeDefaults
{
*PrintableArea:
PAIR(4646,6738)
*PrintableOrigin:
PAIR(150,150)
*RatateSize:
TRUE
}
引用块宏
引用块宏,可以用以下的格式:
*InsertBlock:
=BlockMacroName
BlockMa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微软 统一 打印机 驱动程序 要点