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

Flutter中自动生成指定名称PDF并附加到邮件发送的实现问题

实现自动生成PDF并附加到邮件发送的解决方案

步骤1:添加所需依赖

在pubspec.yaml中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  printing: ^5.12.0
  pdf: ^3.10.0
  path_provider: ^2.1.1
  flutter_email_sender: ^6.0.1

执行flutter pub get安装依赖。

步骤2:修改PDF生成逻辑,自动保存到本地

将原有的PDF生成逻辑改为异步方法,自动生成带预定义名称的PDF并保存到本地存储:

import 'dart:io';
import 'package:path_provider/path_provider.dart';
import 'package:flutter_email_sender/flutter_email_sender.dart';

// 全局key用于捕获目标Widget
final GlobalKey printKey = GlobalKey();

Future<void> generateAndSendPdf() async {
  // 1. 构建PDF文档
  final doc = pw.Document();
  final image = await WidgetWraper.fromKey(
    key: printKey,
    pixelRatio: 2.0,
  );
  doc.addPage(pw.Page(
    pageFormat: PdfPageFormat.a4, // 预定义页面格式,无需手动选择
    build: (pw.Context context) {
      return pw.Center(
        child: pw.Expanded(child: pw.Image(image)),
      );
    },
  ));

  // 2. 获取本地存储路径,使用临时目录无需额外权限
  final directory = await getTemporaryDirectory();
  // 用时间戳做后缀避免文件名重复
  final fileName = "屏幕截图_${DateTime.now().millisecondsSinceEpoch}.pdf";
  final file = File('${directory.path}/$fileName');

  // 3. 将PDF写入本地文件
  await file.writeAsBytes(await doc.save());

  // 4. 触发邮件发送
  await sendEmailWithAttachment(file.path);
}

步骤3:实现邮件发送功能

编写邮件发送方法,配置收件人、主题并附加生成的PDF:

Future<void> sendEmailWithAttachment(String filePath) async {
  final Email email = Email(
    subject: '屏幕截图PDF',
    recipients: ['目标邮箱@xxx.com'], // 替换为实际收件人邮箱
    attachmentPaths: [filePath],
    isHTML: false,
  );

  try {
    await FlutterEmailSender.send(email);
  } catch (error) {
    // 可添加弹窗提示用户发送失败
    print('邮件发送失败: $error');
  }
}

注意事项

  • 权限适配:如果选择将PDF保存到外部公共存储,Android需在AndroidManifest.xml中添加存储权限(Android 13+需适配新的媒体权限),iOS无需额外权限。
  • 自定义文件名:可根据业务需求修改fileName格式,比如加入用户ID、订单号等标识。
  • 异常处理:建议在UI层添加加载状态和错误提示,提升用户体验。

内容的提问来源于stack exchange,提问作者xXNukem KS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:45:33