2016-05-17 38 views
0

我在Joomla 3中創建一個新的組件,它將使用dompdf在屏幕上生成特定信息的PDF。在joomla組件中使用dompdf有不正確的內容

我已經測試了joomla以外的我的dompdf代碼,並且一切正常,但是一旦我將代碼帶入組件中,它就會出錯。

Dompdf生成PDF,但它無效並且無法正常打開。

我已經在文本編輯器中打開PDF,問題是dompdf生成的pdf已經獲得了所有Joomla頭文件(樣式表,jaavascript等),即使我只是將一些專用HTML傳遞給它。

有什麼我失蹤?代碼如下所示

$fhtml = '<html><head><title>Sales Order</title>'; 
$fhtml .= PHP_EOL . '<link type="text/css" href="test.css" rel="stylesheet" /></head><body>'; 
$fhtml .= PHP_EOL . '<center><img src="elite.jpg" /><img src="premierdealer.jpg" /><img src="logo.jpg" /><img src="traveller.jpg" /><img src="childrens.jpg" /><img src="westfield.jpg" /></center>'; 
$fhtml .= PHP_EOL . '<h2>Header</h2><p>Para</p>'; 
$fhtml .= PHP_EOL . '</body></html>'; 

require_once 'dompdf/autoload.inc.php'; 
use Dompdf\Dompdf; 
$dompdf = new Dompdf(); 
$dompdf->setPaper('A4', 'portrait'); 
$dompdf->loadHtml($fhtml); 
$dompdf->render(); 
$dompdf->stream('salesorder'); 

從上面的代碼可以看出,我將html傳遞給dompdf-> loadhtml。 PDF文件生成,但是當我在文本編輯器(它被損壞的PDF,所以我不能用pdf閱讀器打開它)我覺得開德PDF中的PDF中的以下內容:

<!DOCTYPE html> 
<html lang="en-gb" dir="ltr"> 
<head> 
<meta name="viewport" content="width=device-width, initial-scale=1.0"> 
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
<meta charset="utf-8" /> 
<base href="http://test1.questleisure.local/index.php/portal/portal-home" /> 
<meta name="keywords" content="quest leisure air awnings caravan awnings camping caravan air tents outdoor funriture" /> 
<meta name="rights" content="Quest Leisure" /> 
<meta name="description" content="Quest Leisure Public Website" /> 
<meta name="generator" content="Joomla! - Open Source Content Management" /> 
<title>Portal Home</title> 
<link rel="stylesheet" href="/media/com_questportal/css/default.css" /> 
<link rel="stylesheet" href="/plugins/system/rokbox/assets/styles/rokbox.css" /> 
<link rel="stylesheet" href="/media/gantry5/assets/css/font-awesome.min.css?57344a42" /> 
<link rel="stylesheet" href="/media/gantry5/engines/nucleus/css-compiled/nucleus.css?57344a42" /> 
<link rel="stylesheet" href="/templates/rt_galatea/custom/css-compiled/galatea_11.css" /> 
<link rel="stylesheet" href="/media/gantry5/assets/css/bootstrap-gantry.css?57344a42" /> 
<link rel="stylesheet" href="/media/gantry5/engines/nucleus/css-compiled/joomla.css?57344a42" /> 
<link rel="stylesheet" href="/media/jui/css/icomoon.css" /> 
<link rel="stylesheet" href="/templates/rt_galatea/custom/css-compiled/galatea-joomla_11.css" /> 
<link rel="stylesheet" href="/templates/rt_galatea/custom/css-compiled/custom_11.css" /> 
<link rel="stylesheet" href="/templates/rt_galatea/css/demo.css" /> 
<link rel="stylesheet" href="/templates/rt_galatea/css/animate.css" /> 
<script src="/media/system/js/mootools-core.js"></script> 
<script src="/media/system/js/core.js"></script> 
<script src="/media/system/js/mootools-more.js"></script> 
<script src="/plugins/system/rokbox/assets/js/rokbox.js"></script> 
<script src="/templates/rt_galatea/js/jui/jquery.min.js"></script> 
<script src="/media/jui/js/jquery-noconflict.js"></script> 
<script src="/media/jui/js/jquery-migrate.min.js"></script> 
<script src="/media/jui/js/bootstrap.min.js"></script> 
<body class="gantry g-galatea-style site com_questportal view-questportal no-layout task-display dir-ltr itemid-229 outline-11 g-offcanvas-left g-default g-style-preset1"> 
    <div id="g-offsidebar-overlay"></div> 
    <div id="g-offcanvas" data-g-offcanvas-swipe="1" data-g-offcanvas-css3="1"> 
<div   
    class="g 

所以DOMPDF是從緩衝區中獲取所有基本的Joomla頭文件,即使我只是通過它的某些HTML。 有什麼我必須做的,以阻止使用joomla的所有標題dompdf,並只使用HTML我傳遞它?

乾杯

+0

我做了更多的測試,發現問題是dompdf-> stream命令。如果我使用dompdf-> output()命令將PDf輸出到物理文件,那麼物理文件是正確的,並且沒有所有額外的頭信息。只要我使用流,它會將所有額外的頭信息放入 –

+0

可能重複的[dompdf->流不工作在joomla](http://stackoverflow.com/questions/37277813/dompdf-stream-not-working-in-joomla) – BrianS

回答

0

我已經追查這個問題回到了那個dompdf-方式>流()的作品。 如果我使用dompdf-> output()創建一個物理pdf文件,那麼pdf文件是100%正確的。 如果我之後使用dompdf-> stream(),則生成的PDF文件包含所有的joomla頭文件和樣式表等,其中會導致該問題。示出的差的代碼是下面:

$fhtml = '<html><head><title>Sales Order</title>'; 
$fhtml .= PHP_EOL . '<link type="text/css" href="dompdf.css" rel="stylesheet" /></head><body>'; 
$fhtml .= PHP_EOL . '<center><img src="elite.jpg" /><img src="premierdealer.jpg" /><img src="logo.jpg" /><img src="traveller.jpg" /><img src="childrens.jpg" /><img src="westfield.jpg" /></center>'; 
$fhtml .= PHP_EOL . 'Test content'; 
$fhtml .= PHP_EOL . '</body></html>'; 

require_once JPATH_COMPONENT . '/libraries/dompdf/autoload.inc.php'; 
use Dompdf\Dompdf; 
$dompdf = new Dompdf(); 
$dompdf->setPaper('A4', 'portrait'); 
$dompdf->setBasePath(JPATH_COMPONENT . '/libraries/'); 
$dompdf->loadHtml($fhtml); 
$dompdf->render(); 
$dompdf->output(); 

$file_to_save = JPATH_COMPONENT . '/temp/test.pdf'; 
file_put_contents($file_to_save, $dompdf->output()); 

$dompdf->stream(); 

在文件檢驗.pdf上面的例子是100%正確,但下載的文件(由dompdf->流()命令創建)實際上是腐敗和包含所有來自joomla的鉻。 我正在關閉這個問題,並將流與輸出之間的問題提出一個新的問題。

+0

僅供參考,dompdf目前不支持調用這兩個'$ dompdf-> output()'和'$ dompdf-> stream()'來自同一個實例。 – BrianS