2014-06-17 29 views
3

我刚刚升级到6.1 DOMPDF,现在当我做这样的事情DOMPDF回声()不输出文本

<?php echo 'hello'; ?> 

我的文档里面,“你好”不上的PDF显示出来。根据该文件,我应该被允许使用

<?php ?> 

在我的HTML渲染文本...这是我的HTML,当我使这一切,显示为“测试”的PDF文档

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Untitled Document</title> 
</head> 
<body> 
Test <?php echo 'Hello'; ?> 
</body> 
</html> 

有没有想法?我不确定我做错了什么。

谢谢

回答

4

尝试使用PHP代码生成的HTML(所以HTML里面的PHP而不是其他方式) 看看它是否工作

<?php 
require_once("dompdf_config.inc.php"); 

$string = 'hello'; 

$html = 
    '<html><body>'. 
    '<p>Test '.$string.'</p>'. 
    '</body></html>'; 

$dompdf = new DOMPDF(); 
$dompdf->load_html($html); 
$dompdf->render(); 
$dompdf->stream("sample.pdf"); 

?> 
+0

据我不应该需要做这个的文档。这也不实际,因为我正在渲染数百个包含动态变量的表单。我将不得不重写我的表格处理器的整个架构。我认为我必须在这里忽略一件简单的事情...... –

+0

你可以显示你用来生成pdf的php代码吗? –

+0

Sam我正在使用你的代码,除了load_html_file(),因为我已经有数百个加载和按需呈现的html文档。所以要改变它使用load_html()将意味着...重写所有内容。我还使用WYSIWYG编辑器来编辑/创建表单,并以您建议的方式更改代码,这意味着我不能再这样做。对于数百个格式复杂的表单,这不是一个好的解决方案... –

2

在之前0.6.1 DOMPDF版本当DOMPDF_ENABLE_PHP设置为true时,将会使用PHP的eval()函数对提供给dompdf的文档进行预处理。出于这个原因,在以前的版本中,您可以将echo的某些内容放入HTML中。虽然这在某些情况下可以方便地生成文档,但也会暴露安全漏洞。

随着dompdf 0.6.1 PHP预处理已从dompdf中删除。文档需要更新以反映这一变化。您应该使用Sam Battat概述的技术。

(如果你需要额外的建议,关于您的工作流程羊肚菌细节提供给我们。)

+0

我应该注意到,启用PHP支持仍然是一个安全问题,因为您允许无限制的PHP执行(除限制Web服务器上的限制外不受限制)。所以我们强烈建议您为用户生成的内容禁用此功能。 – BrianS

+0

嗨,大家好,这里是更多信息。我有数百个存储为html/php文件的表单。我使用load_html_file()来加载表单并填写一些变量,如日期或订单号。所以要改变这将意味着重新编写整个系统的工作方式......除非你能提出一种方法来处理我当前的html文件和新版本的dompdf?谢谢 –

+1

所以你使用这个类,并调用'load_html_file()'?如何重写它以使用'load_html()',例如'ob_start(); require_once($文件名); $ html = ob_get_clean(); ... $ dompdf-> load_html($ html);'?唯一的潜在问题是相对资源(CSS,图像)引用。 – BrianS