集成 PDF 阅读器模块
compdf_viewer 是基于 ComPDF Flutter SDK 封装的即用型 Flutter PDF 阅读器包。不需要从零构建 PDF 交互界面,将此包集成到您的项目后,即可获得完整的 PDF 阅读体验——包括注释、书签、全文搜索、缩略图导航等功能,开箱即用。
该包使用 GetX 进行路由管理、状态管理和依赖注入,内置英文和中文两种本地化翻译。
| Android | iOS |
|---|---|
![]() | ![]() |
功能概览
| 类别 | 详细说明 |
|---|---|
| PDF 浏览 | 单页、双页、连续滚动等多种显示模式 |
| 注释工具 | 便签、高亮、下划线、删除线、手绘、图形(矩形、椭圆、直线、箭头)、图章、签名 |
| 文档导航 | BOTA 面板——书签、目录大纲、缩略图、注释列表 |
| 全文搜索 | 带上下文摘要的全文检索,高亮显示搜索结果 |
| 文档安全 | 密码保护、文档加密、权限设置 |
| 内容编辑 | 直接编辑 PDF 文字和图像,支持撤销/重做 |
| 导出 | PDF 页面转图片、注释扁平化处理 |
| 界面 | 支持深色模式,内置中英文翻译 |
包结构
该包采用基于功能模块的架构,结合 GetX 模式。每个功能模块都是自包含的独立单元,拥有自己的控制器(Controller)、数据模型(Model)和 UI 组件(Widgets)。
bat
lib/
├── compdf_viewer.dart # 公共 API 与导出
├── core/ # 全局配置、SDK 初始化、依赖绑定、常量
├── features/
│ ├── viewer/ # PDF 主渲染页面与控制器
│ ├── annotation/ # 注释工具栏及属性编辑器
│ ├── bota/ # 书签、大纲、缩略图、注释列表
│ ├── search/ # 全文搜索
│ ├── navigation/ # 侧边导航抽屉
│ ├── security/ # 密码/加密对话框
│ ├── convert/ # PDF 转图片导出
│ └── info/ # 文档元数据展示
├── l10n/ # 中英文国际化翻译
├── router/ # GetX 路由定义
├── shared/ # 可复用组件、控制器、对话框
└── utils/ # 文件、页面、屏幕工具类核心类说明:
| 类 | 职责 |
|---|---|
PdfViewerGlobal | SDK 初始化与日志记录 |
PdfViewerController | PDF 阅读器主状态与控制逻辑 |
PdfAnnotationToolBarController | 注释工具选择与属性管理 |
PdfSearchController | 文本搜索状态与结果导航 |
PdfViewerRoutes | 路由路径常量 |
PdfViewerPages | GetX 页面配置列表 |
环境要求
| 要求 | 最低版本 |
|---|---|
| Flutter | 3.3.0 |
| Dart SDK | 3.0.5 |
Android minSdkVersion | 21 |
| iOS 最低部署版本 | 12.0 |
| ComPDF 授权许可 | 必须 — 获取免费试用 |
快速开始
添加依赖
compdf_viewer 位于 ComPDF Flutter SDK 仓库 的 example/packages/compdf_viewer 目录下。将其复制到您的项目中,然后在 pubspec.yaml 中引用:
yaml
dependencies:
flutter:
sdk: flutter
compdf_viewer:
path: packages/compdf_viewer
get: ^4.7.2获取依赖包
bash
flutter pub get添加授权文件
将您的 ComPDF 授权文件复制到应用的 assets 目录(例如 assets/license_key_flutter.xml),并在 pubspec.yaml 中声明:
yaml
flutter:
assets:
- assets/license_key_flutter.xml初始化 SDK
在 runApp() 之前调用 PdfViewerGlobal.init():
dart
import 'package:compdf_viewer/compdf_viewer.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 使用授权文件路径初始化 ComPDF
await PdfViewerGlobal.init('assets/license_key_flutter.xml');
runApp(const MyApp());
}注册路由与翻译
compdf_viewer 自带 GetX 路由和国际化支持,在您的 GetMaterialApp 中注册:
dart
import 'package:get/get.dart';
import 'package:compdf_viewer/compdf_viewer.dart';
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return GetMaterialApp(
// 注册翻译(中文 + 英文)
translations: PdfViewerTranslations(),
locale: Get.deviceLocale,
fallbackLocale: const Locale('en', 'US'),
// 注册 PDF 阅读器路由
getPages: [
...PdfViewerPages.routes,
// ...您的其他路由
],
home: const HomePage(),
);
}
}打开 PDF
通过传入文件的绝对路径,导航到 PDF 阅读器页面:
dart
Get.toNamed(
PdfViewerRoutes.pdfPage,
arguments: {'document': '/absolute/path/to/document.pdf'},
);完成!阅读器将以完整的注释工具栏、搜索、书签等所有内置功能打开。
依赖说明
| 依赖包 | 用途 |
|---|---|
compdfkit_flutter | PDF 渲染与 SDK 核心功能 |
get | 状态管理、依赖注入与路由 |
shared_preferences | 阅读器设置持久化存储 |
flutter_colorpicker | 注释颜色选择器 UI |
share_plus | PDF 文件分享 |
file_picker | 从设备存储选择文件 |
path_provider | 访问设备目录 |
flutter_svg | 渲染工具栏 SVG 图标 |
logger | 调试与错误日志 |

