Flutter PDF文档查看插件flutter_pdfjs_viewer的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter PDF文档查看插件flutter_pdfjs_viewer的使用

Features

  • 仅支持Android和iOS
    基于封装在pdf.js中的PDF文件浏览器,此插件可以帮助您查找正在使用的PDF无法显示相关信息(如签名)的原因。

Getting Started

添加依赖

首先,在pubspec.yaml文件中添加flutter_pdfjs_viewer作为依赖项:

dependencies:
  flutter_pdfjs_viewer: ^latest_version # 替换为最新版本号

然后执行flutter pub get以安装依赖。

导入包

在您的Dart代码中导入flutter_pdfjs_viewer

import 'package:flutter_pdfjs_viewer/flutter_pdfjs_viewer.dart';

iOS配置ATS for info.plist文件

为了确保iOS设备可以加载PDF文件,请在项目的ios/Runner/Info.plist文件中添加以下内容:

<key>NSAppTransportSecurity</key>
<dict>
   <key>NSAllowsArbitraryLoads</key>
   <true/>
</dict>

Android配置

为了确保Android设备可以访问网络并加载PDF文件,请确保在android/app/src/main/AndroidManifest.xml文件中包含以下权限声明:

<uses-permission android:name="android.permission.INTERNET" />

并且设置允许明文传输或自定义网络安全配置:

允许明文传输

<application
    android:usesCleartextTraffic="true"
    ...>
</application>

自定义网络安全配置

创建一个名为network_security_config.xml的文件,并将其放置在res/xml目录下。然后在AndroidManifest.xml中引用它:

<application
    android:networkSecurityConfig="@xml/network_security_config"
    ...>
</application>

Usage

下面是一些简单的使用示例,展示了如何通过不同方式加载PDF文件。

示例:从网络加载PDF

这是一个完整的例子,演示了如何从网络加载PDF并在Flutter应用中显示它。

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

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false, // This line removes the debug banner
      theme: ThemeData(
        primarySwatch: Colors.red,
      ),
      home: const PdfViewerPage(),
    );
  }
}

class PdfViewerPage extends StatefulWidget {
  const PdfViewerPage({super.key});

  @override
  State<PdfViewerPage> createState() => _PdfViewerPageState();
}

class _PdfViewerPageState extends State<PdfViewerPage> {
  final String pdfUrl = "https://www.example.com/sample.pdf"; // 替换为实际的PDF链接

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('PDF Detail'),),
      body: PDFJSViewerWidget.network(pdfUrl), // 使用网络URL加载PDF
    );
  }
}

更多加载方式

除了从网络加载PDF之外,还可以通过其他方式加载PDF文件:

  • PDFJSViewerWidget.file(path) - 从本地文件系统加载PDF。
  • PDFJSViewerWidget.assets(path) - 从Flutter assets加载PDF。
  • PDFJSViewerWidget.data(data) - 直接使用二进制数据加载PDF。

请根据具体需求选择合适的方法。

Demo

WhatsApp Image 2023-10-25 at 09 38 16

以上就是关于flutter_pdfjs_viewer插件的基本介绍和使用方法,希望对您有所帮助!如果您有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用flutter_pdfjs_viewer插件来查看PDF文档的示例代码。这个插件利用了PDF.js库来在Flutter应用中渲染PDF文件。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_pdfjs_viewer: ^x.y.z  # 替换为最新版本号

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

接下来是一个完整的示例代码,展示如何使用flutter_pdfjs_viewer来加载和显示PDF文件:

import 'package:flutter/material.dart';
import 'package:flutter_pdfjs_viewer/flutter_pdfjs_viewer.dart';
import 'dart:typed_data';
import 'dart:convert';

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: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  Uint8List? pdfData;

  @override
  void initState() {
    super.initState();
    // 这里可以加载本地的PDF文件,或者从网络获取PDF数据
    loadPdfFromAssets();
  }

  Future<void> loadPdfFromAssets() async {
    // 从assets文件夹中加载PDF文件
    ByteData data = await rootBundle.load('assets/sample.pdf');
    setState(() {
      pdfData = data.buffer.asUint8List();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('PDF Viewer'),
      ),
      body: Center(
        child: pdfData == null
            ? CircularProgressIndicator()
            : PDFViewer(
                document: pdfData!,
                // 可选参数,如设置初始页码等
                // initialPage: 1,
                // 其他参数根据需求进行设置
              ),
      ),
    );
  }
}

在这个示例中,我们做了以下事情:

  1. pubspec.yaml文件中添加了flutter_pdfjs_viewer依赖。
  2. 创建了一个Flutter应用,其中包含一个主页面MyHomePage
  3. MyHomePage的状态管理中,通过initState方法从assets文件夹中加载PDF文件(你需要将PDF文件放在assets文件夹中,并在pubspec.yaml中声明它)。
  4. 使用PDFViewer小部件来显示加载的PDF文件。如果PDF数据还未加载完成,则显示一个进度指示器。

请确保你的pubspec.yaml文件中已经声明了assets:

flutter:
  assets:
    - assets/sample.pdf

这样,你就可以在Flutter应用中查看PDF文档了。如果PDF文件是从网络获取的,你可以使用HTTP请求来获取PDF数据的Uint8List表示,然后将其传递给PDFViewer

回到顶部