MAUI中WebView打印问题求助:原Xamarin.Forms方案失效且文档无说明
MAUI中WebView预览与打印实现方案
MAUI并未直接沿用Xamarin.Forms中依赖PrintManager和PrintDocumentAdapter的打印方案,需通过平台特定代码实现WebView的预览与打印功能,以下是分平台的具体实现:
Android平台
直接调用原生WebView的打印适配能力,结合系统打印服务发起打印:
using Android.Print; using Android.Webkit; private void TriggerWebViewPrint(WebView mauiWebView) { if (mauiWebView.Handler?.PlatformView is Android.Webkit.WebView nativeWebView) { var printManager = (PrintManager)Platform.CurrentActivity.GetSystemService(Android.Content.Context.PrintService); var printAdapter = nativeWebView.CreatePrintDocumentAdapter("WebView打印文档"); // 发起打印请求,系统会弹出打印预览界面 printManager.Print("WebView打印任务", printAdapter, new PrintAttributes.Builder().Build()); } }
在按钮点击事件中直接调用TriggerWebViewPrint(yourWebViewInstance)即可触发预览和打印流程。
iOS平台
利用iOS原生UIPrintInteractionController结合WKWebView的打印格式化器实现:
using UIKit; using WebKit; private void TriggerWebViewPrint(WebView mauiWebView) { if (mauiWebView.Handler?.PlatformView is WKWebView nativeWebView) { var printController = UIPrintInteractionController.SharedPrintController; printController.PrintFormatter = nativeWebView.ViewPrintFormatter; // 弹出打印预览界面 printController.Present(true, (controller, completed, error) => { if (!completed && error != null) { // 按需处理打印失败逻辑 } }); } }
同样在按钮点击事件中调用该方法即可。
跨平台封装(可选)
为避免页面代码耦合平台逻辑,可封装成通用服务:
- 定义接口:
public interface IWebViewPrintService { void PrintWebView(WebView webView); }
- 在Android/iOS项目中分别实现该接口,对应上述平台代码
- 在
MauiProgram.cs注册服务:
builder.Services.AddSingleton<IWebViewPrintService, PlatformSpecificPrintService>();
- 在页面中注入服务并调用:
private readonly IWebViewPrintService _printService; // 构造函数注入 public YourPage(IWebViewPrintService printService) { _printService = printService; } private void OnPrintButtonClicked(object sender, EventArgs e) { _printService.PrintWebView(yourWebViewInstance); }
内容的提问来源于stack exchange,提问作者Suraj
相关产品推荐
相关产品推荐

