2013-10-04 50 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

是,嘗試這樣做,它並沒有結束既然如此。 –