【发布时间】:2013-08-22 08:27:26
【问题描述】:
在ZF2 中,我尝试使用DOMPDFModule 生成PDF 并使用EmailZF2 发送电子邮件。
这是我在控制器中所做的:
// fetch data
$user = $this->getEntityManager()->getRepository('Application\Entity\Users')->find(1);
$address = $this->getEntityManager()->getRepository('Application\Entity\Addresses')->find(1);
// generate PDF
$pdf = new PdfModel();
$pdf->setOption('filename', 'Renter_application-report-' . date("Y_m_d"));
$pdf->setOption('paperSize', 'a4');
$pdf->setVariables(array(
'User' => $user,
'Address' => $address,
));
到目前为止一切都很好,但是DOMPDFModule 需要我到return $pdf 来提示生成的PDF,并且DOMPDF 似乎都不起作用(例如$pdf->render() 或$pdf->output())。
我也尝试自己不成功地渲染视图,如下所示(可能是标题生成问题?)
// Render PDF
$pdfView = new ViewModel($pdf);
$pdfView->setTerminal(true)
->setTemplate('Application/index/pdf')
->setVariables(array(
'User' => $user,
'Address' => $address,
));
$pdfOutput = $this->getServiceLocator()
->get('viewrenderer')
->render($pdfView);
最后,我们的目标是获取这个呈现的 PDF 并将其保存在某个地方以便能够附加或立即附加它 - 甚至像这样简单
// Save PDF to disk
$file_to_save = '/path/to/pdf/file.pdf';
file_put_contents($file_to_save, $pdfOutput);
// Send Email
$view = new ViewModel(array(
'name' => $User->getName(),
));
$view->setTerminal(true);
$view->setTemplate('Application/view/emails/user');
$this->mailerZF2()->send(array(
'to' => $User->getEmail(),
'subject' => 'Test email'
), $view, $file_to_save);
我设法通过编辑文件\src\EmailZF2\Controller\Plugin\Mailer.php 来附加PDF:
...
public function send($data = array(), $viewModel, $pdf)
...
if($pdf && file_exists($pdf)) {
$pdf = fopen($pdf, 'r');
$MessageAttachment = new MimePart($pdf);
$MessageAttachment->type = 'application/pdf';
$MessageAttachment->filename = 'output.pdf';
$MessageAttachment->encoding = \Zend\Mime\Mime::ENCODING_BASE64;
$MessageAttachment->disposition = \Zend\Mime\Mime::DISPOSITION_ATTACHMENT;
}
...
$body_html = new MimeMessage();
$body_html->setParts(array($text, $html, $MessageAttachment));
感谢您的帮助,谢谢! :)
【问题讨论】:
标签: pdf-generation zend-framework2 dompdf