Flutter PDF合并插件pdf_merger的使用
Flutter PDF合并插件pdf_merger的使用
pdf_merger
是一个用于在Flutter应用中合并PDF文件的新插件。它支持Android和iOS平台。在调用此插件之前,请确保您已允许权限并设置了文件选择器。
PDF合并方法
合并多个PDF文件
以下是合并多个PDF文件的示例:
// paths是一个包含路径的列表,例如 List<String> allSelectedFilePath.
// outputDirPath是带有文件名的输出路径,例如 /user/android/download/ABC.pdf
MergeMultiplePDFResponse response = await PdfMerger.mergeMultiplePDF(
paths: filesPath,
outputDirPath: outputDirPath
);
if(response.status == "success") {
// response.response 为输出路径(String)
// response.message 为成功消息(String)
}
从多个图片创建PDF
// paths是一个包含路径的列表,例如 List<String> allSelectedFilePath.
// outputDirPath是带有文件名的输出路径,例如 /user/android/download/ABC.pdf
// 可选参数 maxWidth 默认值为360, maxHeight 默认值为360, needImageCompressor 默认值为true.
CreatePDFFromMultipleImageResponse response = await PdfMerger.createPDFFromMultipleImage(
paths: filesPath,
outputDirPath: outputDirPath
);
if(response.status == "success") {
// response.response 为输出路径(String)
// response.message 为成功消息(String)
}
从PDF创建图片
// path 为选定文件的路径(String),例如 user/android.download/MYPDF.pdf
// outputDirPath 是带有文件名的输出路径,例如 /user/android/download/ABC.pdf
// 可选参数 maxWidth 默认值为360, maxHeight 默认值为360, createOneImage 默认值为true.
CreateImageFromPDFResponse response = await PdfMerger.createImageFromPDF(
path: singleFile,
outputDirPath: outputDirPath,
createOneImage: true
);
if(response.status == "success") {
// response.response 为输出路径(List<String>)
// response.message 为成功消息(String)
}
获取文件大小
// path 为选定文件的路径(String),例如 user/android.download/MYPDF.pdf
SizeFormPathResponse response = await PdfMerger.sizeFormPath(path: singleFile);
if(response.status == "success") {
// response.response 为文件大小
// response.message 为成功消息(String)
}
构建信息
BuildInfoResponse response = await PdfMerger.buildInfo();
Get.snackbar("Info", "App Name : " + response.appName + "\n" +
"Build Number : " + response.buildDate + "\n" +
"Build Number with Time : " + response.buildDateWithTime + "\n" +
"Package Name : " + response.packageName + "\n" +
"Version Number : " + response.versionNumber + "\n" +
"Build Number : " + response.buildNumber.toString());
示例Demo
以下是一个完整的示例代码,展示如何使用pdf_merger
插件进行PDF合并和其他操作:
import 'dart:io';
import 'package:ext_storage/ext_storage.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:open_file/open_file.dart';
import 'package:path_provider/path_provider.dart';
import 'package:pdf_merger/pdf_merger.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:get/get.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
List<PlatformFile> files;
List<String> filesPath;
String singleFile;
@override
void initState() {
super.initState();
clear();
}
@override
Widget build(BuildContext context) {
return GetMaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('PDF Merger')),
body: Center(
child: Container(
margin: EdgeInsets.all(25),
child: Column(children: [
TextButton(
style: ButtonStyle(overlayColor:
MaterialStateProperty.resolveWith<Color>(
(Set<MaterialState> states) {
if (states.contains(MaterialState.focused))
return Colors.red;
if (states.contains(MaterialState.hovered))
return Colors.green;
if (states.contains(MaterialState.pressed))
return Colors.blue;
return null; // Defer to the widget's default.
})),
child: Text("Chose File", style: TextStyle(fontSize: 14.0)),
onPressed: () {
multipleFilePicker();
},
),
SizedBox(height: 10),
TextButton(
child: Text("Merge Multiple PDF", style: TextStyle(fontSize: 14.0)),
onPressed: () {
callMethod(1);
},
),
// 其他按钮...
]),
),
),
),
);
}
clear() {
files = [];
filesPath = [];
singleFile = "";
}
multipleFilePicker() async {
bool isGranted = await checkPermission();
if (isGranted) {
try {
FilePickerResult result = await FilePicker.platform.pickFiles(allowMultiple: true);
if (result != null) {
files.addAll(result.files);
for (int i = 0; i < result.files.length; i++) {
filesPath.add(result.files[i].path);
}
}
} on Exception catch (e) {
print('never reached' + e.toString());
}
}
}
Future<void> mergeMultiplePDF(outputDirPath) async {
try {
MergeMultiplePDFResponse response = await PdfMerger.mergeMultiplePDF(
paths: filesPath, outputDirPath: outputDirPath);
Get.snackbar("Info", response.message);
if (response.status == "success") {
OpenFile.open(response.response);
}
} on PlatformException {
print('Failed to get platform version.');
}
}
Future<bool> checkPermission() async {
await PermissionHandler().requestPermissions([PermissionGroup.storage]);
PermissionStatus permission = await PermissionHandler()
.checkPermissionStatus(PermissionGroup.storage);
if (permission == PermissionStatus.neverAskAgain) {
print("Go to Settings and provide media access");
return false;
} else if (permission == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
Future<String> getFilePath(String fileStartName) async {
String path;
if (GetPlatform.isIOS) {
Directory appDocDir = await getApplicationDocumentsDirectory();
path = appDocDir.path;
} else if (GetPlatform.isAndroid) {
path = await ExtStorage.getExternalStoragePublicDirectory(
ExtStorage.DIRECTORY_DOWNLOADS);
}
return path + "/" + fileStartName + "ABCEFG5" + ".pdf";
}
}
请确保在使用前安装必要的依赖包,如 file_picker
和 permission_handler
,并在 Android 和 iOS 平台上配置相应的权限。
更多关于Flutter PDF合并插件pdf_merger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter PDF合并插件pdf_merger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用pdf_merger
插件来合并PDF文件的示例代码。
首先,确保你的Flutter项目中已经添加了pdf_merger
依赖。你可以在pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
pdf_merger: ^x.y.z # 请将x.y.z替换为最新版本号
然后,运行flutter pub get
来安装依赖。
以下是一个完整的示例,展示了如何使用pdf_merger
插件来合并两个PDF文件:
import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'dart:io';
import 'package:pdf_merger/pdf_merger.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('PDF Merger Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _mergePDFs,
child: Text('Merge PDFs'),
),
),
),
);
}
Future<void> _mergePDFs() async {
// 获取应用文档目录
final Directory appDocDir = await getApplicationDocumentsDirectory();
final String appDocPath = appDocDir.path;
// 定义两个PDF文件的路径
String pdf1Path = '$appDocPath/pdf1.pdf';
String pdf2Path = '$appDocPath/pdf2.pdf';
// 创建或复制示例PDF文件到文档目录(这里假设你有两个示例PDF文件)
// 在实际应用中,这些文件可能来自网络下载或用户选择
File pdf1File = File(pdf1Path);
File pdf2File = File(pdf2Path);
// 为了示例,这里我们创建一些简单的PDF文件(在实际应用中,这些文件应该已经存在)
// 注意:这部分代码仅用于演示,实际项目中应使用已有的PDF文件
_createSamplePDF(pdf1File);
_createSamplePDF(pdf2File);
// 等待文件写入完成
await Future.wait([pdf1File.createSync(), pdf2File.createSync()]);
// 使用pdf_merger合并PDF
final PdfMerger merger = PdfMerger();
merger.addFile(pdf1Path);
merger.addFile(pdf2Path);
// 定义输出合并后的PDF文件路径
String outputPdfPath = '$appDocPath/merged.pdf';
File outputPdfFile = File(outputPdfPath);
// 将合并后的PDF写入文件
await outputPdfFile.create(recursive: true);
await outputPdfFile.writeAsBytes(await merger.merge(), flush: true);
// 输出合并结果
print('PDFs merged successfully to $outputPdfPath');
}
// 创建一个简单的示例PDF文件(仅用于演示)
void _createSamplePDF(File file) {
// 这里只是简单地创建一个空文件作为示例PDF
// 在实际应用中,应使用有效的PDF内容
// 注意:这段代码不会创建一个有效的PDF文件,只是用于占位
}
}
注意:
_createSamplePDF
函数只是用于占位,实际上它并没有创建一个有效的PDF文件。在实际应用中,你应该使用已有的PDF文件或者从网络下载PDF文件。- 在实际应用中,处理文件路径和文件操作时,应该添加适当的错误处理逻辑。
pdf_merger
插件的具体API可能会根据版本有所不同,请参考官方文档以确保使用正确的方法和属性。
上述代码提供了一个基础框架,你可以根据实际需求进行调整和扩展。