Flutter PDF预览插件flutter_fullpdfview的使用

Flutter PDF预览插件flutter_fullpdfview的使用

插件简介

flutter_fullpdfview 是一个用于在 iOS 和 Android 上预览 PDF 文件的原生插件。


使用步骤

1. 添加依赖

在项目的 pubspec.yaml 文件中添加以下依赖:

dependencies:
  flutter_fullpdfview: latest_version

运行以下命令以安装依赖:

flutter pub get

2. 配置 iOS

在 iOS 项目中,需要启用嵌入视图预览。编辑 Info.plist 文件并添加以下键值对:

<key>io.flutter.embedded_views_preview</key>
<string>YES</string>

3. 导入插件

在需要使用的 Dart 文件中导入插件:

import 'package:flutter_fullpdfview/flutter_fullpdfview.dart';

参数选项

公共参数

以下是支持的参数及其平台兼容性:

名称 Android iOS
onViewCreated V V
onRender V V
onPageChanged V V
onError V V
onPageError V X
gestureRecognizers V V
filePath V V
fitEachPage V V
defaultPage V V
dualPageMode V V
displayAsBook V V
dualPageWithBreak V V
enableSwipe V V
swipeHorizontal V V
password V V
nightMode V X
autoSpacing V V
pageFling V V
pageSnap V V
backgroundColor V V
fitPolicy V X

注意:目前仅支持黑白模式。


控制器选项

以下是控制器提供的方法及其说明:

名称 描述 参数 返回值
getPageCount 获取总页数 - Future<int>
getCurrentPage 获取当前页 - Future<int>
setPage 跳转到指定页面 int page Future<bool>
setPageWithAnimation 带动画跳转到指定页面 int page Future<bool>
resetZoom 恢复缩放并调整到宽度 int page Future<bool>
getZoom 获取当前缩放比例 - Future<double>
setZoom 设置当前缩放比例 double zoom Future<double>
getPageWidth 获取指定页面的宽度 double width Future<double>
getPageHeight 获取指定页面的高度 double height Future<double>

示例代码

以下是一个完整的示例代码,展示如何使用 flutter_fullpdfview 预览 PDF 文件:

import 'dart:async';
import 'dart:io';

import 'package:flutter/material.dart';
import 'package:flutter_fullpdfview/flutter_fullpdfview.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter PDF View',
      home: PDFPreviewPage(),
    );
  }
}

class PDFPreviewPage extends StatefulWidget {
  @override
  _PDFPreviewPageState createState() => _PDFPreviewPageState();
}

class _PDFPreviewPageState extends State<PDFPreviewPage> {
  late String pathPDF;

  @override
  void initState() {
    super.initState();
    pathPDF = "assets/demo.pdf"; // 替换为实际路径
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('PDF Preview')),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => PDFViewerScreen(path: pathPDF)),
            );
          },
          child: Text('Open PDF'),
        ),
      ),
    );
  }
}

class PDFViewerScreen extends StatefulWidget {
  final String path;

  PDFViewerScreen({required this.path});

  @override
  _PDFViewerScreenState createState() => _PDFViewerScreenState();
}

class _PDFViewerScreenState extends State<PDFViewerScreen> {
  int pages = 0;
  bool isReady = false;
  String errorMessage = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('PDF Viewer')),
      body: Stack(
        children: [
          PDFView(
            filePath: widget.path,
            enableSwipe: true,
            fitEachPage: true,
            swipeHorizontal: true,
            autoSpacing: false,
            pageFling: false,
            defaultPage: 0,
            onRender: (_pages) {
              setState(() {
                pages = _pages;
                isReady = true;
              });
            },
            onError: (error) {
              setState(() {
                errorMessage = error.toString();
              });
            },
            onPageError: (page, error) {
              setState(() {
                errorMessage = '$page: ${error.toString()}';
              });
            },
            onViewCreated: (PDFViewController pdfViewController) {
              print('PDF View Created');
            },
            onPageChanged: (int page, int total) {
              print('Page changed: $page/$total');
            },
          ),
          errorMessage.isNotEmpty
              ? Center(child: Text(errorMessage))
              : !isReady
                  ? Center(child: CircularProgressIndicator())
                  : Container(),
        ],
      ),
    );
  }
}

注意事项

  1. 如果在生产环境中使用,请确保配置 ProGuard:
    -keep class com.shockwave.**
    

更多关于Flutter PDF预览插件flutter_fullpdfview的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter PDF预览插件flutter_fullpdfview的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_fullpdfview 是一个用于在 Flutter 应用中预览 PDF 文件的插件。它基于 PDFView 库,提供了简单易用的 API 来加载和显示 PDF 文件。以下是如何使用 flutter_fullpdfview 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_fullpdfview 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  flutter_fullpdfview: ^1.0.0+17

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入 flutter_fullpdfview 插件。

import 'package:flutter_fullpdfview/flutter_fullpdfview.dart';

3. 使用 PDFView 组件

你可以使用 PDFView 组件来加载和显示 PDF 文件。以下是一个简单的示例:

import 'package:flutter/material.dart';
import 'package:flutter_fullpdfview/flutter_fullpdfview.dart';

class PDFViewerScreen extends StatelessWidget {
  final String pdfPath;

  PDFViewerScreen({required this.pdfPath});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('PDF Viewer'),
      ),
      body: PDFView(
        filePath: pdfPath,
        enableSwipe: true,
        swipeHorizontal: true,
        autoSpacing: false,
        pageFling: false,
        onRender: (_pages) {
          print("PDF rendered");
        },
        onError: (error) {
          print(error.toString());
        },
        onPageError: (page, error) {
          print('$page: ${error.toString()}');
        },
        onViewCreated: (PDFViewController pdfViewController) {
          print("PDF view created");
        },
        onPageChanged: (int? page, int? total) {
          print('page change: $page/$total');
        },
      ),
    );
  }
}

4. 导航到 PDF 查看页面

你可以通过导航器将用户引导到 PDF 查看页面。例如:

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => PDFViewerScreen(pdfPath: 'path/to/your/pdf/file.pdf'),
  ),
);
回到顶部