dompdf:テンプレートと$ _SESSION変数

私はこの設定がうまくいくかどうか疑問に思っていました。私は一束の変数からPDFのバッチを作り出す必要があります。私はフォームを介して$ _SESSIONに押し込んでいます。テンプレートファイルをdompdfエンジンに渡し、$ _SESSIONからPDFにテンプレートを移入させることが考えられます。 $テンプレートが読み込まれると、そうするべきですよね?

ここに基本コードがあります:

<?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>
    

<?php echo $_SESSION['someTitle'] ?>

    

wouldn't it be nice, <?php echo $_SESSION['someName'] ?>

  </body>
</html>

私の考えは、template.phpが以下のような介入なしに $ _ SESSION 配列から変数を取り出すことです:

大きなタイトル

ハンソメルル?

PHPファイルがロードされてもレンダリングされないときに $ _ SESSION 変数が評価されるのでしょうか?

WR!

0
私はこの投稿(Wrikkenの答え)。私は今飛行している、あるいは私はこれをテストできるシステムを持っているだろう...:P
追加された 著者 WhiteRau,

2 答え

file_get_contents does not evaluate the PHP file, it simply gets its contents (the file as it is in the hard drive).

あなたが望むことをするには、バッファリング>インクルード

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
2
追加された
HTMLコードが出力されます(すべて%PDF-1.3より前)
追加された 著者 Fabien Ménager,
この種の問題の通常の疑いは出力バッファリングでPHP警告/通知をPDFファイルの先頭に置くことです。これを確認するには、テキストエディタでPDFを開きます。
追加された 著者 BrianS,
はい。今私たちはガスで調理しています!全く意味をなさない!私は出力バッファリングを検討していました。私はうまくいきました! PDFファイルを開こうとするとエラーが表示されますが、私の研究ではその答えを見たと思います。「サポートされているファイルタイプでないか、ファイルに傷ついた。 "私たちはほぼすべてそこにいると思います!本当にありがとう! :D
追加された 著者 WhiteRau,
私は間違っていた。それは違う誤りだった。あなたがこの種のエラーを見たことがない限り、私は見続けるでしょう...
追加された 著者 WhiteRau,
是非! ...それ、どうやったら出来るの? :私はテキストエディタでPDFを見て、私はそこにエラーを見た。気にして、私は何を探しているのか分かりません。出力されたPDFをダウンロードできます。ここ
追加された 著者 WhiteRau,
クラップ:間違ったリンク。代わりにこのリンクにアクセスしてください。申し訳ありません。 :P
追加された 著者 WhiteRau,
私はそれが事実かもしれないと思ったが、私はそれを裂くことを試みたとき、それはちょうど開かなかった。 "ファイルが破損または破損して修復できません"。これは私から地獄を盗んでいる。どのように出力バッファのダンプからHTMLをきれいにするのですか?出力バッファを使うことの全体的なポイントではないのですか?PHPを解析してからdompdfに送りますか?
追加された 著者 WhiteRau,
@ファビアン:あなたは、ファイルが適切にラップアップされていないことを(私はしなかった)逃した。すべての「フッター」データはなくなりました。ストリームが閉じず、#EOFもありません。 demo01.phpのPDFと比較すると、何を意味するのかがわかります。私はこれを他のどこかに移すべきだと思う。ここの誰もが本当に助けることができないようです。 :P
追加された 著者 WhiteRau,

なんらかの理由で、関数ALSOを呼び出すページ上のコードがファイルにダンプされます。これはヘッダーの前に置かれました。なぜ私は外部ページを参照していなかったのですが、私はインポートしていました。なぜクリックしなかったのか分かりません。

anyway. as soon as i got rid of the page's extra stuff, it worked just fine. in retrospect, what dompdf needed to state was quite simply that NO HTML of ANY kind (echo, print, &c.) can be on the page that calls the function. at least that what it appears to require at this level of my knowledge.

私と同じように、「答え以外のすべて」という誤解の中でうそをついている人たちのために、ここでは仕事をした裸の骨のコードがあります:

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);
?>

and this is the template.php:

    <!DOCTYPE HTML>
    <html>
    <meta>
    <head>
      <meta charset="utf-8">
      <link href="thisPage.css" type="text/css" rel="stylesheet">
    </head>
    <body>
      

<?php echo $_SESSION['someTitle'] ?>

      
wouldn't it be nice, <?php echo $_SESSION['someName'] ?> </body> </html>

また、外部のCSSファイルがうまく読み込まれることにも注意してください。あなたはまだ構造とスタイルを分けておくことができます。また、$ _SESSION変数はどこにでも設定することができます。明らかに、ここではテストを容易にするために変数を設定しています。

これは、この素晴らしいクラスを使い始めた人には便利だと思います。もしあなたが起立してPDFファイルをクランキングすることを目指しているのであれば、これは非常に尻を蹴る、それはトリガーとグリップを持っているはずです。 :)

コメントした皆様に感謝します。あなたは私が必要とする場所に私を入れた。 :)

このサイトのロック。

WR!

1
追加された