2009-08-07 17 views
3

J'ai un fichier qui tire des informations de la base de données et crée du HTML dynamique relativement simple.PHP - Lire dynamiquement généré (et écho) HTML dans une chaîne?

Le fichier peut ensuite être utilisé par DOMPDF pour le transformer en document PDF. DOMDPF utilise des variables GET pour réaliser l'implémentation de base.

ob_start(); 
include_once("report.php?id=1249642977"); 

require_once("dompdf/dompdf_config.inc.php"); 

$dompdf = new DOMPDF(); 
$dompdf->load_html(ob_get_contents()); 
$dompdf->render(); 
$dompdf->stream("sample.pdf", array('Attachment'=>'0')); 

ob_end_clean(); 

Je pensais que je pourrais être en mesure d'utiliser ilke quelque chose que pour atteindre le but, mais sans surprise, il ne fonctionnait pas.

Alors, comment puis-je lire le code HTML qui est envoyé au navigateur si vous chargiez le fichier directement, dans une chaîne à utiliser avec la classe DOMPDF?

Répondre

5

Deux problèmes. D'abord, vous ne pouvez pas appeler une page PHP comme celle-ci en utilisant include_once - la chaîne de requête sera ignorée. Vous devez donner l'ID à report.php d'une autre manière. Deuxièmement, vous tamponnez correctement la sortie. Toutefois, vous passez le tampon de sortie en cours à DOMPDF, en lui disant de générer un fichier PDF dans le tampon de sortie, et en supprimant le tampon de sortie. Vous voulez probablement quelque chose comme:

$dompdf = new DOMPDF(); 
$dompdf->load_html(ob_get_clean()); 
$dompdf->render(); 
$dompdf->stream("sample.pdf", array('Attachment'=>'0')); 

Cela va obtenir le tampon de sortie actuel, le rejeter, et désactiver la mise en mémoire tampon de sortie. Le flux $ dompdf-> devrait alors fonctionner.

6

Qu'en est-il en utilisant une requête HTTP simple pour obtenir le fichier HTML et que le chargement dans l'objet dompdf de $:

<?php 
    //... 
    $dompdf->load_html(file_get_contents("http://yoursite.net/report.php?id=1249642977")); 
    //... 
    ?> 

Je ne vois pas pourquoi vous avez besoin en mémoire tampon de sortie ici ..

1

Il suffit d'utiliser file_get_contents PHP en tant que tel:

$page_html = file_get_contents("page.php?id=number"); 

puis passer $ page_html à dompdf.

Hope this helps :)

+0

file_get_contents fait exactement that- il obtient le contenu du fichier plutôt que le code HTML généré dynamiquement que le fichier produirait si elle est exécutée dans le navigateur. – bcmcfc

1

J'ai finalement décidé de modifier la page php qui produit le code HTML afin qu'il devienne une fonction renvoyant une chaîne HTML. C'est plus une solution de contournement qu'une solution.

avenir Googlers à cette page devrait savoir que dompdf vous permet d'exécuter PHP en ligne sur une page à l'aide:

<script type="text/php"> 
    //some PHP here 
</script> 
0

BlackAura a la bonne idée. Vous ajoutez le PDF généré dans le tampon de sortie, puis supprimez tout.

3

BlackAura est sur la bonne voie. File_get_contents, comme d'autres l'ont suggéré, ne passera pas le long des variables GET (ou POST). Mais vous pouvez utiliser cURL pour le faire. Le code ci-dessous devrait fonctionner:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://YOURFULLURL.COM/report.php?id=1249642977'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$my_html = curl_exec($ch); 
curl_close($ch); 

$dompdf = new DOMPDF(); 
$dompdf->load_html($my_html); 
$dompdf->render(); 
$dompdf->stream("sample.pdf", array('Attachment'=>'0')); 

Hope that helps.

-Kevin

Questions connexes