MAUI 无内置 PDF 渲染控件,但可通过三种方式实现:1. WebView 加载本地或网络 PDF(简单轻量);2. 使用 Plugin.Maui.PdfView(功能强、体验好);3. 自定义 WebView 封装 PDF.js(深度定制)。

MAUI 本身不内置 PDF 渲染控件,但可以通过几种成熟方式在应用内打开和显示 PDF 文件,无需跳转外部应用。核心思路是:用 WebView 加载本地或网络 PDF(简单轻量),或集成第三方跨平台 PDF 渲染库(功能更强、体验更好)。
方案一:用 WebView 加载 PDF(推荐快速上手)
这是最简单、零依赖的方式,适用于查看本地 PDF 或已知 URL 的 PDF。Android 和 iOS 均支持通过 WebView 加载 file:// 或 https:// 路径的 PDF(系统自带 PDF 渲染能力)。
- 确保 PDF 文件已存入应用沙盒(如
FileSystem.AppDataDirectory),获取其绝对路径 - 在 WebView 中加载时,对 Android 需用
file:///(三个斜杠),iOS 用file://(两个斜杠)——可统一用new Uri(filePath).AbsoluteUri避免手动拼接 - 为提升体验,建议包裹在 HTML 页面中,启用缩放、居中显示,例如:
@@@###@@@
WebView 会自动调用系统 PDF 查看器渲染,无需额外权限(iOS 14+ / Android 5.0+ 均兼容)。
方案二:使用 Plugin.Maui.PdfView(推荐进阶控制)
Plugin.Maui.PdfView 是专为 MAUI 设计的轻量级 PDF 查看器 NuGet 包(基于 Android PdfRenderer + iOS PDFKit),支持缩放、滚动、页码跳转,且纯 C# 控制。
- NuGet 安装:
Plugin.Maui.PdfView(作者:brminnick,持续维护) - 注册服务:在
MauiProgram.cs中添加.UsePdfView() - XAML 中使用:
- 支持从
Stream、byte[]或文件路径加载,也支持密码保护 PDF(需传入密码参数)
方案三:自定义 WebView 封装(兼顾兼容性与定制)
若需添加工具栏(上一页/下一页/页码)、搜索、高亮等,可封装一个带 JS 交互的 WebView 组件:
- 用 WebView 加载含 PDF.js 的本地 HTML(PDF.js 是 Mozilla 开源的纯 JS PDF 渲nderer)
- 将 PDF 文件 Base64 编码后传给 PDF.js,或通过
WebView.RegisterScriptableObject提供文件读取桥接 - 优点:完全跨平台、无原生依赖;缺点:包体积增大、首次加载稍慢、部分复杂 PDF 渲染性能略低
基本上就这些。WebView 方案适合快速验证和基础查看;Plugin.Maui.PdfView 更适合生产环境中的稳定、可控 PDF 集成;PDF.js 则适合需要深度定制 UI 或离线高级功能的场景。选哪个,取决于你的功能需求和包大小容忍度。










