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

如何将Gotenberg Bundle生成的PDF附加到Symfony邮件?

解决Symfony+Gotenberg生成PDF并作为邮件附件的问题

错误原因

你调用->stream()后得到的是Symfony\Component\HttpFoundation\StreamedResponse对象,而非stream_get_contents()需要的资源类型,这就是报错的根源。stream()方法用于直接向客户端输出PDF响应,不适合获取内存中的PDF内容作为附件。

解决方案

方法一:直接获取PDF内容字符串

修改PDF生成代码,用getContent()获取PDF的字符串内容,直接传入DataPart即可:

// 生成PDF并获取内容字符串
$pdfContent = $gotenbergPdf
    ->html()
    ->content('rechnungen/pdf/rechnung.pdf.html.twig', [])
    ->paperStandardSize(PaperSize::A4)
    ->generate()
    ->getContent();

// 创建邮件并添加附件
$email = (new Email())
    ->from('from@mail.de')
    ->to('to@mail.de')
    ->subject('subject')
    ->text('text')
    ->addPart(new DataPart($pdfContent, 'Contract.pdf', 'application/pdf'));

$this->mailer->send($email);

方法二:获取PDF资源流

如果需要基于资源流操作,可通过getStream()获取StreamInterface,再转换为资源:

// 生成PDF并获取StreamInterface
$pdfStream = $gotenbergPdf
    ->html()
    ->content('rechnungen/pdf/rechnung.pdf.html.twig', [])
    ->paperStandardSize(PaperSize::A4)
    ->generate()
    ->getStream();

// 将StreamInterface转换为PHP资源
$resource = $pdfStream->detach();

// 创建邮件附件
$email = (new Email())
    ->from('from@mail.de')
    ->to('to@mail.de')
    ->subject('subject')
    ->text('text')
    ->addPart(new DataPart(new File($resource), 'Contract.pdf', 'application/pdf'));

$this->mailer->send($email);

内容的提问来源于stack exchange,提问作者Niels Hetzke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:39:54