【问题标题】:Emailing PDF generated with CakePDF使用 CakePDF 生成的电子邮件 PDF
【发布时间】:2012-09-05 15:37:39
【问题描述】:

我正在使用 CakePHP 2、CakeEmail 和 CakePDF 插件

我正在尝试基于视图生成 PDF 并将其附加到电子邮件中。我已经阅读了自述文件,但仍然不明智。我必须在服务器上实际创建文件吗?

这是我目前的代码(已发送电子邮件但未发送 PDF)。

// Build PDF as attachment
        $CakePdf = new CakePdf();
        $CakePdf->template('email_view', 'default');
        //get the pdf string returned
        $pdf = $CakePdf->output();

        // SMTP Options
        $this->Email->smtpOptions = array(

            // Only to be used internally
            'port'=>'25',
            'timeout'=>'30',
            'host' => '111.111.111.111',
            'username'=>'',
            'password'=>''
         );
        $this->Email->template = 'newExpenseClaim';
        $this->Email->from    = 'Expense Tracker <james@test.com>';
        $this->Email->to      = 'james@test.com'; 
        $this->Email->subject = 'New Expense Claim Submitted - Please Review';
        $this->Email->sendAs = 'both';
        $this->Email->delivery = 'smtp';

        $this->Email->attachments = $pdf;

        // Set username & url in email
        $this->set('user', $fu['User']['name']);
        $this->set('ms', $ms);
        $this->Email->send();
        $this->set('smtp_errors', $this->Email->smtpError);

这是来自 github 的自述:

https://github.com/ceeram/CakePdf

任何帮助将不胜感激!

【问题讨论】:

  • 好的,看起来你不能这样做 - 你必须在服务器上创建文件然后附加。但是,我现在在设置视图变量时遇到了问题,因为您必须设置的视图模板路径位于我的控制器/视图文件夹之外。基本上如果我可以改变: $CakePdf->template('email_view', 'default');类似于: $CakePdf->template('MyControllerName/email_view', 'default');它会起作用 - 插件所有者说使用 $CakePdf->viewVars() 但没有提供如何传递信息的详细信息 ($CakePdf->viewVars('expenseClaim', $this->ExpenseClaim->read(null, $id) );) 不起作用...有什么想法吗?

标签: cakephp


【解决方案1】:

我正在使用 TCPDF。 我就是这样做的。使其适应您的代码:

$pdf->Content($cvData);
$content = $pdf->Output($cvFileName, 'S');
file_put_contents(TMP . $cvFileName, $content);
$this->Email->attachments = array($cvFileName=>TMP . $cvFileName);

【讨论】:

  • 感谢您的回答,但我如何通过它查看变量?它位于 MyControllerName/View 的外部
  • 尝试了您的建议并得到了这个:致命错误错误:在非对象文件上调用成员函数 Content():C:\wamp\www\expenseApp\app\Controller\ExpenseClaimsController.php线路:416
【解决方案2】:

我最终得到了这个工作,这就是我所做的:

// Build PDF
$CakePdf = new CakePdf();

// Add disbursements onto array
$merged = array_merge($expenseClaim, $expenseTotal, $approvedBy, $disbursements);

$CakePdf->viewVars($merged);
$CakePdf->template('email_view', 'default');
$filename = 'expense-claim-' .$id. '.pdf';
$CakePdf->write(APP . 'files' . DS . $filename);

基本上,我将需要传递给 PDF 视图的所有数据合并到一个数组中,然后使用 viewVars() 传递它。

希望这对某人有所帮助!

【讨论】:

  • 我发现上面需要稍微修改一下: $CakePdf->viewVars(compact('user', 'adverts', 'incomes', 'customs', 'category_name', 'deductions', '表单值')); (注意数组周围 viewVars 内的紧凑)
  • 你好 James,我在 git 看到你的帖子也是同样的问题。我无法解决我的问题,即和你一样。我想从控制器生成 PDF 并通过电子邮件发送,但我的引擎是 wkhtmltopdf,这不起作用。你能帮忙吗?
猜你喜欢
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
相关资源
最近更新 更多