Flutter PDF处理插件pdfrx的使用
Flutter PDF处理插件pdfrx的使用
pdfrx
是一个基于 PDFium 构建的丰富且快速的PDF查看器实现。该插件支持 Android、iOS、Windows、macOS、Linux 和 Web 平台。
交互式演示
你可以通过以下链接访问使用 Flutter Web 构建的 演示站点。
多平台支持
- Android
- iOS
- Windows
- macOS
- Linux (甚至 Raspberry PI)
- Web (*使用 PDF.js)
示例代码
下面的代码片段展示了如何在Flutter中显示资源文件夹中的PDF文件:
import 'package:flutter/material.dart';
import 'package:pdfrx/pdfrx.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: 'Pdfrx example',
home: MainPage(),
);
}
}
class MainPage extends StatefulWidget {
const MainPage({super.key});
@override
State<MainPage> createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: const Icon(Icons.menu),
onPressed: () {
// Toggle left pane visibility
},
),
title: const Text('Pdfrx example'),
),
body: PdfViewer.asset(
'assets/hello.pdf', // 确保在 pubspec.yaml 中添加了 assets/hello.pdf
),
);
}
}
完整示例
以下是一个更完整的示例,包括密码保护的PDF文件处理:
import 'package:flutter/material.dart';
import 'package:pdfrx/pdfrx.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: 'Pdfrx example',
home: MainPage(),
);
}
}
class MainPage extends StatefulWidget {
const MainPage({super.key});
@override
State<MainPage> createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: const Icon(Icons.menu),
onPressed: () {
// Toggle left pane visibility
},
),
title: const Text('Pdfrx example'),
),
body: PdfViewer.asset(
'assets/password_protected_sample.pdf',
passwordProvider: () => 'test', // 提供密码以打开受保护的PDF文件
),
);
}
}
开始使用
安装
在你的 pubspec.yaml
文件中添加以下依赖项并执行 flutter pub get
:
dependencies:
pdfrx: ^1.0.101
Windows注意事项
确保你的Windows安装启用了开发者模式。构建过程内部使用符号链接,这需要启用开发者模式。如果没有启用,你可能会遇到类似此问题的错误。
打开PDF文件
PdfViewer
支持以下方法来打开PDF文件:
PdfViewer.asset
: 打开Flutter资源中的PDF文件。PdfViewer.file
: 从文件系统打开PDF文件(macOS可能被App Sandbox阻止)。PdfViewer.uri
: 从URI(如https://...
或相对路径)打开PDF文件(Web和macOS可能被CORS或App Sandbox阻止)。
处理受密码保护的PDF文件
PdfViewer.asset(
'assets/test.pdf',
passwordProvider: () => 'password',
)
更多自定义和注意事项,请参阅使用PasswordProvider处理受密码保护的PDF文件。
自定义功能
你可以通过配置 PdfViewerParams
来自定义行为和查看器的外观。
文本选择
启用文本选择功能:
PdfViewer.asset(
'assets/test.pdf',
params: PdfViewerParams(
enableTextSelection: true,
),
)
更多文本选择自定义,请参阅文本选择。
其他功能支持
查看器自定义
额外自定义
其他小部件
PdfDocumentViewBuilder/PdfPageView
PdfPageView
是另一个仅显示单个页面的PDF小部件。它接受 PdfDocument
和页码来显示文档中的页面。
PdfDocumentViewBuilder
用于安全地管理 PdfDocument
实例,并接受一个 builder
参数来创建子小部件。
典型用法如下:
PdfDocumentViewBuilder.asset(
'asset/test.pdf',
builder: (context, document) => ListView.builder(
itemCount: document?.pages.length ?? 0,
itemBuilder: (context, index) {
return Container(
margin: const EdgeInsets.all(8),
height: 240,
child: Column(
children: [
SizedBox(
height: 220,
child: PdfPageView(
document: document,
pageNumber: index + 1,
alignment: Alignment.center,
),
),
Text(
'${index + 1}',
),
],
),
);
},
),
),
PdfDocument管理
PdfDocumentViewBuilder
可以接受来自 PdfViewer
的 PdfDocumentRef
以安全地共享同一个 PdfDocument
实例。更多信息请参阅 example/viewer/lib/thumbnails_view.dart。
低级PDF API
- 易于使用的Flutter小部件:
PdfViewer
PdfDocumentViewBuilder
PdfPageView
- 易于使用的PDF API:
PdfDocument
- PDFium绑定:
希望这些信息能帮助你更好地理解和使用 pdfrx
插件!如果你有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter PDF处理插件pdfrx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter PDF处理插件pdfrx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用pdfrx
插件来处理PDF文件的一个基本示例。pdfrx
是一个用于在Flutter应用中读取和渲染PDF文件的插件。以下示例展示了如何加载和显示PDF文件。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加pdfrx
依赖:
dependencies:
flutter:
sdk: flutter
pdfrx: ^x.y.z # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入插件
在你的Dart文件中(例如main.dart
),导入pdfrx
插件:
import 'package:flutter/material.dart';
import 'package:pdfrx/pdfrx.dart';
3. 使用PdfViewer组件
下面是一个完整的示例,展示了如何使用PdfViewer
组件来加载和显示PDF文件:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter PDF Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PdfViewerScreen(),
);
}
}
class PdfViewerScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 假设你有一个PDF文件的URL或本地路径
final String pdfUrl = "https://example.com/sample.pdf"; // 替换为你的PDF文件URL
// final String pdfPath = "assets/sample.pdf"; // 如果PDF文件在本地资源中,可以使用这个路径
return Scaffold(
appBar: AppBar(
title: Text('PDF Viewer'),
),
body: Center(
child: PdfViewer(
// 如果使用URL加载PDF
url: pdfUrl,
// 如果使用本地路径加载PDF(确保在pubspec.yaml中声明了assets)
// filePath: pdfPath,
// 可选参数:设置PDF的初始页码
// initialPage: 1,
// 可选参数:设置PDF的缩放级别
// scale: 1.5,
// 可选参数:是否自动调整缩放以适应页面宽度
// autoSpacing: true,
// 可选参数:PDF加载完成后的回调
// onLoadComplete: (pageCount) {
// print("PDF loaded successfully, total pages: $pageCount");
// },
// 可选参数:PDF加载错误时的回调
// onError: (error) {
// print("Failed to load PDF: $error");
// },
// 可选参数:页面改变时的回调
// onPageChanged: (pageNumber) {
// print("Page changed to: $pageNumber");
// },
),
),
);
}
}
4. 加载本地PDF文件(可选)
如果你希望从本地资源加载PDF文件,需要在pubspec.yaml
中声明assets:
flutter:
assets:
- assets/sample.pdf
然后在PdfViewer
组件中使用filePath
参数:
PdfViewer(
filePath: "assets/sample.pdf",
// 其他参数...
)
5. 运行应用
确保你的设备或模拟器已经连接,并运行flutter run
来启动应用。你现在应该能够看到一个简单的PDF查看器,显示你指定的PDF文件。
这个示例展示了pdfrx
插件的基本用法。根据你的需求,你可以进一步自定义和扩展这个示例。