首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在joomla组件中使用dompdf的内容不正确

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

Stack Overflow用户
提问于 2016-05-17 15:38:58
回答 1查看 380关注 0票数 0

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

我已经在joomla之外测试了我的dompdf代码,一切正常,但是一旦我把代码放到我的组件中,它就会出错。

Dompdf生成PDF,但它是无效的,无法正确打开。

我已经在一个文本编辑器中打开了PDF,问题是dompdf生成的pdf包含了所有的Joomla头文件(样式表、jaavascript等)。尽管我只向它传递了一些专用的HTML。

我是不是漏掉了什么?代码如下所示

代码语言:javascript
复制
$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中发现了以下内容:

代码语言:javascript
复制
<!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,有什么需要我做的吗?

干杯

EN

回答 1

Stack Overflow用户

发布于 2016-05-17 18:44:39

我已经将这个问题追溯到dompdf->stream()的工作方式。如果我使用dompdf->output()创建一个物理pdf文件,那么这个pdf文件是100%正确的。如果我随后使用dompdf->stream(),得到的PDF文件有所有的joomla头和样式表等,这会导致问题。显示差异的代码如下:

代码语言:javascript
复制
$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->stream()命令创建)实际上是损坏的,并且包含来自joomla的所有chrome。我将结束这个问题,并提出一个新的问题,取而代之的是流和输出之间的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37269973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档