joomla中的DOMPDF,错误处理和电子邮件

时间:2013-10-04 21:21:17

标签: php pdf phpmailer dompdf joomla3.1

我在使用dompdf的pdf附件成功附加到电子邮件时遇到了一些麻烦。 pdf文档只是说它格式错误,没有给我任何错误,但是当我直接进入链接时,pdf下载并成功加载。

电子邮件发送正常,因此我可以看到以下行可能导致问题。

$mailer->addStringAttachment(file_get_contents(JRoute::_('index.php?option=com_helloworld&view=finish&format=pdf&tmpl=component&data='.$id.'&Itemid='.$Itemid)),'Assessment.pdf');

项目ID和ID正在从以下代码加载

$app = JFactory::getApplication();
        $menu = $app->getMenu();
        $menuItem = $menu->getItems( 'link', 'index.php?option=com_helloworld&view=core', true );
        $Itemid = $menuItem->id;
$id = JRequest::getVar('assessmentId',null,'get');

这是所有实际的电子邮件创建,它确实发送附带pdf的电子邮件,但pdf格式不正确。

view.pdf.php文件也运行,它们之间的唯一区别是id加载数据而不是会话。

$data = JRequest::getVar('data',false,'get');
                if($data!==false){
                        //$data = urldecode($data);
                        //$data = json_decode($data);
                        $this->curData = array('id'=>$data,'data'=>$model->getAssessment($data));
                }else{
                        $this->curData = $session->get('core_value_assessment');
                }

3 个答案:

答案 0 :(得分:0)

domPDF在发生错误时抛出异常。您是否尝试使用try catch包装生成PDF的代码?

e.g。

<?php

require_once("dompdf_config.inc.php");

try
{
    $dompdf = new DOMPDF();
    $dompdf->load_html('YOUR PDF HTML GOES HERE');
    $dompdf->set_paper("a4", "portrait");
    $dompdf->render();

    // $dompdf->stream("dompdf_out.pdf", array("Attachment" => false));
    $fp = fopen('test.pdf', 'w');
    fwrite($fp, $dompdf->output());
    fclose($fp);
}
catch (Exception $e)
{
    // log $e->getMessage() to file to see if any error(s) are occuring
}

?>

答案 1 :(得分:0)

这可能听起来很愚蠢,但你永远不知道问题的核心是什么。

检查脚本index.php?option=com_helloworld&view=finish&format=pdf...是否在输出中没有生成任何PHP错误。

在文本编辑器中打开生成的文件,并确保它以二进制标题的排序开头,而不是像<b>Notice:</b> . . .这样的几行。

答案 2 :(得分:0)

解决方案最终成为&#34;错误&#34;或者更确切地说是错误,来自JRoute的奇怪行为。它改变了自动到&amp;,系统参数导致它尝试路由到默认视图而不是我需要的视图。解决方案是仅使用JRoute获取菜单itemid JRoute::_('index.php?Itemid=%%%')。这样它就会得到正确的路径,你可以在之后添加任何额外的参数。

这个难以诊断的原因是对JRoute的盲目信任,因为我从未在其他任何地方遇到过这种情况。因此,我从未认为这样的直接路线甚至不会出现在正确的视野中。

所以对于有这个问题或类似问题的其他人来说,诀窍在于,因为它是为电子邮件生成的,所以将该部分代码拉出来并在视图中打印以查看其生成链接的方式。 / p>