V4 驅動程式 UI 架構
重要
新式列印平臺是 Windows 與印表機通訊的慣用方法。 我們建議您使用Microsoft的 IPP 收件匣類別驅動程式,以及列印支援應用程式 (PSA),自定義 Windows 10 和 11 中的列印體驗,以進行印表機裝置開發。
如需詳細資訊,請參閱 新式列印平臺 和 列印支援應用程式設計指南。
v4 驅動程式架構的高階設計目標是提供 Microsoft Store 應用程式使用者介面的內建支援。
採用的應用程式型UI架構是一個清楚的範例。 UWP 裝置應用程式為使用者提供Microsoft市集應用程式UI中支援的全螢幕體驗。 適用於印表的 UWP 裝置應用程式提供印表喜好設定的擴充性,以及支援 v4 印表驅動程式之印表機的印表機通知。 用於列印的 UWP 裝置應用程式也會在新的 [開始] 畫面上提供列印裝置的可見度。
當使用者在 Windows 桌面上執行現有的應用程式時,印表機擴充功能應用程式支援印表喜好設定和印表機通知。 雖然這些應用程式的UI非常不同,但一個專為觸控量身打造,另一個針對滑鼠和鍵盤用戶優化,但不論UI為何,對 v4 印驅動程式的商業規則和連線仍可能很類似。
下圖顯示Microsoft市集裝置應用程式的高層級架構。
如上圖所示,模型/檢視/控制器架構可讓應用程式在以 C# 撰寫的模型層共用程式代碼。
擴充 PrinterExtensionLibrary
隨附於各種範例的 PrinterExtensionLibrary 專案可以使用新的類別來擴充,或藉由擴充提供的類別集。 由於Microsoft定期對範例程式代碼進行更新,因此建議合作夥伴應盡可能減少對所提供原始程序檔所做的程式碼變更數目。 對於擴充所提供類別集的合作夥伴,建議您將現有的類別標示為「部分」,並在個別的原始程序檔中新增函式或覆寫。
在 UWP 應用程式和傳統型應用程式之間共用編譯的二進位檔
Microsoft Store 裝置應用程式和印表機延伸模組範例中隨附的 PrinterExtensionLibrary 專案會使用相同的原始程式碼,但建置程式代碼在專案之間可移植,而不需針對每個專案個別建置,可能很有價值。 若要讓 PrinterExtensionLibrary 專案的程式代碼可攜式,您必須將項目轉換成可攜式類別庫。 執行下列步驟來進行轉換。
在 Microsoft Visual Studio 中,按兩下 [檔案>新>專案],然後在 [搜尋已安裝的範本] 方塊中搜尋 [可攜式]。
選取 [可攜式類別庫 Visual C#],然後在 [ 名稱 ] 文字框中提供專案的名稱,然後按兩下 [ 確定]。
將原始程式碼從現有的 PrinterExtensionLibrary 專案複製到新專案。
以滑鼠右鍵按下您的可攜式類別庫專案,然後選擇 [ 卸除]。 然後開啟 .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>
如果您因為 COM 參考而看到警告,請將下列內容新增至 <PropertyGroup> 標籤:
<ResolveComReferenceSilent>true</ResolveComReferenceSilent>
列印 UI 案例的 API
API 已開發為 v4 印表驅動程式模型的一部分,以支援印表機延伸模組和 UWP 裝置應用程式進行列印。 概括而言,列印喜好設定案例會使用 PrintTicket、PrintCapabilities 和新的屬性包來取得及儲存其所有資訊。 印表機通知是由以雙向通訊(Bidi) 架構為基礎的新事件系統所驅動,而這個新系統會使用用戶端與伺服器之間的 AsyncUI 通訊協定。 此 API 的數據中心本質表示一個應用程式可以輕鬆地支援許多裝置。
印表機延伸模組必須以這種方式建置,如此一來,如果要求的數據無法使用,它們可能會正常降級。 例如,如果特定 PrintCapabilities 功能無法使用,或其中一個屬性包中的屬性無法使用,則不應該防止應用程式的其餘部分運作。 存取屬性包或屬性包中的特定屬性時,應用程式應該使用 try-catch 語法,以確保擲回的任何例外狀況都不會造成應用程式當機。 如需詳細資訊,請參閱 印表機延伸模組介面。