0

我在将 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');
                }
4

3 回答 3

0

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

这很难诊断的原因是对 JRoute 的盲目信任,因为我从未在其他任何地方遇到过这种情况。所以正因为如此,我从来没有想过这样一条直截了当的路线甚至不会走向正确的观点。

因此,对于遇到此问题或类似问题的任何其他人,诀窍在于,由于它是为电子邮件生成的,因此将那部分代码拉出并打印出来,以查看它是如何生成链接的。

于 2013-10-25T15:14:02.027 回答
0

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

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

在文本编辑器中打开生成的文件,并确保它以某种二进制标题开头,而不是几行之类的<b>Notice:</b> . . .

于 2013-10-23T23:25:46.503 回答
0

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

例如

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

?>
于 2013-10-23T09:27:46.227 回答