pdfrx
pdfrx is a rich and fast PDF viewer implementation built on top of PDFium. The plugin supports Android, iOS, Windows, macOS, Linux, and Web.
Interactive Demo
A demo site using Flutter Web
Multi-platform support
- Android
- iOS
- Windows
- macOS
- Linux (even on Raspberry Pi)
- Web (WASM)
Example Code
The following fragment illustrates the easiest way to show a PDF file in assets:
import 'package:pdfrx/pdfrx.dart';
...
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Pdfrx example'),
),
body: PdfViewer.asset('assets/hello.pdf'),
),
);
}
}
Anyway, please follow the instructions below to install on your environment.
Getting Started
Installation
Add this to your package's pubspec.yaml
file and execute flutter pub get
:
dependencies:
pdfrx: ^1.2.9
Note for Windows
REQUIRED: You must enable Developer Mode to build pdfrx on Windows.
The build process uses symbolic links which requires Developer Mode to be enabled. If Developer Mode is not enabled:
- The build will fail with an error message
- You will see a link to Microsoft's official instructions
- You must enable Developer Mode and restart your computer before building
Please follow Microsoft's official guide to enable Developer Mode as the exact steps may vary depending on your Windows version.
Note for Building Release Builds
Please note that the section is not applicable to Web.
Because the plugin contains WASM binaries as its assets and they increase the size of the app regardless of the platform. This is normally OK for development or debugging but you may want to remove them when building release builds.
To do this, do dart run pdfrx:remove_wasm_modules
between flutter pub get
and flutter build ...
on your app project's root directory:
flutter pub get
dart run pdfrx:remove_wasm_modules
flutter build ...
Customizations/Features
You can customize the behaviors and the viewer look and feel by configuring PdfViewerParams.
Deal with Password Protected PDF Files
PdfViewer.asset(
'assets/test.pdf',
// The easiest way to supply a password
passwordProvider: () => 'password',
...
),
See Deal with Password Protected PDF Files using PasswordProvider for more information.
Text Selection
The following fragment enables text selection feature:
PdfViewer.asset(
'assets/test.pdf',
params: PdfViewerParams(
enableTextSelection: true,
...
),
...
),
For more text selection customization, see Text Selection.
PDF Feature Support
Viewer Customization
- Page Layout (Horizontal Scroll View/Facing Pages)
- Showing Scroll Thumbs
- Dark/Night Mode Support
- Document Loading Indicator
- Viewer Customization using Widget Overlay
Additional Customizations
- Doubleātap to Zoom
- Adding Page Number on Page Bottom
- Per-page Customization using Widget Overlay
- Per-page Customization using Canvas
Additional Widgets
PdfDocumentViewBuilder/PdfPageView
PdfPageView is just another PDF widget that shows only one page. It accepts PdfDocument and page number to show a page within the document.
PdfDocumentViewBuilder is used to safely manage PdfDocument inside widget tree and it accepts builder
parameter that creates child widgets.
The following fragment is a typical use of these widgets:
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 Management
PdfDocumentViewBuilder can accept PdfDocumentRef from PdfViewer to safely share the same PdfDocument instance. For more information, see example/viewer/lib/thumbnails_view.dart
.
Low Level PDF API
- Easy to use Flutter widgets
- Easy to use PDF APIs
- PDFium bindings
- Not encouraged but you can import
package:pdfrx/src/pdfium/pdfium_bindings.dart
- Not encouraged but you can import