在joomla组件中使用dompdf具有不正确的内容

时间:2016-05-17 07:38:58

标签: joomla dompdf

我在Joomla 3中创建了一个新的组件,它将使用dompdf在屏幕上生成PDF的某些信息。

我已经在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-&gt; 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吗?

干杯

1 个答案:

答案 0 :(得分:0)

我已将此问题追溯到dompdf-&gt; stream()的工作方式。 如果我使用dompdf-&gt; output()创建物理pdf文件,那么pdf文件是100%正确的。 如果我之后使用dompdf-&gt; 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();

在上面的示例中,test.pdf文件100%正确,但下载的文件(由dompdf-&gt; stream()命令创建)实际上已损坏并包含来自joomla的所有chrome。 我关闭了这个问题,并将在流和输出之间提出一个新问题。