dompdf: sjablonen & variabelen $ _SESSION

ik vroeg me af of deze opzet zou werken. Ik moet een batch PDF uit een reeks variabelen halen. Ik daag de $ _SESSION in via een formulier (duh ...). het idee is om het sjabloonbestand door te geven aan de dompdf-engine en de sjabloon te laten vullen van de $ _SESSION en vervolgens naar PDF. het lijkt mij dat wanneer het $ -sjabloon wordt geladen, dat zou moeten doen, ja?

hier is de basiscode:

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

en dit is het template.php bestand (eigenlijk ... wil je niet alle 16 pagina's ...)

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

dus mijn idee is dat de template.php de variabelen direct uit de $ _ SESSION -array haalt zonder enige tussenkomst, er als volgt uitzien:

GROTE TITEL

zou het niet leuk zijn, HandsomeLulu?

Ik vermoed dat het nut van de vraag is: worden de variabelen $ _ SESSION geëvalueerd wanneer PHP-bestanden worden geladen, maar niet gerenderd?

WR!

0
ik vond iets dat een deel van mijn vraag kon beantwoorden in this post (Wrikken's antwoord). ik ben nu op een vlucht of ik zou een systeem hebben waarop ik dit kan testen ...: P
toegevoegd de auteur WhiteRau, de bron

2 antwoord

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

Om te doen wat u wilt, moet u de uitvoer van buffering en onder .

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
toegevoegd
HTML-code wordt uitgevoerd (dat is allemaal vóór% PDF-1.3)
toegevoegd de auteur Fabien Ménager, de bron
De gebruikelijke verdachte voor dit soort problemen is output buffering waardoor PHP waarschuwingen/meldingen bovenaan het PDF-bestand worden geplaatst. U kunt dit controleren door de PDF in een teksteditor te openen.
toegevoegd de auteur BrianS, de bron
oke. we koken nu met gas! is helemaal logisch! ik was op zoek naar outputbuffering; opgewonden was ik op de goede weg! : D Ik krijg een foutmelding wanneer het PDF-bestand probeert te openen, maar ik denk dat ik in mijn onderzoek het antwoord heb gezien: "... kon niet openen omdat het ofwel geen ondersteund bestandstype is of omdat het bestand beschadigd zijn. " ik denk dat we er bijna allemaal zijn! Heel erg bedankt! : D
toegevoegd de auteur WhiteRau, de bron
ik heb me vergist. het was een andere fout. ik blijf kijken tenzij jullie dit soort fouten eerder hebben gezien ...
toegevoegd de auteur WhiteRau, de bron
Ik zou graag! ...hoe doe ik dat? : D Ik bekeek de PDF in een teksteditor en ik zag daar geen fouten. Let op, ik weet niet zeker waar ik naar op zoek ben. u kunt DL de uitgevoerde PDF hier
toegevoegd de auteur WhiteRau, de bron
rotzooi: verkeerde link. ga in plaats daarvan naar naar deze link . Sorry daarvoor. : P
toegevoegd de auteur WhiteRau, de bron
ik dacht dat dat het geval zou zijn, maar toen ik dat probeerde te scheuren, ging het gewoon niet open. "bestand is beschadigd of beschadigd en kan niet worden gerepareerd". dit irriteert me helemaal. :( hoe verwijder ik de HTML uit de uitvoerbufferdump? is dat niet het hele punt om de uitvoerbuffer te gebruiken? om de PHP te ontleden en deze vervolgens naar de dompdf? argh!
toegevoegd de auteur WhiteRau, de bron
@ Fabien: je hebt gemist (net als ik) dat het bestand ook niet goed wordt afgesloten. alle 'footer'-gegevens zijn verdwenen. de stream sluit niet en geen #EOF. vergelijken met een PDF van de demo01.php en je zult zien wat ik bedoel. ik denk dat ik dit naar ergens anders moet verplaatsen. Het lijkt er niet op dat iemand hier echt kan helpen. : P
toegevoegd de auteur WhiteRau, de bron

om de een of andere reden wordt de code OP de pagina die de functie ALSO oproept in het bestand gedumpt. dit werd vóór de kop geplaatst. ik begrijp nu waarom: ik was niet refererend aan een externe pagina, ik was importeren en een externe pagina. weet niet waarom dat niet klikte.

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.

voor degenen die, net als ik, in een misma van 'alles behalve het antwoord' aan het plunderen zijn, hier is de blote bottencode die het werk deed:

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>

Merk ook op dat het externe CSS-bestand prima leesbaar is. zodat je de structuur en stijl nog steeds gescheiden kunt houden. ook kunnen de $ _SESSION-variabelen overal worden ingesteld, uiteraard stel ik ze hier gewoon in om te blijven testen.

Ik hoop dat dit nuttig is voor degenen die aan de slag gaan met deze geweldige klas. als je op zoek bent naar het gebruik van PDF-bestanden om aan de slag te gaan, schopt dit zoveel kont, dat het een trigger en een grip op het moet hebben. :)

bedankt aan iedereen die heeft gereageerd. je hebt me op de plaats gebracht die ik moest zijn. :)

deze site ROCKS.

WR!

1
toegevoegd