微软统一打印机驱动程序_第1页
微软统一打印机驱动程序_第2页
微软统一打印机驱动程序_第3页
微软统一打印机驱动程序_第4页
微软统一打印机驱动程序_第5页
已阅读5页,还剩116页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、微软统一打印机驱动程序 本章叙述了微软统一打印机驱动程序(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安装一个Uni

2、drv小驱动程序 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控件和

3、属性表单,它对所有的打印机者是一致的,而且对每一个打印机的单一选项也是可以修改的。 一个单一的Unidrv绘制器,即与GDI图形引擎一起,转换微软Win32 GDI调用从应用程序到打印机的可以发送给假脱机的命令。 为提供对以前的打印机驱动程序用GPC文件编写的小驱动程序的支持,RasDD,即微软小驱动程序开发工具(Microsoft Minidriver Development Tool)提供从RasDD GPC文件到Unidrv GPD文件的自动转换。 4.1.2Unidrv组件Unidrv组件由DLL加上文本及二进制数据文件构成,如下图所示: 插入Unidrv组件图? 在图中的组件包括:

4、应用程序 一个用户应用程序,如字处理程序,它提供给用户打印的能力。 gdi32.dll 用户模式的DLL,导出Win32 GDI函数 内核模式图形引擎 实现GDI函数功能的NT的可执行代码 小驱动程序文本文件 基于文本的Unidrv小驱动程序,它利用GPD文件的条目描述打印机 二进制数据文件 Unidrv在解析了包含于小驱动程序文本文件中的信息后创建的临时文件(具有.bud扩展名) Unidrvui.dll Unidrv用户接口的DLL,对所有Unidrv支持的打印机提供一个通用的UI代码。 用户接口插件 可选的、特定打印机的用户接口插件 compstui.dll CPSUI给打印机的用户接口

5、 Unidrv.dll Unidrv绘制器,它绘制图像及发送图像数据流到打印假脱机 绘制插件 可选的、特定打印机的绘制插件 4.1.3Unidrv小驱动程序Unidrv小驱动程序是包含打印机说明的文本文件。每一个小驱动程序描述了一种生产厂家的打印机类型。这一基于文本的说明即称为GPD(Generic Printer Desciption),并且每一个文件都称为GPD文件,每一个小驱动程序由一个或多个GPD文件构成。 利用GPD文件来描述一个打印机,Unidrv支持以下能力: 在许多打印机上发现的一般的、标准的打印机特性。 打印机提供的唯一的、定制的打印机特性。 可安装的打印机选项,只要在选项被

6、安装的情况下可以选择。 选项约束,允许指定不兼容的选项。 条件语句,允许指定一些依赖于其他特征的打印机的特征。 打印机命令的规范说明,它可以包括当前一大堆选择的标准变量的值,也可以对这些变量执行算术操作。 一个定制的帮助文件,它不同于Unidrv提供的标准的帮助文件,而是用于描述定制的特性。 关于创建GPD文件的信息,参考GPD文件介绍部分。 一个Unidrv小驱动程序可以由一个或多个GPD文件构成,更多的信息,可以参考在一个小驱动程序中使用多个GPD文件部分的内容。 当一个打印机被安装,Unidrv的GPD解析阅读所有的GPD文件,GPD文件中包含的信息被用于创建打印机的临时的二进制文件。所

7、有的Unidrv用户接口和Unidrv绘制器的参考都在这个二进制文件中。 通常,小驱动程序必须提供资源,如字体、位图以及本地化文本字符串等。这些资源被置于一个资源DLL中。更多的信息,参考在小驱动程序中使用资源DLL部分的内容。 4.1.4Unidrv用户接口Unidrv用户接口用CPSUI以创建以下的属性表单页面: 设备设置(Device Settings)页面:用于打印机属性表单,它在一个用户选择了来自打印文件夹或打印机窗口的“属性”菜单项的时候被显示。该页面列出了特定打印机的配置信息。 文档属性表单的布局(Layout)、纸张/质量(Paper/Quality)以及高级(Advanced

8、)属性页面:它在一个用户选择了打印机折叠器或打印机窗口的文档默认值(Document Defaults)菜单项时被显示,或者当一个应用程序调用了PrinterProperties或者DocumentProperties函数被显示(在SDK平台文档中有描述)。该页面列出了特定文档的配置信息。 这些属性表单页包含有由一个打印机的Unidrv小驱动程序指定的打印机的特性及打印机的选项,它们也允许用户修改选项值。 Unidrv用户接口作为一个用户模式的打印机接口DLL来实现,代码都含在DLL中,并与CPSUI连接来指定了属性表单的内容。DLL基于在小驱动程序中的信息,实施哪一个打印机选项可以被组合的限

9、制。它也保证用户不选择没有在打印机上安装的选项。 4.1.5Unidrv绘制器Unidrv绘制器作为一个打印机图形DLL来实现,并导出由微软设备驱动程序接口(Microsoft Device Driver Interface DDI)为图形驱动程序定义的函数。当一个应用程序调用图形设备接口(Graphics Device Interface GDI)函数以发送图像到一个打印机设备,内核模式的图形引擎调用绘制器的DDI函数,这些DDI函数帮助GDI绘制一个打印作业的页图像。 绘制器也负责与打印机的命令序列一起发送已绘制的图像数据到打印假脱机,打印假脱机然后再直接将图像和命令送到打印机硬件。打印机

10、绘制器发送的命令是在Unidrv小驱动程序被指定的。 可以通过提供一个绘制的插件来修改Unidrv的绘制操作,该绘制插件在第7章定制微软打印机驱动程序部分有详细描述。 4.1.6GPD文件实例DDK包括大量的小驱动程序实例,对一些类型的打印机来说,这些实例包括GPD以及字体和资源文件。实例文件被放置于包含DDK实例的树形目录的mini子目录中。 4.1.7微软小驱动程序开发工具微软小驱动程序开发工具(Microsoft MDT),即包含在该DDK中的minidev.exe,是设计用于Unidrv的小驱动程序开发的软件开发工具。 微软的MDT提供下列特征: 一般打印机描述(GPD:Generic

11、 Printer Description)编辑器 一个用于创建构成Unidrv小驱动程序的GPD文件的、可以进行语法检查的文本编辑器。 Unidrv字体规格(UMF:Unidrv Font Metrics)编辑器 基于属性表单的产生Unidrv字体规格文件的编辑器 符号翻译表(GTT:Glyph Translation Table)编辑器 基于属性表单的产生符号翻译表文件的编辑器 小驱动程序工作间 对Unidrv小驱动程序的基于Windows的编辑工作间,提供对小驱动程序的GPD文件、资源文件及GTT文件的存取。 小驱动程序转换向导 自动转换二进制小驱动程序为基于文本的Windows 2000

12、小驱动程序,用于以前的Windows及Windows NT版本。当使用该转换向导,它将根据转换下表列出的文件而产生一个Windows 2000的小驱动程序。 输入文件 文件内容 输出文件 Windows GPC文件 打印机能力描述 Windows 2000GPD文件 Windows PFM文件 字体描述 Windows 2000UFM文件 Windows CTT文件 符号翻译描述 Windows 2000GTT文件 另外,转换向导将用正确的文件名及资源标识符产生资源文件。 INF向导 对被转换的小驱动程序自动产生一个INF文件(参考安装一个Unidrv小驱动程序部分) 关于怎样使用微软的MDT

13、的教学指导,可以运行该开发工具并阅读其帮助文件。 4.2GPD文件介绍GPD文件用于创建Unidrv小驱动程序,一个Unidrv小驱动程序由一个基于文本的一般打印机描述(GPD)构成,它可以包含一个或多个GPD文件。 GPD文件用GPD语言描述一个打印机,GPD文件包含用GPD语言提供下列类型信息的GPD文件条目: 描述打印机特征的打印机属性 控制打印机操作的打印机命令 可以被Unidrv控制的描述打印机能力的特性 表示可以分配于打印机特性的打印机选项 打印机字体描述,说明了和硬件驻留与Cartridge字体相联系的特性。 描述打印机特性及打印机配置的相互依赖关系的条件语句 GPD语言同样定义

14、了GPD文件的条目,这些条目用于控制以下操作: 压缩光栅数据 处理色彩格式 用Unidrv过渡调色 处理可安装的特性及选项 描述打印机内存配置 这一介绍性部分也包括了对在小驱动程序中使用多个GPD文件和在小驱动程序中使用资源DLL的基本单位(Master Unit)的讨论。 4.2.1GPD文件条目GPD文件由条目构成,并使用描述每一个光栅打印机的特定设备的特征的GPD语言,这一部分包括以下的主题,这们描述了GPD文件的条目: GPD文件条目格式 GPD值类型 行连续(Line Continuation) 4.2.1.1GPD文件条目格式所有的GPD文件和条目符合下面的格式: *条目名:条目值

15、GPD文件条目(GPD_FileEntry),GPD文件条目, 条目名总是一个预定义的GPD解析器可识别出的关键字,其前置星号。 条目值必须是GPD值类型的一种。 每一个GPD_FileEntry是另外一个GPD文件的条目,符合上面显示的格式。每一个条目的子条目必须对指定的包含该它自身的条目是有效。 一些条目名称不接受包含花括号或封闭的子条目。 每一个GPD条目由行尾(end-of-line)或右括号()终止。 一个简单的GPD文件条目,它不接受子条目,是一个下面这样属性的条目: *MaxCopies:99 这一条目指定了打印机可以处理的最大的复制数量是99。 下面,是一个更复杂的例子,描述了

16、一个可以两种方向(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:D

17、OC_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 符号名称是一个用作标识符的字母串,它具有如下特征: 第一位字符必须是大写或小写的字母 在第一位字符之后的名称部分可以由大写或小写的字母、数

18、字或下划线组成。 名称是大小写敏感的。 名称中的字母数不受限制。 GPD语言预定义了大量的符号名称,预定义的名称为打印机属性、命令名称、标准特性、标准选项以及标准变量等而存在。 可以为定制的特性、定制的选项及宏等定义符号名称。 Text Strings 文本字符串是文字字母的字符串,以引号作为分隔符,应用于Unidrv小驱动程序的字符串可以被置于以下两种位置的任一个: 可以被放置在资源文件中。需要本地化的字符串,如用户接口文本,就应放置当在资源文件中,在小驱动程序中使用资源DLL部分中已经描述过。 可以包含于一个GPD文件中。字符串代表了构成打印机命令的escape序列,这些通常都包含于GPD

19、文件中,但这些字符串不需要被本地化。 字符串必须服从以下规则: 字符串必须以引号分隔开(“”)。 十六进制字节值可以被置于一个尖括号中,括起来的十六进制数就是一个字符串,如,<03><1B>。在一套尖括号中,每两个数字被解释为一个十六进制的字节值,因此,<03><1B>,<03 1B>和<031B>都是等同的。 百分号(%)被用作escape字符,为了在字符串中包括引号或左尖括号(“<”),先于它们之前使用一个百分号。为了指定一个以百分号结束的字符串,必须指定百分号的十六进制值,如“<25>”。另外,为在

20、一个文本字符中包括一个百分号并代表一个打印机命令,必须用另外一个百分号来处理它,为指定一个以百分号结束的打印机命令,必须指定两个十六进制的%值,如“命令字符串<25><25>” 一个字符串的实例是这样一个命令,它为佳能BJC-600打印机选择信纸大小的纸张,这一命令的字节序列是1B 28 67 03 00 6E 01 72,可以被指定如下: “<1B>(g<03 00>n<01>r” 每一个包含于字符串中的ASCII字符都被转换成为一个字节的十六进制等值。 在GPD文件中包含的字符串必须服从下列附加规则: 为扩展超过一个单行上的字符串

21、,在处理第一行之后每行之前加上一个连续字母(+),并且在每一行上以引号分隔文本。 一个字符串值可以由多个文本字符串构成,例如,下列的两上GPD条目是等同的: *Name: “abc”“def”* % Comment + “gh”“ijk” *Name: “abcdefghijk” 对属于被定义于资源文件中的附加的字符串规则,可以参考平台的SDK文档中的STRINGTABLE语句声明的描述。 更多的关于指定打印机命令escape序列的信息,参考命令字符串格式部分的内容。 Constants 常量是由GPD语言预定义的名称值,常量名称通常由大写字母构成。如GPD常量可以是PAGE、SERIAL、T

22、TY,它们是可以赋给*PrinterType属性的值。 Numeric Values 数字型值,所有的指定的条目值或GPD文件中的参数值的Numeric Values数字值都必须是整数。十进制小数是不允许的,除非在文本字符串中。 数字值被假定为正数,除非在其前有一个减号(“-”)。 数字值被假定为十进制数,除非在其前有0x的情况时,它们是非负的十六进制值。 如果可适用于一个特殊的GPD文件的设备环境,则星号(“*”)可以被用于指明或者是无穷大值,或者是忽略值, Boolean Values 布尔值被定义为等于预先定义的常量TRUE或FALSE。根据常规,所有打印机属性的字符名称都接受以问号标识

23、结束的布尔值,如下例所示: *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是数字型值时,例如,光标的起始点位置可以被指定为基本单位,如:*Cu

24、rsorOrigin: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 + =

25、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 在下面行的开始,

26、不需要使用行连接字母: 以星号开始的行。 以左括号开始的行。 4.2.1.4注解及忽略块GPD文件可以包含注释,注释的格式如下: *%注解字符串 注解字符串可以是任何以行结束符终止的字符串。在一个多行注解的每一行注解里都必须以*%字开始,*%必须放置于空格或分行符之前。 下面是一个有效的注解的例子: *% This section of the GPD file *% Contains macro definitions *Macros:HP4L *% These macros define command prefixes for the paper size feature LetterC

27、mdPrefix:”<1B>&12a8c1E<1B>*p0x0Y” *% Prefix for letter option. A4CmdPrefix:” <1B>&126a8c1E<1B>*p0x0Y” *% Prefix for A4 option Env10CmdPrefix:” <1B>&181a8c1E<1B>*p0x0Y” *% Prefix for Env10 option. 为请求GPD解析器忽略一组GPD条目,可以创建一个包含被忽略条目的被忽略块,忽略块的格式如下: *IgnoreB

28、lockIgnoredEntries 被忽略的条目是一套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

29、:”Landscape” *Command:CmdSelect *Order:DOC_SETUP.7 *Cmd:”<1B>&110” 4.2.1.5宏GPD语言支持两种类型的宏: 块宏(Block Macros),它允许指定一套GPD文件条目,并可以插入到GPD文件的任何条目位置。 值宏(Value Macros),它允许指定一套值,它可以被分别插入到GPD文件的任何位置。 块宏 块宏用于划定一套GPD的将重复插入到GPD文件中的一套GPD文件条目。可以包括任何条目类型到块宏定义中,如特性、选项语句、属性说明及对值宏的引用或者其他块宏。 下面的规则将应用于块宏中: 在一个G

30、PD文件中的块宏定义必须位置于任何对它的引用之前。 在根层次(即不在括号里)的块宏定义可以通过GPD文件的定义来获得,并在GPD定义之后。否则,块宏的范围将是设置于左括号与右括号之间的定义部分。 块宏的定义可以包含另外块宏或值宏的定义。 块宏的定义可以引用其他前边定义的块宏及值宏,但是它不能引用它自身。 块宏不能接受参数。 如果括号包含于一个宏体中,它们必须成对的(即,必须有相同数量的左、右括号)。 如果用同一个名称创建两个块宏,则直到解析器遇到第二个定义之前第一个定义一直是有效的,这时第二个将替代第一个。如果第二个定义的范围结束,则第一个块宏又处于有效的任命状态。 块宏格式 在GPD文件中,

31、用如下格式定义块宏: *BlockMacr:BlockMacroNameBlockMacroBody BlockMacroName是一个唯一的名称,而BlockMacroBody则是一套一个或多个GPD文件的条目。如果BlockMacroBody包含括号,则相同数量的左括号及右括应当被包含其中。 例如,可以定义一个名为EnvelopeDefaults的块宏,并定义如下: *BlockMacro:EnvelopeDefaults *PrintableArea:PAIR(4646,6738) *PrintableOrigin:PAIR(150,150) *RatateSize:TRUE 引用块宏

32、引用块宏,可以用以下的格式: *InsertBlock:=BlockMacroName BlockMacroName是一个唯一名称,之前指定在*BlockMacro条目中定义该宏。 例如,为了在一个选项说明中引用EnvelopeDefaults宏,可以使用以下的条目: *Option:Env9 *InsertBlock:=EnvelopeDefaults 值宏 值宏用于指定可重复地分别插入到GPD文件中的一套一个或多个值。值可以是任何GPD值类型。 以下的规则适应于所有的值宏: 一个定义于GPD文件中的值宏必须放置在任何对它引用之前。 在根层次(即,不在括号内)的值宏定义可以通过GPD文件定义

33、并获得,并且要在定义之后。否则,值宏的范围将是包含在左右括号之间的定义部分。 值宏必须解析一种GPD值类型。 如果所有的值都是文本字符串,值宏的定义就可以引用其他前边定义的值宏,但是一个值宏不能引用它自身。 值宏不接受参数。 如果创建了具有相同名称的两上值宏,则在GPD解析器遇见第二个定义之前,第一个值宏一直是有效的,并且第二个替换了第一个值宏。如果第二个值宏定义的区间结束,则第一个又重回到任命状态。 值宏的格式 为了在GPD文件中定义一个或多个值宏,可以使用以下格式:*Macros:ValueMacrogroupNameValueMacroBody 这里ValueMacroGroupName

34、是一个唯一名称,ValueMacroBody是一套与值相关的单一的值名称,如下: ValueMacroName:MacroValue 这里,ValueMacroName是一个唯一的宏名称,MacroValue代表了一个GPD值类型。(只要被解析的字符串代表了一种GPD值类型,MacroValue就可以包括对以前定义的值宏的引用。) 如下例,可以为一套常用的命令前缀定义值宏: *Macros:HP4L LetterCmdPrefix:”<1B>&12a8c1E<1B>*p0x0y” A4CmdPrefix:” <1B>&126a8c1E<

35、1B>*p0x0y” Env10CmdPrefix:” <1B>&181a8c1E<1B>*p0x0y” 但要注意,ValueMacroGroupName(例中为HP4L)是可选的,并被当作注解来看待。 引用值宏 引用值宏,使用下边这种格式: =ValueMacroName 这里ValueMacroName是一个唯一名称,之前在定义宏的*Macros条目中被说明。 例如,为了在一个命令规范说明中引用一个HP4L宏,可以使用以下条目: *Command:CmdSelect Cmd:=LetterCmdPrefix” <1B>*c0t5760x76

36、80y” 唯一一个可以通过联接宏引用与非宏值来分配值的时间,是当所有的宏定义及其他值表示文本或命令子串时,如在例中所示的。在其他情况下,宏引用必须表示整个被分配的值。 4.2.1.6预处理器定向GPD文件可以包含预处理器定向,它可以被用于控制对GPD文件中不同部分的条件解析,下表描述了可用于GPD文件中的预处理器定向。 预处理器定向 定义 *Define:symbolName 定义一个符号 *Undefine:symbolName 取消以前定义的一个符号 Ifdef:symbolName 意指一个GPD文件条目块的开始,如果专用的符号被定义,则在该定向与下一定向*Ifdef,*Elseifde

37、f,*Else,或*Endif定向之间的GPD文件条目,将会由GPD处理器进行处理 Elseifdef:SymbolName 如果指定的符号被定义,并且该符号指定的由之前的*Ifdef或*Elseifdef定向没有被定义,在这一定向及下一*Ifdef,*Elseifdef,*Else,或*Endif定向间的GPD文件条目将会由GPD解析器来处理 *Else 如果由以前的*Ifdef或者*Elseifdef定向指定的符号没有被定义,在这一定向与下边的*Ifdef或*Endif定向间的GPD文件条目将会由GPD解析器来处理。 *Endif 意指GPD文件条目块的结束 *Include:”FileN

38、ame” 指定一个附加GPD文件的名称,参考在小驱动程中使用多个GPD文件部分的内容 *SetPPPrefix:PrefixString 改变为预处理器定向准备的前置字符串,参考改变预处理器前缀部分的内容 条件预处理器定向可以被嵌套,在每一个嵌套层,使用条件预处理器定向的顺序如下: *Ifdef:symobl1 GPD file setcion *Elseifdef:Symbol2 GPD file seciton *elseifdef:Symbol3 GPD file section *Else: GPD file section *Endif: 对每一个应用的*Ifdef定向,*Endif

39、是必需的,*Elseifdef及*Else定向是可选的。每一个GPD的文件部分(file seciton)可以包含GPD文件条目以及可选择的,一个条件预处理器定向的嵌套序列。 用*Define定义的所有的符号明确地保留其定义,直到用*Undefine取消其定义之后。 *Include定义允许指定一个附加的GPD文件的名称,更多的信息,可以参考在小驱动程序中使用多个GPD文件部分的内容。 注意*IgnorBlock的GPD条目不影响预处理器定向,因为预处理器在GPD解析之前执行。 改变预处理器定向前缀 *SetPPPrefix定向允许改变用于预处理器定向的前缀。也就是,可以用这一定向来将星号所代

40、替的预处理器定向替换为另外一个字母或字符串。 例如,如果GPD文件包含下列定向: *SetPPPrefix:#SpecialPrefix# 当预处理器停止查找以*号开始的预处理器定向并开始寻找以#SpecialPrefix#开始的定向时。接着的序列将临时改变预处理器前缀为#SpecialPrefix#,并将它再恢复为*。 *SetPPPrefix:#SpecialPrefix# #SpecialPrefix#Ifdef:WINNT_50 #SpecialPrefix#Include:”ExtraGPD.gpd” #SpecialPrefix#Endif: #SpecialPrefix#SetP

41、PPrefix:* 这一特性最初的目的是允许为以后版本的操作系统写的GPD文件可以与Windows 2000兼容。例如,支持未来操作系统版本的GPD文件可以包括GPD与以星号打头的预处理器定向冲突的但是windows 2000支持的文件条目。通过改变前缀,一个为未来操作系统版本写的GPD文件可以在Windows 2000中使用,如下面的实例: #Ifdef:WINNT_70 *SetPPPrefix:#SpecialPrefix# *%Do special,OS-Specific Proessing of *%GPD file entries that might confilict with

42、 *%asterisk-prefixed preprocessor directives #Endif 但是要注意,这一技术只改变预处理器查找的前缀,由解析器识别的关键字必须总是前置星号*。 预定义的预处理器符号 微软定义了以下预处理器符号 符号 何处被定义 定义 WINNT_50 Windows 2000的GPD预处理器 环境是Windows 2000 WINNT_40 Windows NT 4.0及2000的预处理器 环境是Windows NT 4.0 PARSER_VER_1.0 Windows NT 4.0及2000的预处理器 GPD解析器(Version 1) WINNT_40和WI

43、NNT_50符号对创建与Windows NT 4.0及Windows 2000都兼容的GPD文件时是非常有用的。如果,例如Windows 2000支持一个打印机的能力但是Windows NT 4.0不支持,这样一能力就可以指定于一个GPD文件中并由*Ifdef:WINNT_50和*Endif定向限定。 4.2.1.7标准变量GPD语言定义了一套标准变量,它们可以在命令字符串中被引用,利用命令字符串格式,Unidrv驱动程序对这些变量赋值。从GPD文件的观点来说,这些变量是只读的。 所有的标准变量以一个DWORD整型类型存储。 下面的打印机命令条目指定了当一个光栅数据块准备好时发送给一个HP L

44、aserJet 4P打印机的命令字符串: Command:CmdSendBlockData:”<1B>*b”%dNumOfDataBytes”W” 下表包含所有的标准变量,以字母顺序排列。 标准变量 名称 值 注解 BlueValue 当前色彩的蓝色组件 在CmdDefinePaleterEntry命令字符串中使用时是有效的(也可参考GreenValue,RedValue) CurrentFontID 当前下载的软字体的标识代码 如果当前打印作业包含下载的软字体就是有效的 CurrentPaletterIndex 目前色彩模板的索引 在CmdSelectPaletteEntry命令

45、字符串中使用是有效的(也可参考GreenValue,RedValue CusorOriginX 基本单位中坐标源点的X坐标 无论何时打印机作业正在处理时都有效 CusorOriginY 基本单位中从标源点的Y坐标 无论何时打印机作业正在处理时都有效 DestX 基本单位中坐标目标点的X坐标 在CmdXMoveAbsolute字符串命令中使用时是有效的 DestXRel 档准单位中相对于当前坐标的目标点的X坐标 在CmdXMoveRelLeft及CmdXMoveRelRight命令字符串中使用时是有效的 DestY 基本单位中坐标目标点的Y坐标 在CmdYMoveAbsolute命令字符串中使用

46、时是有效的 DestYRel 档准单位中相对于当前坐标的目标点的Y坐标 在CmdYMoveRelUp和CmdYMoveRelDown命令字符串中使用时都时有效的 FontBold 如果当前字体是bold则设为1,否则都设为0 一种字体被指定后是有效的 FontHeight 在基本单位中,当前字体的高度 一种字体被指定后是有效的 FontItalic 如果当前字体是italic则设为1,否则都设为0 一种字体被指定后是有效的 FontStrikeThru 如果当前字体允许中划线则设为1,否则都设0 一种字体被指定后是有效的 FontUnderLine 如果当前字体有下划线则设为1,否则都设为0

47、一种字体被指定后是有效的 FontWidth 在基本单位中,当前字体的宽度 一种字体被指定后是有效的 GraphicsXRes 当前图形的水平精度(DPI) 无论何时打印机作业正在处理时都有效 GraphicsYRes 当前图形的垂直精度(DPI) 无论何时打印机作业正在处理时都有效 GrayPercentage 进行灰色填充时的级别(百分比) 使用CmdRectGrayFill命令字符串时是有效 GreenValue 当前色彩的绿色组件 在使用CmdDefinePaletterEntry命令字符串时是有效的(也可参考BlueValue和RedValue) LinefeedSpacing 垂直

48、空间的总量,基本单位中代表一个回行 在使用CmdSetLineSpacing命令字符串时是有效的 NextFontID 下一个被下载的软字体的标识码 使用CmdSetFontID命令字符串时是有效的 NextGlyph 要下载的下一符号的两字节代码 在使用CmdSetCharCode命令字符串时是有效的 NumOfCopies 用户请求的打印份数 无论何时打印机作业正在处理时都有效 NumOfDataByes 准备传送的光栅数据的字节数 在使用CmdSendXXXData命令字符串时是有效的,如果数据被压缩,该值是被压缩后的值 PaletterIndexToProgram 程序的下一个入口点的

49、调色板索引 在CmdDefinePaletterEntry命令字符串中使用时是有效的(也可参考RedValue,GreeValue,BlueValue, CurrentPaletterIndex) PatternBrushID 一个下载的调色板画刷的标识码 与CmdDownloadPattern和CmdSelectPattern命令字符串一起使用时是有效的 PatternBrushsize 当前调色板画刷的字节大小 与CmdDownloadPattern命令字符串一起使用时是有效的 PatternBrushType 当前调色板画刷的类型,其值可为: 2:Shading pattern 3:Cr

50、oss-hatch pattern 4:User-defined pattern 与CmdDownloadPattern与CmdSelectPattern命令字符串一起使用时是有效的 PhysPaperLenth y轴基本单位中,当前打印用纸的竖向模式的长度 无论何时打印机作业正在处理时都有效 PhysPaperWidth 基本单位中,当前打印用纸竖向模式的宽度 无论何时打印机作业正在处理时都有效 RasterDataHeightInPixels 当前数据代表的图像的像素高度 在任何CmdSendXXXData命令字符串及在CmdSetSrcBmpHeight命令字符串中时都是有效的,压缩不修

51、改该值 RasterDataWidthInBytes 一个扫描行中包含的字节数量 在任何CmdSendXXXData命令字符串及在CmdSetSrcBmpWidth命令字符串中都是有效的,压缩不修改该值 RectXSize 矩形宽度,以x轴基本单位 在CmdSetRectWidth命令字符串中使用时是有效的 RectYSize 矩形高度,以y轴基本单位 在CmdSetRectHeight命令字符串中使用时是有效的 RedValue 当前色彩的红色组件 在CmdDefinePaletterEntry命令字符串中使用时是有效的(也可参考GreenValue,BlueValue) TextXRes

52、文本的当前水平精度(DPI) 无论何时打印机作业正在处理时都有效 TextYRes 文本的当前垂直精度(DPI) 无论何时打印机作业正在处理时都有效 4.2.2基本单位许多打印机支持具有可变化的水平及垂直精度的命令,例如,一个特殊打印机的Immediate Line Feed命令提供一个1/288th每英寸的精度,而同样的打印机也可以支持垂直图像的1/96th每英寸精度。类似的,这一打印机可以提供水平的1/80th,1/160th和1/320th 每英寸的精度。 Unidrv提供一个单一的坐标系统来处理这些可变的精度,这一坐标系统中的单位就称为基本单位(master units)。一个打印机的

53、单位可以表示为(x,y)这样一对值,这时x是一个水平平面的基本单位,而y是垂直平面的基本单位。 为了确定一个平面的基本单位,必须计算实际精度的分母的最小公倍数,利用示例的打印机,可以按如下这样去做: 计算80,160,320的最小公倍数,结果是320。这样,水平的基本单位就是1/320th每英寸。 计算288和96的最小公倍数,结果是576。这样,垂直的基本单位就是1/576th每英寸。 为了指定一个打印机的基本单位,需要使用*MasterUnits属性。该属性格式如下: *MasterUnits:PAIR(X_Denominator,Y_Denominator) 这里,X_Denominat

54、or是水平精度分母的最小公倍数,Y-Denominator是垂直精度分母的最小公倍数,下面的GPD条目指定了例子中的基本单位。 *MasterUnits:PAIR(320,576) 一般地,在GPD文件条目中使用的位置及大小值必须以基本单位指定,例如,为指定最大的可定制页面的尺寸为9*12英寸,下边的条目应当被用到,这里9*320=2880,12*576=6912: *MaxSize:PAIR(2880,6912) 在计算基本单位时,只使用Unidrv支持的设备的精度。例如,如果打印机支持水平精度1/80th,1/96th,1/160th,1/320th每英寸,但是不打算在GPD文件中指定1/

55、96th每英寸的精度,则在最小公倍数LCM计算中,不要包含该精度即可。 如果打印机在移动光标位置时支持光标命令(cursor commands),则该值可以在*XmoveUnit及*YmoveUnit两个光标属性中指定并被包含于基本单位计算中。假设,如一个GPD文件包含下面的条目: *XMoveUnit:60 *YmoveUnit:60 在计算这一打印机的基本单位时,1/60th每英寸则必须被包含于水平及垂直的基本单位计算中。 4.2.3在小驱动程序中使用多个GPD文件Unidrv小驱动程序可以由多于一个的GPD文件组成,这就允许置换对一些打印机的一处或多处对GPD文件来说通用的特征,并将这些

56、通用的GPD文件包含于打印机的一个特殊GPD文件中。 为包含附加的GPD文件,就必须用*Include定向,它在预处理定向中描述。可以使用多个*Include定向,如下面的例子所示: *Include:”Common1.gpd” *Include:”common2.gpd” *Include:”common3.gpd” *Include定向的文件名参数不能是一个宏引用,也不能包含一个路径说明。 每一个被包含的文件都必须以GPD文件条目结束,并且该文件必须包含相等数目的左括号和右括号,如果一个GPD文件条目重复,则最近被解析的条目将代替前一个条目,而没有重复的条目将被增加到Unidrv的数据库中。 4.2.4在小驱动程序中使用资源DLL通常,打印驱动程序需要这样一些外部存储的资源,如字体、图标及其他位图、可本地化的用户接口文本字符串等。这些项目的描述被

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论