我在使用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');
}
答案 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的奇怪行为。它改变了自动到&
,系统参数导致它尝试路由到默认视图而不是我需要的视图。解决方案是仅使用JRoute获取菜单itemid JRoute::_('index.php?Itemid=%%%')
。这样它就会得到正确的路径,你可以在之后添加任何额外的参数。
这个难以诊断的原因是对JRoute的盲目信任,因为我从未在其他任何地方遇到过这种情况。因此,我从未认为这样的直接路线甚至不会出现在正确的视野中。
所以对于有这个问题或类似问题的其他人来说,诀窍在于,因为它是为电子邮件生成的,所以将该部分代码拉出来并在视图中打印以查看其生成链接的方式。 / p>