Flutter PDF页面提取插件extract_pdf_page的使用

Flutter PDF页面提取插件extract_pdf_page的使用

获取开始

这个项目是一个新的Flutter插件项目,用于在Android和/或iOS上实现平台特定的代码。

使用说明

本示例展示了如何使用extract_pdf_page插件来下载PDF文件并提取其中的页面。以下是完整的示例代码:

import 'dart:io';

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

import 'package:flutter/services.dart';
import 'package:extract_pdf_page/extract_pdf_page.dart';
import 'package:http/http.dart' as http;
import 'package:path_provider/path_provider.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  List<String> result = List.empty(growable: true);
  final _extractPdfPagePlugin = ExtractPdfPage();

  [@override](/user/override)
  void initState() {
    super.initState();
    downloadAndSaveFile();
    initPlatformState();
  }

  Future<void> downloadAndSaveFile() async {
    // 文件下载地址
    const String fileUrl =
        'https://han01.vstorage.vngcloud.vn/v1/AUTH_f42e8dc502e04ee5b4ff28982239069a/test-1-container/s3_5d4e1e1a-35ac-4e4d-9d36-61e5d3945688.pdf';

    // 获取临时目录
    final Directory tempDir = await getTemporaryDirectory();
    final String filePath = '${tempDir.path}/conversation-game.pdf';

    try {
      // 下载文件
      final http.Response response = await http.get(Uri.parse(fileUrl));

      if (response.statusCode == 200) {
        // 将文件保存到临时目录
        final File file = File(filePath);
        await file.writeAsBytes(response.bodyBytes);
        print('文件已保存至: $filePath');
        try {
          // 提取PDF文件的第一页
          final listResult =
              await _extractPdfPagePlugin.extractPagesPDF(filePath, "123");
          print('成功提取的页数: ${listResult.length}');
        } on PlatformException {
          print('提取页数失败:');
          result = List.empty();
        }
      } else {
        print('文件下载失败: ${response.statusCode}');
      }
    } catch (e) {
      print('错误: $e');
    }
  }

  Future<void> initPlatformState() async {
    List<String> listResult;
    try {
      // 初始化插件状态
      listResult =
          await _extractPdfPagePlugin.extractPagesPDF("inputUrl", "123");
    } on PlatformException {
      result = List.empty();
    }

    if (!mounted) return;

    setState(() {
      // result.addAll(listResult);
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text('运行结果: ${result.length}\n'),
        ),
      ),
    );
  }
}

代码解释

  1. 导入必要的库

    import 'dart:io';
    import 'package:flutter/material.dart';
    import 'dart:async';
    import 'package:flutter/services.dart';
    import 'package:extract_pdf_page/extract_pdf_page.dart';
    import 'package:http/http.dart' as http;
    import 'package:path_provider/path_provider.dart';
    
  2. 定义主应用类

    void main() {
      runApp(const MyApp());
    }
    
  3. 初始化状态

    class MyApp extends StatefulWidget {
      const MyApp({super.key});
    
      [@override](/user/override)
      State<MyApp> createState() => _MyAppState();
    }
    
    class _MyAppState extends State<MyApp> {
      List<String> result = List.empty(growable: true);
      final _extractPdfPagePlugin = ExtractPdfPage();
    
      [@override](/user/override)
      void initState() {
        super.initState();
        downloadAndSaveFile();
        initPlatformState();
      }
    
  4. 下载并保存文件

    Future<void> downloadAndSaveFile() async {
      const String fileUrl = 'https://han01.vstorage.vngcloud.vn/v1/AUTH_f42e8dc502e04ee5b4ff28982239069a/test-1-container/s3_5d4e1e1a-35ac-4e4d-9d36-61e5d3945688.pdf';
    
      final Directory tempDir = await getTemporaryDirectory();
      final String filePath = '${tempDir.path}/conversation-game.pdf';
    
      try {
        final http.Response response = await http.get(Uri.parse(fileUrl));
        if (response.statusCode == 200) {
          final File file = File(filePath);
          await file.writeAsBytes(response.bodyBytes);
          print('文件已保存至: $filePath');
          try {
            final listResult = await _extractPdfPagePlugin.extractPagesPDF(filePath, "123");
            print('成功提取的页数: ${listResult.length}');
          } on PlatformException {
            print('提取页数失败:');
            result = List.empty();
          }
        } else {
          print('文件下载失败: ${response.statusCode}');
        }
      } catch (e) {
        print('错误: $e');
      }
    }
    
  5. 初始化插件状态

    Future<void> initPlatformState() async {
      List<String> listResult;
      try {
        listResult = await _extractPdfPagePlugin.extractPagesPDF("inputUrl", "123");
      } on PlatformException {
        result = List.empty();
      }
    
      if (!mounted) return;
    
      setState(() {
        // result.addAll(listResult);
      });
    }
    
  6. 构建UI

    [@override](/user/override)
    Widget build(BuildContext context) {
      return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text('插件示例应用'),
          ),
          body: Center(
            child: Text('运行结果: ${result.length}\n'),
          ),
        ),
      );
    }
    

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

1 回复

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


在Flutter中,如果你想从PDF文件中提取特定的页面,可以使用 extract_pdf_page 插件。这个插件允许你从PDF文件中提取指定的页面并保存为新的PDF文件。下面是如何使用 extract_pdf_page 插件的详细步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  extract_pdf_page: ^1.0.0  # 请检查最新版本

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

2. 导入插件

在你的Dart文件中导入 extract_pdf_page 插件:

import 'package:extract_pdf_page/extract_pdf_page.dart';

3. 使用插件提取PDF页面

你可以使用 ExtractPdfPage.extractPage 方法来提取PDF中的特定页面。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PdfExtractionPage(),
    );
  }
}

class PdfExtractionPage extends StatefulWidget {
  [@override](/user/override)
  _PdfExtractionPageState createState() => _PdfExtractionPageState();
}

class _PdfExtractionPageState extends State<PdfExtractionPage> {
  String _status = '等待提取...';

  Future<void> _extractPage() async {
    // 源PDF文件的路径
    String sourcePdfPath = 'path/to/your/source.pdf';
    // 目标PDF文件的路径
    String targetPdfPath = 'path/to/your/target.pdf';
    // 要提取的页面索引(从0开始)
    int pageIndex = 0;

    try {
      setState(() {
        _status = '正在提取...';
      });

      // 提取页面
      await ExtractPdfPage.extractPage(
        sourcePdfPath: sourcePdfPath,
        targetPdfPath: targetPdfPath,
        pageIndex: pageIndex,
      );

      setState(() {
        _status = '提取完成!';
      });
    } catch (e) {
      setState(() {
        _status = '提取失败: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('PDF页面提取'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(_status),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _extractPage,
              child: Text('提取页面'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部