如何在Firebase Cloud Functions中配置并运行Dart脚本实现PDF自动生成
在Firebase Cloud Functions中运行Dart脚本生成PDF(复用Flutter PDF包)
1. 搭建Dart云函数环境
Firebase Cloud Functions已支持Dart运行时,先完成基础环境配置:
- 确保安装最新版Firebase CLI:
npm install -g firebase-tools - 登录Firebase账号:
firebase login - 初始化Dart云函数:执行
firebase init functions,在语言选择中选Dart,完成项目关联与目录初始化。
2. 抽离复用PDF生成逻辑
把原Flutter项目中的PDF生成代码剥离为纯Dart模块(移除所有Flutter UI依赖,比如flutter/material.dart),单独存为pdf_generator.dart文件:
// pdf_generator.dart import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pw; Future<List<int>> generateMonthlyPdf() async { final pdf = pw.Document(); // 直接复用你原项目中的PDF布局逻辑 pdf.addPage( pw.Page( build: (pw.Context context) { return pw.Column( crossAxisAlignment: pw.CrossAxisAlignment.start, children: [ pw.Text('月度报表', style: pw.TextStyle(fontSize: 28, fontWeight: pw.FontWeight.bold)), pw.SizedBox(height: 20), pw.Text('生成时间:${DateTime.now().toString().split(' ')[0]}'), // 其他报表内容... ], ); }, ), ); return pdf.save(); }
3. 编写Dart云函数
在functions.dart中定义HTTP触发的云函数,调用PDF生成逻辑并将结果上传至Firebase Storage:
// functions.dart import 'package:firebase_functions/firebase_functions.dart'; import 'package:firebase_storage/firebase_storage.dart'; import 'dart:io'; import 'pdf_generator.dart'; Future<void> handleMonthlyPdfGeneration(HttpRequest request) async { try { // 生成PDF字节数据 final pdfBytes = await generateMonthlyPdf(); // 上传到Firebase Storage final storageRef = FirebaseStorage.instance.ref( 'monthly_reports/${DateTime.now().year}_${DateTime.now().month.toString().padLeft(2, '0')}.pdf' ); await storageRef.putData(pdfBytes); request.response ..statusCode = HttpStatus.ok ..write('PDF生成并上传完成'); } catch (e) { request.response ..statusCode = HttpStatus.internalServerError ..write('生成失败:$e'); } } void main() { FirebaseFunctions.instance.https.onRequest(handleMonthlyPdfGeneration); }
4. 配置依赖与部署
- 在
pubspec.yaml中添加所需依赖:
dependencies: firebase_functions: ^4.0.0 firebase_storage: ^11.0.0 pdf: ^3.10.0
- 安装依赖:
dart pub get - 部署云函数:
firebase deploy --only functions
5. 配置Google Tasks触发
- 打开Google Cloud Console,进入Cloud Tasks服务
- 创建队列后,新建任务:
- 选择HTTP请求类型,填入部署后Firebase给出的云函数URL
- 设置调度规则为每月触发(比如每月1号凌晨)
- 配置请求方法为
GET或POST(对应云函数的处理逻辑)
注意事项
- 云函数服务账号需具备Firebase Storage的写入权限,可在Google Cloud IAM中为
[项目ID]@appspot.gserviceaccount.com添加Storage Object Admin角色 - 若原PDF生成逻辑依赖Flutter资源(如本地图片),需将资源文件放到云函数目录下,用
File读取后转为pw.MemoryImage传入pdf包组件
内容的提问来源于stack exchange,提问作者Saeed isa
相关产品推荐
相关产品推荐

