適用於 Windows Vista 的新根層級專用 GPD 屬性
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
下列清單描述從 Windows Vista 開始的新 GPD 屬性。 若要維持與 Windows Vista 前版本的 Windows 回溯相容性,您應該使用下列程式代碼括住這些屬性。
*Ifdef: WINNT_60 ... *Endif: WINNT_60 blocks
PrintProcDuplexOptions
PrintProcDuplexOptions 屬性會控制列印處理器中的各種雙工選項。 此屬性可以有下列其中一個值:
1:反向雙工的反向頁面
2:盡可能抑制產生額外的空白頁面
3:上述兩者
0:上述無
如果 PrintProcDuplexOptions 為 1,它會控制列印處理器是否應該反轉雙工上的頁面。
假設您必須使用 n-up = 1 列印四頁檔,而且您想要使用反向列印和雙面列印。 因為您想要反向列印,因此您想要在第一頁之前列印最後一頁。 因為您想要雙面列印,因此您想要在單張紙上列印兩頁。 列印處理器可以播放下列兩種格式之一的頁面(其中每對數位都表示將在單張紙張兩側列印的兩頁):
格式 1: (4,3),(2,1)
格式 2: (3,4),(1,2)
在 Windows Vista 之前,列印處理器會以 2 格式列印訂單 [(3,4),(1,2)]。 但在 Windows Vista 和更新版本中,預設格式為 1 [(4,3),(2,1)]。 之所以發生這項變更,是因為許多印表機的格式為 2 有不正確的輸出;也就是說,列印的頁面不會以適當的順序排序。
但是,如果您的印表機與格式 1 正常運作,您就不需要變更 Windows Vista 和更新版本的任何專案。 不過,如果您的印表機無法正確使用格式 1,而且您想要還原為格式 2,請將下列程式代碼範例新增至 GPD 檔案。
*Ifdef: WINNT_60
*PrintProcDuplexOptions: 1
*Endif: WINNT_60
格式 1 在某些方向或輸入和輸出匣的一些組合中可能效果更好,而格式 2 在其他組合中可能效果更好。 因此,您可以將 PrintProcDuplexOptions 屬性放在 switch/case 建構中。
針對 Windows Vista 前 Unidrv 驅動程式,如果您有 Windows Vista 前置列印處理器,格式 2 是預設值,而且您無法變更格式;否則,如果您有 Windows Vista 列印處理器,格式 1 是預設值,而且無法變更格式。
針對 Windows Vista Unidrv 驅動程式,如果您有 Windows Vista 前置列印處理器,格式 2 是預設值,而且會忽略 GPD 屬性;否則,如果您有 Windows Vista 列印處理器,格式 1 是預設值,但您可以使用 PrintProcDuplexOptions 屬性來變更格式。
如果 PrintProcDuplexOptions 為 2,它會在特定雙工案例中防止產生空白頁面。
此屬性可控制當您執行雙面列印時,是否應該將額外的空白頁面傳送至印表機。 例如,如果作業是單頁作業且雙工開啟(假設 n-up = 1),則只需要列印工作表的一側。 目前,列印機會列印一側,然後在反面產生空白頁面。 (因為列印作業是以 duplex=on 啟動,所以列印機會在列印作業彈出紙張之前預期有兩頁。如果第二頁未列印,某些列印機會持續等候。目前解決方案的缺點如下:
產生的頁面會導致會計軟體和印表機內頁面計數器中的頁面計數不正確。
當頁面從印表機中途傳出時(在某些 Hewlett Packard DeskJet 型印表機中),使用者可能會嘗試在印表機嘗試將其拉回時將其拉回。 這種情況可能會導致硬體問題。
您可以在 GPD 檔案中指定 *PrintProcDuplexOptions:2,以避免上述問題。
請注意,即使已設定此屬性,也只會在下列有限的案例中執行空白頁面優化:
針對反向列印,只有當整個作業可以容納在紙張的單邊時,才會執行空白頁面優化(例如,具有 n-up=1 的單頁作業,或具有 n-up =4 的四頁作業)。 如果作業需要一張以上的工作表,則不會執行優化(因為列印機頁面會以不正確的順序列印)。 例如,對於三頁作業,頁面可能會以 3,2,1,<空白> 的順序列印,而不是 4,3,2,<空白>。
如果列印處理器必須模擬複本,則不會執行空白頁面優化。 如果所需的複本數目大於列印處理器可以建立的複本數目,列印處理器就會模擬複本。
下列情況是模擬發生且產生空白頁面的範例(如有需要):
- 無法製作複本之印表機的兩份複本
下列情況是模擬未發生且您可以隱藏額外頁面產生時的範例:
- 無法製作複本之印表機的單一複製作業
- 可製作多個複本之印表機的五個複製作業
PrintProcDuplexOptions 的使用方式
*Ifdef: WINNT_60
*PrintProcDuplexOptions: 2
*Endif: WINNT_60
在某些情況下,您可能不介意在進行其他情況下進行額外的頁面列印。 因此,您可以將 PrintProcDuplexOptions 屬性放在 switch/case 建構中。
針對 Windows Vista 前 Unidrv 驅動程式,如果您有 Windows Vista 前置列印處理器,列印機會視需要列印額外的空白頁面,而且您無法變更此行為:否則,如果您有 Windows Vista 列印處理器,列印機會視需要列印額外的空白頁面,而且您無法變更此行為。
針對 Windows Vista Unidrv 驅動程式,如果您有 Windows Vista 前置列印處理器,列印機會視需要列印額外的空白頁面,而且會忽略 GPD 屬性:否則,如果您有 Windows Vista 印表處理器,而且如果適當的 GPD 屬性和適當的條件存在(也就是先前有關防止空白頁面列印的條件),列印機將不會列印空白頁面。
PreAnalysisOptions
PreAnalysisOptions 屬性可以有下列其中一個值:
0:停用所有預先分析模式。
1:預設模式。 啟用單色 z 順序文字分析和空白帶優化。 此模式會針對可下載的字型或裝置字型支援及高解析度 (600 dpi 或更高)、24 bpp 轉譯模式的裝置啟用。
2:為 24 bpp ImageProcessing 回呼函式啟用 1 bpp 優化。
4:啟用裝置 StretchBlt 支援。
8:啟用廠商預先分析模式。
16:在呼叫 ImageProcessing 回呼函式之前,針對 1 bpp 啟用 1 bpp 的偵錯模式,其中帶會轉換成 24 bpp。
UseBMPFontCompression?
UseBMPFontCompression? 屬性可控制 Unidrv 在下載字型為點陣圖時,是否應該壓縮數據。 UseBMPFontCompression 的 預設值是 FALSE,這表示如果 GPD 檔案中沒有此屬性,Unidrv 將不會進行壓縮。 此預設值與沒有點陣圖字型壓縮功能的舊版 Unidrv 保持相容性。 只有當印表機支援位圖字型壓縮時,才應該將此屬性設定為 TRUE 。壓縮的點陣圖字元數據會採用壓縮的 run-length-with-line-repetition 格式。
UseMode5Compression?
UseMode5Compression? 屬性會控制 UniDrv 是否應該使用模式 5 壓縮。 模式 5 (或方法 5) 壓縮是自適性壓縮,可讓您結合使用多個其他壓縮方法(例如 Unencoded、TIFF 或 Delta-Row)。 UseMode5Compression 的 預設值是 FALSE,這表示如果 GPD 中沒有此屬性,Unidrv 將不會執行調適性壓縮。 此預設值與沒有調適型壓縮功能的舊版 Unidrv 保持相容性。 只有當印表機支援調適型壓縮時,才應該將此屬性設定為 TRUE 。
使用HPGLPolylineEncoding?
UseHPGLPolylineEncoding? 屬性會控制 Unidrv 是否應該使用聚合線條編碼。 HP-GL/2 支援繪圖向量的畫筆向上/手寫筆向下/繪製絕對/繪製相對命令。 多行編碼 (PE) 命令是代表向量更有效率的方式。
UseHPGLPolylineEncoding 的預設值 是 FALSE,這表示如果 GPD 中沒有此屬性,Unidrv 將不會使用 PE 命令。 此預設值會維持與不支援PE命令之舊版Unidrv的相容性。 只有當印表機支援多行編碼時,才應該將此值設定為 TRUE 。
PrintSchemaPrivateNamespaceURI
PrintSchemaPrivateNamespaceURI 屬性會定義核心驅動程式應該用來公開 PrintTicket 或 PrintCapabilities 中私人 PPD 功能或選項的私人命名空間 URI。 屬性必須出現在 GPD 檔的根目錄中,並包含 URI 的 ASCII 表示法,該 URI 將用來定義 PrintTickets 和 PrintCapabilities 檔中的命名空間。 該 URI 會接著與沒有明確對應至公用架構的所有功能和選項相關聯,或核心驅動程式無法辨識。
PrintSchemaKeywordMap
PrintSchemaKeywordMap 屬性會出現在 GPD 檔案中的功能和選項建構之下。 這個屬性會指出您應該搭配印表機定義功能使用的公用印架構名稱。 您可以使用 PrintSchemaKeywordMap 屬性,在 PrintTicket 中重新命名 GPD 檔案中指定的任何選項,但雙工和 Collate 除外。
GPD 剖析器會針對明確辨識的功能忽略此屬性,包括頁面大小和色彩。
所有值都應該以引號括住。 若有的話,它們將會使用 GPD 中指定的代碼頁轉換成 Unicode。 與其他 GPD 屬性相同的方式來解析任何屬性的重複定義:讀取的最後一個定義優先。
如果您將功能對應至已在 GPD 檔案中使用的列印架構關鍵詞,對應的 PrintCapabilities 檔可能會列出該功能一次以上。 多次發生可能會造成混淆,因此您不應該將功能對應至 GPD 檔案中使用的列印架構關鍵詞。
GPD 剖析器會自動產生 InputBin 功能的 FORMSOURCE 選項,並將其對應至列印架構中的 AutoSelect 關鍵詞。 如果您的 GPD 檔案包含使用 PrintSchemaKeywordMap 屬性將選項對應至 Print Schema 關鍵詞的 InputBin 選項,則列印架構中的功能會在裝置命名空間中包含 FORMSOURCE 選項。 AutoSelect 會出現在 PrintCapabilities 檔中,並參照 GPD 檔案 PrintSchemaKeywordMap 屬性中指定的選項。
下列程式代碼範例顯示部分 GPD 檔案以顯示版面配置。
*Feature: HPSTAPLER
{
*Name: "Staple"
*DefaultOption: Off
* PrintSchemaKeywordMap: "Staple"
*Option: Off
{
*Name: "Off"
* PrintSchemaKeywordMap: "Off"
}
*Option: On
{
*Name: "On"
* PrintSchemaKeywordMap: "On"
}
}
IsXPSDriver
IsXPSDriver 屬性會使用下列 GPD 語法。
*IsXPSDriver?: TRUE | FALSE
您可以針對 Microsoft Win32 GDI 驅動程式和新 XPSDrv 驅動程式,使用 Windows Vista Unidrv 設定模組 (Unidrvui.dll)。 若要針對 XPSDrv 驅動程式使用 Unidrv 組態模組,XPSDrv 驅動程式的 GPD 資料文件必須指定 IsXPSDriver 屬性,並將其值設定為 TRUE。
例如,如果您有 XPS 驅動程式,請使用下列程式代碼。
*IsXPSDriver?: TRUE
若要使用 Win32 GDI 驅動程式的 Unidrv 組態模組,您不需要指定此屬性。
UseImageForHatchBrush?
UseImageForHatchBrush? 屬性使用下列 GPD 語法。
*Ifdef: WINNT_60
*UseImageForHatchBrush?: TRUE
*Endif: WINNT_60
在 Microsoft Windows Server 2003 或 Windows XP 中,當 Unidrv 以 HP-GL/2 模式列印時,如果在 DrvRealizeBrush 函式中收到影線筆刷,Unidrv 會傳送命令,讓列印機選取適當的影線筆刷。 Unidrv 不會控制影線筆刷的呈現方式。 例如,線條之間的間距通常由解析度控制。 在較高的解析度上,間距會變小,而在較低解析度上,間距會更大。 因此,如果使用不同的解析度,檔可能會以不同的方式列印。
在 Windows Vista 中,如果 GPD 指定 UseImageForHatchBrush? 屬性,Unidrv 會將影線筆刷轉譯到位圖表面,然後將該位圖傳送至裝置。 因此,Unidrv 對影線筆刷的呈現方式有一些控制。
ReverseBandOrder?
ReverseBandOrder? 屬性使用下列 GPD 語法。
*Ifdef: WINNT_60
*ReverseBandOrder?: TRUE
*Endif: WINNT_60
ReverseBandOrder? 的值為 TRUE 或 FALSE,表示是否啟用反向帶狀。 這個屬性會使頻帶以反向順序進行。 例如,針對直向頁面,帶狀從下到上發生,而不是從上到下。
這個屬性基本上與 ReverseBandOrderForEvenPages?相同,不同之處在於 ReverseBandOrder?即使雙工不是使用中 #ReverseBandOrderForEvenPages?,只有在雙工為 ON 時才有效,而且它適用於所有頁面 (ReverseBandOrderForEvenPages? 只能在偶數頁面上運作)。 如需如何使用 ReverseBandOrder? 和其他相關信息的詳細資訊,請參閱 *ReverseBandOrderForEvenPages?。 特別請注意,外掛程式必須反轉掃描行和掃描行中的位。
您可以使用 *ReverseBandOrderForEvenPages 的組合?和 *ReverseBandOrder?。
當只有 ReverseBandOrder? 設定為 TRUE 時,所有頁面的帶狀將會反轉。
當只有 ReverseBandOrderForEvenPages? 設定為 TRUE 時,如果列印機正在列印雙面列印,則偶數分頁會反轉帶狀。 如果未設定雙工, 則會忽略 ReverseBandOrderForEvenPages? 設定。
當同時設定 ReverseBandOrder? 和 ReverseBandOrderForEvenPages 時,會發生下列情況:
如果雙工為 ON,則會針對奇數頁面執行反向帶狀處理(也就是 1、3、5、7 等等)。
如果雙工為 OFF,則會對所有頁面執行反向帶狀處理。
BidiQueryFile
BidiQueryFile 屬性會使用下列 GPD 語法。
*BidiQueryFile: <GPD or GDL file name>
使用 BidiQueryFile 來指定 GPD 或 GDL 檔名,其中包含印表機驅動程式的自動 設定 BidiQuery 或 BidiResponse 數據。 GPD 或 GDL 檔名不應指定任何路徑。 如果自動設定數據包含在驅動程式的 DataFile GPD 檔案內,您也可以將 GPD 檔案指定為 BidiQueryFile 屬性的值。
下列程式代碼範例示範部分 GPD 檔案中此屬性的範例。
*Ifdef: WINNT_60
*BidiQueryFile: "ACnfgUni.GDL"
*Endif: WINNT_60