You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)
            {
                // 按需处理打印失败逻辑
            }
        });
    }
}

同样在按钮点击事件中调用该方法即可。

跨平台封装(可选)

为避免页面代码耦合平台逻辑,可封装成通用服务:

  1. 定义接口:
public interface IWebViewPrintService
{
    void PrintWebView(WebView webView);
}
  1. 在Android/iOS项目中分别实现该接口,对应上述平台代码
  2. 在MauiProgram.cs注册服务:
builder.Services.AddSingleton<IWebViewPrintService, PlatformSpecificPrintService>();
  1. 在页面中注入服务并调用:
private readonly IWebViewPrintService _printService;

// 构造函数注入
public YourPage(IWebViewPrintService printService)
{
    _printService = printService;
}

private void OnPrintButtonClicked(object sender, EventArgs e)
{
    _printService.PrintWebView(yourWebViewInstance);
}

内容的提问来源于stack exchange,提问作者Suraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 03:11:10