如何将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
相关产品推荐
相关产品推荐

