共用方式為


V4 驅動程式 UI 架構

重要

建議您使用 Microsoft 的 IPP 收件匣類別驅動程式,以及列印支援應用程式 () ,來自訂印表機裝置開發Windows 10和 11 中的列印體驗。

如需詳細資訊,請參閱 列印支援應用程式設計指南

v4 驅動程式架構的高階設計目標是提供 Microsoft Store 應用程式使用者介面的內建支援。

採用的應用程式型 UI 架構是清楚的範例。 UWP 裝置應用程式為使用者提供 Microsoft Store 應用程式 UI 中支援的全螢幕體驗。 用於列印的 UWP 裝置應用程式提供列印喜好設定的擴充性,以及支援 v4 列印驅動程式之印表機的印表機通知。 用於列印的 UWP 裝置應用程式也會在新的 [開始] 畫面上提供列印裝置的可見度。

當使用者在 Windows 桌面上執行現有應用程式時,印表機延伸模組應用程式支援列印喜好設定和印表機通知。 雖然這些應用程式的 UI 非常不同,但針對觸控量身打造,另一個針對滑鼠和鍵盤使用者進行優化,但不論 UI 為何,商務邏輯和 v4 列印驅動程式的連線仍可能類似。

下圖顯示 GitHub 上提供的 v4 列印驅動程式和印表機擴充功能範例 之 Microsoft Store 裝置應用程式的高層級架構。

自訂 UI 架構的概觀。

如上圖所示,模型/檢視/控制器架構可讓應用程式在以 C# 撰寫的模型層共用程式碼。

擴充 PrinterExtensionLibrary

隨附于各種範例中的 PrinterExtensionLibrary 專案可以使用新的類別來擴充,或藉由擴充所提供的類別集。 由於 Microsoft 會定期更新範例程式碼,因此我們建議合作夥伴應盡可能減少對所提供原始程式檔所做的程式碼變更數目。 對於擴充所提供類別集的合作夥伴,建議您將現有的類別標示為「部分」,並在個別的原始程式檔中新增函式或覆寫。

在 UWP 應用程式和傳統型應用程式之間共用編譯的二進位檔

Microsoft Store 裝置應用程式和印表機延伸模組範例中隨附的 PrinterExtensionLibrary 專案會使用相同的原始程式碼,但建置程式碼可能會有價值,因此在專案之間可移植,而不會針對每個專案個別建置。 若要讓 PrinterExtensionLibrary 專案的程式碼可攜式,您必須將專案轉換成可攜式類別庫。 執行下列步驟進行轉換。

  1. 在 Microsoft Visual Studio 中,按一下 [檔案>>專案],然後在 [搜尋已安裝的範本] 方塊中搜尋 「可攜式」。

  2. 選取 [可攜式類別庫 Visual C#],然後在 [ 名稱 ] 文字方塊中提供專案的名稱,然後按一下 [ 確定]。

  3. 將原始程式碼從現有的 PrinterExtensionLibrary 專案複製到新專案中。

  4. 以滑鼠右鍵按一下您的可攜式類別庫專案,然後選擇 [卸載]。 然後開啟 .csproj 檔案,然後將下一節新增至檔案,緊接著檔的最後一個標籤。

      <ItemGroup>
        <COMReference Include="PrinterExtensionLib">
          <Guid>{91CE54EE-C67C-4B46-A4FF-99416F27A8BF}</Guid>
          <VersionMajor>1</VersionMajor>
          <VersionMinor>0</VersionMinor>
          <Lcid>0</Lcid>
          <WrapperTool>tlbimp</WrapperTool>
          <Isolated>False</Isolated>
          <EmbedInteropTypes>True</EmbedInteropTypes>
        </COMReference>
      </ItemGroup>
    
  5. 如果您因為 COM 參考而看到警告,請將下列內容新增至 < PropertyGroup > 標籤:

<ResolveComReferenceSilent>true</ResolveComReferenceSilent>

列印 UI 案例的 API

API 已開發為 v4 列印驅動程式模型的一部分,以支援印表機延伸模組和 UWP 裝置應用程式進行列印。 概括而言,列印喜好設定案例會使用 PrintTicket、PrintCapabilities 和新的屬性包來取得並儲存其所有資訊。 印表機通知是由以雙向通訊 (Bidi) 架構為基礎的新事件系統所驅動,而這個新系統會使用用戶端與伺服器之間的 AsyncUI 通訊協定。 此 API 的資料中心本質表示一個應用程式可以輕鬆地支援許多裝置。

印表機延伸模組必須以這種方式建置,以便在要求的資料無法使用時正常降級。 例如,如果特定 PrintCapabilities 功能無法使用,或其中一個屬性包中的屬性無法使用,則不應該防止應用程式的其餘部分運作。 存取屬性包或屬性包中的特定屬性時,應用程式應該使用 try-catch 語法,以確保擲回的任何例外狀況都不會造成應用程式當機。 如需詳細資訊,請參閱 印表機擴充功能介面

印表機延伸模組介面

v4 GitHub 上的列印驅動程式範例