0

我想知道这个设置是否可行。我必须从我通过表单推入 $_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?

我想问题的关键是:$_SESSION加载 PHP 文件但未渲染时是否会评估变量?

写!

4

2 回答 2

2

file_get_contents不评估 PHP 文件,它只是获取其内容(文件在硬盘驱动器中)。

要做你想做的事,你需要使用输出缓冲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
于 2011-10-27T19:28:14.000 回答
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 文件,这会很麻烦,它应该有一个触发器和一个抓地力。:)

感谢所有评论的人。你让我在我需要的地方。:)

这个网站摇滚。

写!

于 2011-10-28T21:57:33.423 回答