Flutter PDF处理插件pdfrx的使用

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

Flutter PDF处理插件pdfrx的使用

pdfrx 是一个基于 PDFium 构建的丰富且快速的PDF查看器实现。该插件支持 Android、iOS、Windows、macOS、Linux 和 Web 平台。

交互式演示

你可以通过以下链接访问使用 Flutter Web 构建的 演示站点

pdfrx

多平台支持

  • Android
  • iOS
  • Windows
  • macOS
  • Linux (甚至 Raspberry PI)
  • Web (*使用 PDF.js)

示例代码

下面的代码片段展示了如何在Flutter中显示资源文件夹中的PDF文件:

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

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Pdfrx example',
      home: MainPage(),
    );
  }
}

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

  @override
  State<MainPage> createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: IconButton(
          icon: const Icon(Icons.menu),
          onPressed: () {
            // Toggle left pane visibility
          },
        ),
        title: const Text('Pdfrx example'),
      ),
      body: PdfViewer.asset(
        'assets/hello.pdf', // 确保在 pubspec.yaml 中添加了 assets/hello.pdf
      ),
    );
  }
}

完整示例

以下是一个更完整的示例,包括密码保护的PDF文件处理:

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

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Pdfrx example',
      home: MainPage(),
    );
  }
}

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

  @override
  State<MainPage> createState() => _MainPageState();
}

class _MainPageState extends State<MainPage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        leading: IconButton(
          icon: const Icon(Icons.menu),
          onPressed: () {
            // Toggle left pane visibility
          },
        ),
        title: const Text('Pdfrx example'),
      ),
      body: PdfViewer.asset(
        'assets/password_protected_sample.pdf',
        passwordProvider: () => 'test', // 提供密码以打开受保护的PDF文件
      ),
    );
  }
}

开始使用

安装

在你的 pubspec.yaml 文件中添加以下依赖项并执行 flutter pub get

dependencies:
  pdfrx: ^1.0.101

Windows注意事项

确保你的Windows安装启用了开发者模式。构建过程内部使用符号链接,这需要启用开发者模式。如果没有启用,你可能会遇到类似此问题的错误。

打开PDF文件

PdfViewer 支持以下方法来打开PDF文件:

  • PdfViewer.asset: 打开Flutter资源中的PDF文件。
  • PdfViewer.file: 从文件系统打开PDF文件(macOS可能被App Sandbox阻止)。
  • PdfViewer.uri: 从URI(如 https://... 或相对路径)打开PDF文件(Web和macOS可能被CORS或App Sandbox阻止)。

处理受密码保护的PDF文件

PdfViewer.asset(
  'assets/test.pdf',
  passwordProvider: () => 'password',
)

更多自定义和注意事项,请参阅使用PasswordProvider处理受密码保护的PDF文件

自定义功能

你可以通过配置 PdfViewerParams 来自定义行为和查看器的外观。

文本选择

启用文本选择功能:

PdfViewer.asset(
  'assets/test.pdf',
  params: PdfViewerParams(
    enableTextSelection: true,
  ),
)

更多文本选择自定义,请参阅文本选择

其他功能支持

查看器自定义

额外自定义

其他小部件

PdfDocumentViewBuilder/PdfPageView

PdfPageView 是另一个仅显示单个页面的PDF小部件。它接受 PdfDocument 和页码来显示文档中的页面。

PdfDocumentViewBuilder 用于安全地管理 PdfDocument 实例,并接受一个 builder 参数来创建子小部件。

典型用法如下:

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管理

PdfDocumentViewBuilder 可以接受来自 PdfViewerPdfDocumentRef 以安全地共享同一个 PdfDocument 实例。更多信息请参阅 example/viewer/lib/thumbnails_view.dart

低级PDF API

希望这些信息能帮助你更好地理解和使用 pdfrx 插件!如果你有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter中使用pdfrx插件来处理PDF文件的一个基本示例。pdfrx是一个用于在Flutter应用中读取和渲染PDF文件的插件。以下示例展示了如何加载和显示PDF文件。

1. 添加依赖

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

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

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

2. 导入插件

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

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

3. 使用PdfViewer组件

下面是一个完整的示例,展示了如何使用PdfViewer组件来加载和显示PDF文件:

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

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

class PdfViewerScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 假设你有一个PDF文件的URL或本地路径
    final String pdfUrl = "https://example.com/sample.pdf";  // 替换为你的PDF文件URL
    // final String pdfPath = "assets/sample.pdf";  // 如果PDF文件在本地资源中,可以使用这个路径

    return Scaffold(
      appBar: AppBar(
        title: Text('PDF Viewer'),
      ),
      body: Center(
        child: PdfViewer(
          // 如果使用URL加载PDF
          url: pdfUrl,
          // 如果使用本地路径加载PDF(确保在pubspec.yaml中声明了assets)
          // filePath: pdfPath,
          
          // 可选参数:设置PDF的初始页码
          // initialPage: 1,
          
          // 可选参数:设置PDF的缩放级别
          // scale: 1.5,
          
          // 可选参数:是否自动调整缩放以适应页面宽度
          // autoSpacing: true,
          
          // 可选参数:PDF加载完成后的回调
          // onLoadComplete: (pageCount) {
          //   print("PDF loaded successfully, total pages: $pageCount");
          // },
          
          // 可选参数:PDF加载错误时的回调
          // onError: (error) {
          //   print("Failed to load PDF: $error");
          // },
          
          // 可选参数:页面改变时的回调
          // onPageChanged: (pageNumber) {
          //   print("Page changed to: $pageNumber");
          // },
        ),
      ),
    );
  }
}

4. 加载本地PDF文件(可选)

如果你希望从本地资源加载PDF文件,需要在pubspec.yaml中声明assets:

flutter:
  assets:
    - assets/sample.pdf

然后在PdfViewer组件中使用filePath参数:

PdfViewer(
  filePath: "assets/sample.pdf",
  // 其他参数...
)

5. 运行应用

确保你的设备或模拟器已经连接,并运行flutter run来启动应用。你现在应该能够看到一个简单的PDF查看器,显示你指定的PDF文件。

这个示例展示了pdfrx插件的基本用法。根据你的需求,你可以进一步自定义和扩展这个示例。

回到顶部