2013-10-04 30 views
0

我有一些麻烦,使从dompdf的PDF附件成功地附加到电子邮件。 pdf文档只是说它的格式不正确,不会给我任何错误,但是当我直接进入链接时,pdf会下载并加载成功。joomla DOMPDF,错误处理和电子邮件

电子邮件发送罚款,所以下面的行是我可以看到,可能会导致一个问题。

$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'); 
       } 
+0

保存电子邮件中的PDF并在文本编辑器中打开它。通常一个损坏的PDF是由于PHP通知/警告被捕获到输出流中造成的。 – BrianS

+0

不敢相信我没有想过试试.....谢谢! –

+0

这是一个容易错过的人。您不一定期望在输出流中捕获到PHP通知/警告。我们一直在尝试进行更改以避免这种情况,尽管它似乎仍然是一个问题。 – BrianS

回答

0

解决方案最终成为“错误”,而不是JRoute的错误行为。它会自动更改&到&,这是系统参数导致它尝试路由到默认视图,而不是我需要的视图。解决方案是只使用JRoute来获取菜单itemid JRoute::_('index.php?Itemid=%%%')。这样它会得到正确的路径,你可以添加任何额外的参数。

这是很难诊断的原因是在JRoute盲目的信任,因为我从来没有遇到过这个地方。因此,我从来没有想过,这样一条直线前进的道路甚至不会走向正确的道路。

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

+0

对不起,_“它变化到&”_?现在,这是创新! – geomagas

+0

也许你应该'urlencode'你的要求? – Latheesan

+0

看起来像它自动改变了我:我的意思是'&'。另外JRoute“应该”自动处理urlencode。 –

0

domPDF在发生错误时抛出异常。你是否试过用try catch来包装产生PDF的代码?

例如

<?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 
} 

?> 
+0

这是使用Joomla实现的domPDF,所以在这种情况下这是行不通的。此外,这个问题只是发送一封电子邮件,而不是生成一个PDF(工作正常)。然而try/catch语句是一个好主意去尝试,我会给予好评,但我浪费了我的所有代表的赏金.... –

0

这听起来很愚蠢,但你永远不知道什么是事情的核心。

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

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

+0

是,尝试这样做,它并没有结束既然如此。 –