dompdf:模板和 $_SESSION 变量
Posted
技术标签:
【中文标题】dompdf:模板和 $_SESSION 变量【英文标题】:dompdf: templates & $_SESSION variables 【发布时间】:2011-10-27 17:59:04 【问题描述】:我想知道这个设置是否可行。我必须从我通过表单推送到 $_SESSION 的一堆变量中生成一批 PDF(duh ...)。想法是将模板文件传递给 dompdf 引擎,然后将模板从 $_SESSION 填充到 PDF。在我看来,当 $template 被加载时,它应该这样做,是吗?
这是基本代码:
<?php
function renderToPDF($theTemplate = "template.php") // this is just to show the value
require_once("dompdf/dompdf_config.inc.php");
$content = file_get_contents($theTemplate);
if ($content !== false)
$dompdf = new DOMPDF();
$dompdf->load_html($content);
$dompdf->render();
$dompdf->stream("kapow_ItWorks.pdf");
?>
这是template.php
文件(基本上...你不想要所有 16 页...)
<html>
<meta>
<head>
<link href="thisPage.css" type="text/css" rel="stylesheet">
</head>
<body>
<h1><?php echo $_SESSION['someTitle'] ?></h1>
<h2>wouldn't it be nice, <?php echo $_SESSION['someName'] ?></h2>
</body>
</html>
所以我的想法是 template.php 将直接从 $_SESSION
数组中提取变量而无需任何干预,如下所示:
大标题
这不是很好吗,HandsomeLulu?
我想问题的关键是:当 PHP 文件加载但不渲染时,是否会评估 $_SESSION
变量?
写!
【问题讨论】:
我在this post(Wrikken 的回答)中发现了一些可以回答我部分问题的内容。我现在在飞机上,或者我有一个可以测试的系统......:P 【参考方案1】:file_get_contents
不评估 PHP 文件,它只是获取其内容(文件在硬盘驱动器中)。
要做你想做的,你需要使用输出buffering和include
。
ob_start(); // Start Output beffering
include $theTemplate; // include the file and evaluate it : all the code outside of <?php ?> is like doing an `echo`
$content = ob_get_clean(); // retrieve what was outputted and close the OB
【讨论】:
好的。我们现在用煤气做饭!完全有道理!我正在研究输出缓冲;很高兴我走在正确的轨道上! :D 当 PDF 文件试图打开时我得到一个错误,但我想我已经在我的研究中看到了答案:“......无法打开,因为它不是受支持的文件类型,或者因为文件有被损坏了。”我想我们几乎都在那里!非常感谢你! :D 我错了。这是一个不同的错误。除非你们以前见过这种错误,否则我会继续寻找...... 这类问题的常见嫌疑是输出缓冲导致 PHP 警告/通知被放置在 PDF 文件的顶部。您可以通过在文本编辑器中打开 PDF 来检查这一点。 我愿意! ...我怎么做? :D 我在文本编辑器中查看了 PDF,没有发现任何错误。请注意,我不确定我在寻找什么。你可以DL输出的PDF here 废话:链接错误。改用to this link。对于那个很抱歉。 :P【参考方案2】:由于某种原因,页面上调用函数的代码也被转储到文件中。这被放置在标题之前。我现在明白为什么了:我没有引用一个外部页面,我是导入和外部页面。不知道为什么没有点击。
无论如何。一旦我摆脱了页面的额外内容,它就工作得很好。回想起来,dompdf 需要说明的只是在调用该函数的页面上不能有任何类型的 HTML(回显、打印等)。至少在我目前的知识水平看来是这样的。
对于那些像我一样在“除了答案之外的一切”中挣扎的人来说,这是完成这项工作的基本代码:
buildPDF.php:
<?php
session_start();
$_SESSION['someTitle'] = "BIG FAT TITLE";
$_SESSION['someName'] = "HandomeLu";
$theTemplate = 'template.php';
function renderToPDF($templateFile)
require_once("_dox/dompdf/dompdf_config.inc.php");
ob_start();
include $templateFile;
$contents = ob_get_clean();
if ($contents !== false)
$dompdf = new DOMPDF();
$dompdf->load_html($contents);
$dompdf->render();
$dompdf->stream("kapow_ItWorks.pdf");
renderToPDF($theTemplate);
?>
这是template.php:
<!DOCTYPE HTML>
<html>
<meta>
<head>
<meta charset="utf-8">
<link href="thisPage.css" type="text/css" rel="stylesheet">
</head>
<body>
<h1><?php echo $_SESSION['someTitle'] ?></h1>
<p>wouldn't it be nice, <?php echo $_SESSION['someName'] ?></p>
</body>
</html>
还请注意,外部 CSS 文件可以正常读取。所以你仍然可以保持结构和风格分开。此外,$_SESSION 变量可以在任何地方设置,显然,我只是将它们设置在这里以保持测试容易。
希望这对那些开始学习这门 GREAT 课程的人有用。如果您想启动并运行生成 PDF 文件,这会很麻烦,它应该有一个触发器并抓住它。 :)
感谢所有评论的人。你让我在我需要的地方。 :)
这个网站摇滚。
写!
【讨论】:
以上是关于dompdf:模板和 $_SESSION 变量的主要内容,如果未能解决你的问题,请参考以下文章
PHPWord基于ThinkPHP6的Word模板处理和导出PDF文件的带源码 | 答读者问
PHP:$_SESSION - 在 $_SESSION 变量中存储临时使用的数据的优缺点是啥
Smarty模板中使用getpostrequestcookiessession变量的方法