Flutter PDF合并插件pdf_combiner的使用

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

Flutter PDF合并插件pdf_combiner的使用

PDF Combiner

pub package CI Status

这是一个用于合并和操作PDF文件的Flutter插件。它支持Android和iOS平台,允许合并多个PDF文件、从图像创建PDF以及从PDF中提取图像。

功能特性

合并多个PDF

将多个PDF文件合并为一个文档。

必需参数:

  • inputPaths: 代表要合并的PDF文件路径的字符串列表。
  • outputPath: 代表保存合并后的PDF文件目录的字符串。
MergeMultiplePDFResponse response = await PdfCombiner.mergeMultiplePDFs(
  inputPaths: filesPath, 
  outputPath: outputDirPath,
);

if (response.status == PdfCombinerStatus.success) {
  // response.response 包含输出路径作为String
  // response.message 包含成功消息作为String
}

从多张图片创建PDF

将一系列图像文件转换为单个PDF文档。

必需参数:

  • inputPaths: 表示图像文件路径的字符串列表。
  • outputPath: 表示生成的PDF应保存在哪个目录下的字符串。

可选参数:

  • maxWidth(默认值:360):压缩图像的最大宽度。
  • maxHeight(默认值:360):压缩图像的最大高度。
  • needImageCompressor(默认值:true):是否压缩图像。
PdfFromMultipleImageResponse response = await PdfCombiner.createPDFFromMultipleImages(
  inputPaths: imagePaths,
  outputPath: outputPath,
  maxWidth: 480, // 可选
  maxHeight: 640, // 可选
  needImageCompressor: false, // 可选
);

if (response.status == PdfCombinerStatus.success) {
  // response.response 包含输出路径作为String
  // response.message 包含成功消息作为String
}

从PDF创建图片

从PDF文件中提取图片。

必需参数:

  • inputPath: 表示要从中提取图片的PDF文件路径的字符串。
  • outputPath: 表示提取的图片应该保存在哪个目录下的字符串。

可选参数:

  • maxWidth(默认值:360):提取图像的最大宽度。
  • maxHeight(默认值:360):提取图像的最大高度。
  • createOneImage(默认值:true):是否创建一个来自PDF的单一合成图像。
ImageFromPDFResponse response = await PdfCombiner.createImageFromPDF(
  inputPath: pdfFilePath, 
  outputPath: outputPath,
  maxWidth: 720, // 可选
  maxHeight: 1080, // 可选
  createOneImage: false, // 可选
);

if (response.status == PdfCombinerStatus.success) {
  // response.response 包含输出路径列表作为List<String>
  // response.message 包含成功消息作为String
}

使用说明

此插件与file_pickerimage_picker一起使用以选择文件。确保在调用插件之前使用permission_handler处理权限。

依赖项

支持平台

该插件支持Android和iOS平台。

注意事项

无需额外配置Android或iOS。请确保添加了必要的文件选择和权限处理依赖项到您的项目中。

示例代码

以下是使用pdf_combiner插件的一个完整示例demo:

import 'package:flutter/material.dart';
import 'package:pdf_combiner_example/views/pdf_combiner_screen.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'PDF Combiner Example',
      home: PdfCombinerScreen(),
    );
  }
}

// 假设这是PdfCombinerScreen类的一部分,用于展示如何使用插件功能
class PdfCombinerScreen extends StatefulWidget {
  const PdfCombinerScreen({super.key});

  @override
  State<PdfCombinerScreen> createState() => _PdfCombinerScreenState();
}

class _PdfCombinerScreenState extends State<PdfCombinerScreen> {
  final List<String> _filesPath = []; // 存储选择的PDF文件路径
  final String _outputDirPath = ''; // 输出目录路径

  Future<void> _mergePdfs() async {
    try {
      MergeMultiplePDFResponse response = await PdfCombiner.mergeMultiplePDFs(
        inputPaths: _filesPath, 
        outputPath: _outputDirPath,
      );

      if (response.status == PdfCombinerStatus.success) {
        // 处理成功逻辑
      } else {
        // 处理失败逻辑
      }
    } catch (e) {
      // 错误处理
    }
  }

  // 其他方法如从图片创建PDF、从PDF创建图片等可以类似实现

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('PDF Combiner Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _mergePdfs,
          child: const Text('Merge PDFs'),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用程序,其中包含一个按钮,当用户点击时会触发合并PDF的操作。你可以根据需要扩展这个例子来实现其他功能。


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

1 回复

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


当然,以下是如何在Flutter项目中使用pdf_combiner插件来合并PDF文件的示例代码。这个插件允许你将多个PDF文件合并为一个文件。首先,确保你已经在pubspec.yaml文件中添加了pdf_combiner依赖:

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

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

以下是一个完整的示例代码,展示如何使用pdf_combiner插件来合并PDF文件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PdfMergerScreen(),
    );
  }
}

class PdfMergerScreen extends StatefulWidget {
  @override
  _PdfMergerScreenState createState() => _PdfMergerScreenState();
}

class _PdfMergerScreenState extends State<PdfMergerScreen> {
  List<File> _pdfFiles = [];
  File? _combinedPdf;

  Future<void> _selectPdfFiles() async {
    List<File?> result = await FilePicker.platform.pickFiles(
      allowMultiple: true,
      type: FileType.custom,
      allowedExtensions: ['pdf'],
    );

    if (result != null) {
      setState(() {
        _pdfFiles = result.map((file) => File(file!.path!)).toList();
      });
    }
  }

  Future<void> _mergePdfFiles() async {
    if (_pdfFiles.isEmpty) {
      return;
    }

    final Directory tempDir = await getTemporaryDirectory();
    String tempPdfPath = '${tempDir.path}/combined.pdf';

    try {
      File combinedFile = await PdfCombiner.combinePdfFiles(
        pdfFiles: _pdfFiles,
        outputPath: tempPdfPath,
      );

      setState(() {
        _combinedPdf = combinedFile;
      });

      // 这里可以添加代码来打开或分享合并后的PDF文件
      // 例如使用url_launcher打开文件:
      // _openPdf(combinedFile);
    } catch (e) {
      print('Error merging PDF files: $e');
    }
  }

  // 可选的:打开PDF文件的函数(需要添加url_launcher依赖)
  // _openPdf(File file) async {
  //   final String filePath = file.path;
  //   if (await canLaunch(filePath)) {
  //     await launch(filePath);
  //   } else {
  //     throw 'Could not launch $filePath';
  //   }
  // }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('PDF Merger'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            ElevatedButton(
              onPressed: _selectPdfFiles,
              child: Text('Select PDF Files'),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _mergePdfFiles,
              child: Text('Merge PDF Files'),
            ),
            SizedBox(height: 16),
            if (_combinedPdf != null)
              Text('Combined PDF Path: ${_combinedPdf!.path}'),
          ],
        ),
      ),
    );
  }
}

注意

  1. 这个示例代码使用了file_picker插件来选择文件,你需要在pubspec.yaml中添加file_picker依赖并运行flutter pub get
  2. 合并PDF文件的操作是异步的,因此使用了Futureasync/await
  3. 合并后的PDF文件被保存在应用的临时目录中。你可以根据需要更改保存位置。
  4. 示例中提供了一个可选的_openPdf函数,用于打开合并后的PDF文件。为了使用这个函数,你需要添加url_launcher依赖。

请根据你的具体需求调整代码。希望这个示例对你有所帮助!

回到顶部