Flutter自定义保存PDF插件custom_save_pdf的使用
Flutter自定义保存PDF插件custom_save_pdf的使用
custom_save_pdf
Flutter 插件允许你在手机存储的自定义文件夹中保存PDF文件。
更改为阿拉伯语版本
开发者

Nasr Al-Rahbi [@abom_me](/user/abom_me)
找我
custom_save_pdf: 使用官方的 open_document
、path_provider
和 permission_handler
包。
要求
Android | iOS | |
---|---|---|
支持 | SDK 29+ | iOS 11+ |
安装
在 pubspec.yaml
文件中添加依赖:
dependencies:
custom_save_pdf: <last_version>
示例代码
import 'package:custom_save_pdf/custom_save_pdf.dart';
CustomPdfFolder.save(
byteList: data, // PDF 文件的字节数据
nameOfFolder: 'nasr', // 存储文件夹名称
openPDF: true, // 保存后是否自动打开PDF
onSaved: (v) {}, // 保存成功后的回调函数
onError: (error, code) { // 发生错误时的回调函数
print(error);
print(code);
},
);
开始使用
Android
-
确保在
android/app/build.gradle
中设置正确的minSdkVersion
:android { defaultConfig { minSdkVersion 29 } }
-
设置正确的
compileSdkVersion
:android { compileSdkVersion 33 ... }
-
在
android/app/build.gradle
中添加以下权限:<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:requestLegacyExternalStorage="true" ... > <provider android:name="androidx.core.content.FileProvider" android:authorities="${applicationId}.fileprovider" android:exported="false" android:grantUriPermissions="true"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/provider_paths" /> </provider> </application>
-
创建
provider_paths.xml
文件:<?xml version="1.0" encoding="utf-8"?> <paths> <external-path name="external_files" path="." /> </paths>
iOS
-
在
info.plist
中添加以下代码:<key>LSSupportsOpeningDocumentsInPlace</key> <true/>
-
注意:在iOS上,你的文件夹将在应用文件夹内创建。
示例路径:
App_name/your_folder/your_pdf
参数说明
/// ---- EN ----
/// ### 添加 PDF 包的 Uint8List
/// #### [PDF Package](https://pub.dev/packages/pdf)
/// #### 你可以在文档中找到示例
/// ---- AR ----
/// ### 添加 PDF 包的 Uint8List
/// #### [PDF Package](https://pub.dev/packages/pdf)
/// #### 你可以在文档中找到示例
final Uint8List byteList;
/// ---- EN ----
///
/// ### 写入文件夹名称,PDF 文件将保存在此文件夹中
/// ---- AR ----
///
/// ### 写入文件夹名称,PDF 文件将保存在此文件夹中
final String nameOfFolder;
/// ---- EN ----
/// ### 写入文件名,例如:
/// #### (-- example.pdf --)
/// #### 不要包含 (.pdf)
/// #### 你可以保持为空并生成随机名称
/// ---- AR ----
/// ### 写入文件名,例如:
/// #### (-- example.pdf --)
/// #### 不要包含 (.pdf)
/// #### 你可以保持为空并生成随机名称
final String? fileName;
/// ---- EN ----
/// ### 这里可以获取PDF文件的路径作为字符串
/// ---- AR ----
/// ### 这里可以获取PDF文件的路径作为字符串
final void Function(String filePath)? onSaved;
/// ---- EN ----
/// ### 如果发生任何错误,这里会显示错误文本和错误代码,并且你可以添加一个处理错误的函数
/// ---- AR ----
/// ### 如果发生任何错误,这里会显示错误文本和错误代码,并且你可以添加一个处理错误的函数
final void Function(String error, int errorCode)? onError;
/// ---- EN ----
/// ### 保持为 true 以在保存后打开PDF文件,或者 false 仅保存文件
/// #### 默认为 true
/// ---- AR ----
/// ### 保持为 true 以在保存后打开PDF文件,或者 false 仅保存文件
/// #### 默认为 true
bool? openPDF = true;
示例代码
import 'package:custom_save_pdf/pdf_save/pdf_save.dart';
import 'package:flutter/material.dart';
import 'invoice_service.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomePage(),
);
}
}
class HomePage extends StatefulWidget {
HomePage({Key? key}) : super(key: key);
[@override](/user/override)
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
TextEditingController text = TextEditingController();
final PdfInvoiceService service = PdfInvoiceService();
[@override](/user/override)
void initState() {
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(
width: double.infinity,
child: TextField(
controller: text,
),
),
SizedBox(
height: 50,
),
ElevatedButton(
onPressed: () async {
final data = await service.createHelloWorld(text.text);
CustomPdfFolder.save(
byteList: data,
nameOfFolder: 'folderName',
openPDF: true,
onSaved: (v) {},
onError: (error, code) {
print(error);
print(code);
},
);
},
child: const Text("Create PDF"),
),
],
),
),
);
}
}
更多关于Flutter自定义保存PDF插件custom_save_pdf的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复