Flutter PDF阅读插件advance_pdf_viewer_fork的使用
Flutter PDF阅读插件advance_pdf_viewer_fork的使用
简介
advance_pdf_viewer_fork
是一个用于处理PDF文件的Flutter插件,支持Android和iOS平台。它最初是基于https://github.com/lohanidamodar/pdf_viewer fork而来,而后者又是从https://github.com/CrossPT/flutter_plugin_pdf_viewer fork出来的。
安装
在您的 pubspec.yaml
文件中添加 advance_pdf_viewer_fork
作为依赖项:
dependencies:
advance_pdf_viewer_fork: any
使用方法
加载PDF
可以通过三种方式加载PDF文档:从assets、从URL或从本地文件系统。
-
从assets加载
PDFDocument doc = await PDFDocument.fromAsset('assets/test.pdf');
-
从URL加载
PDFDocument doc = await PDFDocument.fromURL('http://www.africau.edu/images/default/sample.pdf');
-
从文件加载
File file = File('...'); PDFDocument doc = await PDFDocument.fromFile(file);
加载特定页面
可以加载指定页数的PDF页面:
PDFPage pageOne = await doc.get(page: _number);
使用预构建的查看器
使用预构建的PDF查看器组件来展示PDF文档:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Example'),
),
body: Center(
child: _isLoading
? Center(child: CircularProgressIndicator())
: PDFViewer(document: document),
),
);
}
这个代码片段会生成如下的视图:
示例代码
下面是一个完整的示例应用程序,展示了如何使用 advance_pdf_viewer_fork
插件加载和显示PDF文件,并提供了一些额外的功能,例如从不同来源加载PDF文件以及切换PDF显示模式等。
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:advance_pdf_viewer_fork/advance_pdf_viewer_fork.dart';
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MyApp(),
);
}
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
bool _isLoading = true;
PDFDocument document;
bool _usePDFListView = false;
@override
void initState() {
super.initState();
loadDocument();
}
@override
void dispose() {
document.clearImageCache();
document = null;
super.dispose();
}
loadDocument() async {
document = await PDFDocument.fromAsset('assets/sample.pdf');
setState(() => _isLoading = false);
}
changePDF(value) async {
setState(() => _isLoading = true);
if (value == 1) {
document = await PDFDocument.fromAsset('assets/sample2.pdf');
} else if (value == 2) {
document = await PDFDocument.fromURL("http://conorlastowka.com/book/CitationNeededBook-Sample.pdf");
} else {
document = await PDFDocument.fromAsset('assets/sample.pdf');
}
setState(() => _isLoading = false);
}
@override
Widget build(BuildContext context) {
return Scaffold(
drawer: Drawer(
child: Column(
children: <Widget>[
SizedBox(height: 36),
ListTile(
title: Text('Load from Assets'),
onTap: () {
changePDF(1);
},
),
ListTile(
title: Text('Load from URL'),
onTap: () {
changePDF(2);
},
),
ListTile(
title: Text('Restore default'),
onTap: () {
changePDF(3);
},
),
],
),
),
appBar: AppBar(
title: const Text('FlutterPluginPDFViewer'),
actions: <Widget>[
GestureDetector(
onTap: (){
_usePDFListView = !_usePDFListView;
setState(() {});
},
child: Icon(Icons.cached),
),
SizedBox(width: 15,)
],
),
body: Column(
children: <Widget>[
!_usePDFListView
? Expanded(
child: Center(
child: _isLoading
? Center(child: CircularProgressIndicator())
: PDFViewer(
document: document,
zoomSteps: 1,
//uncomment below line to preload all pages
// lazyLoad: false,
// uncomment below line to scroll vertically
// scrollDirection: Axis.vertical,
// enableSwipeNavigation: false,
showPicker: false,
showNavigation: true,
//uncomment below code to replace bottom navigation with your own
/* navigationBuilder:
(context, page, totalPages, jumpToPage, animateToPage) {
return ButtonBar(
alignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
IconButton(
icon: Icon(Icons.first_page),
onPressed: () {
jumpToPage(page: 0);
},
),
IconButton(
icon: Icon(Icons.arrow_back),
onPressed: () {
animateToPage(page: page - 2);
},
),
IconButton(
icon: Icon(Icons.arrow_forward),
onPressed: () {
animateToPage(page: page);
},
),
IconButton(
icon: Icon(Icons.last_page),
onPressed: () {
jumpToPage(page: totalPages - 1);
},
),
],
);
}, */
),
),
)
: Expanded(
child: _isLoading
? Center(child: CircularProgressIndicator(),)
: PDFListViewer(
document: document,
preload: true,
),
),
],
),
);
}
}
待办事项
- 支持密码保护的PDF文件
使用的第三方库
名称 | 描述 |
---|---|
path_provider | 一个Flutter插件,用于查找文件系统中的常用位置。支持iOS和Android。 |
flutter_cache_manager | 一个用于下载并缓存文件到应用程序缓存目录的缓存管理器。各种设置可以改变文件保存的时间长度。 |
numberpicker | 一个自定义小部件,设计用于通过滚动选择器选择整数或十进制数字。 |
希望这篇文档能够帮助您更好地理解和使用 advance_pdf_viewer_fork
插件。如果有任何问题或需要进一步的帮助,请随时提问!
更多关于Flutter PDF阅读插件advance_pdf_viewer_fork的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter PDF阅读插件advance_pdf_viewer_fork的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 advance_pdf_viewer_fork
插件在 Flutter 应用中显示 PDF 文件的示例代码。这个插件是一个流行的 Flutter 插件,用于在应用中嵌入和显示 PDF 文件。
首先,确保你已经在 pubspec.yaml
文件中添加了 advance_pdf_viewer_fork
依赖:
dependencies:
flutter:
sdk: flutter
advance_pdf_viewer_fork: ^x.y.z # 请替换为最新版本号
然后,运行 flutter pub get
以获取依赖项。
接下来,你可以在你的 Flutter 应用中使用这个插件来显示 PDF 文件。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:advance_pdf_viewer_fork/advance_pdf_viewer_fork.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter PDF Viewer',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: PDFViewerScreen(),
);
}
}
class PDFViewerScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('PDF Viewer'),
),
body: Center(
child: PDFViewer(
documentPath: 'assets/sample.pdf', // PDF 文件路径,可以是本地资源或网络 URL
autoSpacing: false,
pageFling: true,
swipeHorizontal: true,
pageSnap: true,
nightMode: false,
autoPlay: false,
pageController: PageController(initialPage: 0),
onError: (String error) {
print("Error loading PDF: $error");
},
onRender: (_) {},
onLoad: (_) {},
),
),
);
}
}
在这个示例中,我们创建了一个简单的 Flutter 应用,其中包含一个 PDFViewerScreen
页面。这个页面使用 PDFViewer
小部件来显示一个名为 sample.pdf
的 PDF 文件。
注意几点:
documentPath
参数指定了 PDF 文件的路径。在这个例子中,我们假设sample.pdf
文件已经作为资产包含在应用中(你需要在pubspec.yaml
文件的flutter
部分下的assets
列表中添加这个文件)。PDFViewer
小部件接受多个参数,如autoSpacing
、pageFling
、swipeHorizontal
等,用于配置 PDF 查看器的行为。onError
、onRender
和onLoad
是回调函数,分别用于处理加载错误、渲染完成和加载完成事件。
如果你打算从网络 URL 加载 PDF 文件,只需将 documentPath
替换为相应的 URL,例如:
documentPath: 'https://example.com/sample.pdf',
确保你的应用具有访问网络的权限(在 Android 上,你可能需要在 AndroidManifest.xml
文件中添加 <uses-permission android:name="android.permission.INTERNET"/>
)。
这个示例代码应该能够帮助你快速上手使用 advance_pdf_viewer_fork
插件来在 Flutter 应用中显示 PDF 文件。如果有更多需求或问题,可以查阅该插件的官方文档以获取更多信息和高级用法。