Flutter PDF阅读插件pdf_viewer_flutter的使用

Flutter PDF阅读插件pdf_viewer_flutter的使用

1. 安装

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

dependencies:
  pdf_viewer_flutter: ^1.0.2
  path_provider: any

然后在终端运行以下命令以安装依赖项:

flutter pub get

或者直接在项目内运行以下命令并按回车键:

flutter pub add pdf_viewer_flutter
flutter pub add path_provider

2. 配置Android发布版本

首先,你需要遵循这些步骤:部署到Android

之后,你需要在release配置中添加NDK过滤器:

buildTypes {
    release {
        signingConfig signingConfigs.release
        minifyEnabled true
        useProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

        ndk {
            abiFilters 'armeabi-v7a'
        }
    }

    debug {
        minifyEnabled false
        useProguard false
    }
}

3. 使用

以下是完整的示例代码,展示了如何在Flutter应用中使用pdf_viewer_flutter插件来显示PDF文件。

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

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pdf_viewer_flutter/pdf_viewer_flutter.dart';

void main() {
  runApp(MaterialApp(
    title: 'PDF Viewer for Flutter',
    home: MyApp(),
  ));
}

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => new _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _pefFilePath = "";

  [@override](/user/override)
  void initState() {
    super.initState();
    createFileOfPdfUrl().then((file) {
      setState(() {
        _pefFilePath = file.path;
        print(_pefFilePath);
      });
    });
  }

  Future<File> createFileOfPdfUrl() async {
    final url =
        "https://github.com/contactlutforrahman/files/blob/main/pdf_viewer.pdf";
    final filename = url.substring(url.lastIndexOf("/") + 1);
    var request = await HttpClient().getUrl(Uri.parse(url));
    var response = await request.close();
    var bytes = await consolidateHttpClientResponseBytes(response);
    String dir = (await getApplicationDocumentsDirectory()).path;
    File file = new File('$dir/$filename');
    await file.writeAsBytes(bytes);
    return file;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('PDF Viewer for Flutter')),
      body: Center(
        child: ElevatedButton(
          child: Text("Open a PDF file"),
          onPressed: () => Navigator.push(
            context,
            MaterialPageRoute(
                builder: (context) => PDFViewerScreen(_pefFilePath)),
          ),
        ),
      ),
    );
  }
}

class PDFViewerScreen extends StatelessWidget {
  final String? pefFilePath;
  PDFViewerScreen(this.pefFilePath);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return PDFViewerScaffold(
        appBar: AppBar(
          title: Text("PDF Document"),
          actions: <Widget>[
            IconButton(
              icon: Icon(Icons.share),
              onPressed: () {},
            ),
          ],
        ),
        path: pefFilePath);
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用pdf_viewer_flutter插件来展示PDF文件的示例代码。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  pdf_viewer_flutter: ^3.2.0  # 请检查最新版本号

2. 导入插件

在你的Dart文件中(例如main.dart),导入pdf_viewer_flutter插件。

import 'package:flutter/material.dart';
import 'package:pdf_viewer_flutter/pdf_viewer_flutter.dart';
import 'package:path_provider/path_provider.dart';

3. 获取本地PDF文件路径(如果需要从本地加载)

如果你需要从本地文件系统加载PDF文件,可以使用path_provider插件来获取应用的文档目录路径。

Future<String> getLocalPdfPath() async {
  final directory = await getApplicationDocumentsDirectory();
  final path = directory.path + '/sample.pdf';  // 假设你的PDF文件名为sample.pdf
  // 这里你可以复制你的PDF文件到该路径,或者从网络下载并保存
  return path;
}

4. 使用PDFViewerWidget展示PDF

下面是一个完整的示例,展示了如何使用PDFViewerWidget来展示PDF文件。

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter PDF Viewer Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  late String pdfPath;

  @override
  void initState() {
    super.initState();
    // 初始化PDF文件路径,这里我们从本地获取
    _initPdfPath();
  }

  Future<void> _initPdfPath() async {
    String path = await getLocalPdfPath();
    setState(() {
      pdfPath = path;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('PDF Viewer Demo'),
      ),
      body: pdfPath.isEmpty
          ? Center(child: CircularProgressIndicator())  // 如果路径未初始化,显示加载指示器
          : PDFViewerWidget(
              pdfAssetPath: pdfPath,
              autoSpacing: true,
              pageFling: true,
              pageSnap: true,
              nightMode: false,
              defaultPage: 0,
              enableSwipe: true,
              autoPlay: false,
              swipeHorizontal: true,
              pageCurl: 0.2,
              onError: (error) {
                print("Error loading PDF: $error");
              },
              onPageChanged: (page, pageCount) {
                print("Page $page of $pageCount");
              },
              onPageError: (page, error) {
                print("Error loading page $page: $error");
              },
              onLoad: (pageCount) {
                print("PDF loaded with $pageCount pages");
              },
            ),
    );
  }
}

注意事项

  1. PDF文件来源:你可以从本地加载PDF文件,也可以从网络下载并保存。如果PDF文件在远程服务器上,你需要先下载文件到本地(例如应用的文档目录),然后加载。

  2. 错误处理:示例中包含了简单的错误处理逻辑,你可以根据需要扩展。

  3. 插件配置PDFViewerWidget提供了多种配置选项,如自动播放、页面间距、页面卷曲效果等,你可以根据需要进行调整。

通过上述步骤,你应该能够在Flutter应用中成功展示PDF文件。如果你有任何其他问题或需要进一步的帮助,请随时提问。

回到顶部