You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 03:16:09