2017-12-21 3 views
0

Ich habe eine Funktion, die DOMPDF verwendet, um eine PDF-Datei zu generieren, die ich für das $ html-Argument festgelegt habe.DOMPDF funktioniert nicht, wenn HTML bereits vorhanden ist

function generate_pdf($html){ 
    //DOMPDF stuff 
} 

Dies funktioniert, aber das Problem in ich laufe, ist, dass, wenn ich diese Funktion von einer Seite aufrufen, die bereits HTML-Inhalt hat, es funktioniert nicht.

... ausfällt

<?php 
    require_once '../header.php'; //This has HTML content in it. 
    $html = '<h1>stuff</h1>'; 
    generate_pdf($html); 
?> 

Dies scheitert auch ...

<?php 
    echo 'stuff'; 
    $html = '<h1>stuff</h1>'; 
    generate_pdf($html); 
?> 

Works ...

<?php 
    $html = '<h1>stuff</h1>'; 
    generate_pdf($html); 
?> 

Gibt es eine Möglichkeit, um dieses?


Inhalt von function generate_pdf($html)

function generate_pdf($html){ 
    //Get the necessary dompdf files 
    include_once DOMPDF_PATH . '/autoload.inc.php'; 

    // instantiate and use the dompdf class 
    $dompdf = new \Dompdf\Dompdf(); 
    $dompdf->loadHtml($html); 

    // Render the HTML as PDF 
    $dompdf->render(); 

    //Output the PDF 
    $dompdf->stream(); 
} 

Beachten Sie, dass die Datei, in der diese Funktion einen Namensraum lebt, hat, das ist so, warum $dompdf = new \Dompdf\Dompdf(); falsch erscheinen könnte, aber diese Linie funktioniert gut.

Antwort

1

VERÄNDERUNG DER ANTWORT nach der vollständigen Code wurde Frage hinzugefügt:

Ich habe die komplette HTML-Inhalt in einer Datei enthalten, keine zusätzlichen HTML vor oder nach (auch kein PHP-Echo).

Ich habe vorher einen Fehler gemacht - ich habe die Aufnahme von dompdf autoload und den Inhalt verwechselt - aber siehe unten, wie es in meinem Fall funktioniert. Dies ist der Inhalt einer PHP-Datei, gibt es keine Funktion:

<?php 
require_once '../../dompdf/autoload.inc.php'; 
use Dompdf\Dompdf; 
$dompdf = new Dompdf(); 
$dompdf->set_option('isPhpEnabled', true); 
ob_start(); 

//Here I am getting a few variables (from the URL via GET) which I use in the included php file 

include_once "your_content_in_one_file.php"; 
$html = ob_get_contents(); 
ob_end_clean(); 
$dompdf->loadHtml($html); 
$dompdf->setPaper('A4', 'portrait'); 
$dompdf->render(); 
$dompdf->stream($pdf_name); 
?> 
+0

Vielleicht ist das mein Problem. Wenn HTML vor und nach (vor allem Kopf- und Fußzeile) kommt, würde das ein Problem verursachen? – gtilflm

+0

Ich denke schon, ja. Sie sollten Ihren vollständigen HTML-Code in einer zusätzlichen PHP-Datei zusammenstellen und zusammenfügen. – Johannes

+0

Ich habe gerade einen anderen Test gemacht und meine Frage aktualisiert. In meiner Funktion habe ich von 'require_once DOMPDF_PATH geändert. '/autoload.inc.php'; 'zu' include_once DOMPDF_PATH. '/autoload.inc.php'; '. Der HTML-Code (oder irgendetwas anderes) vor dem Funktionsaufruf gibt mir jedoch immer noch die Möglichkeit, PDF-Header, die bereits gesendet wurden, nicht zu streamen. Also, ich glaube nicht, dass das Problem HTML nach ist. Verstehst du, was ich meine? – gtilflm

0

Es endete mit der Tatsache zusammen, daß ob_start(); schon irgendwo anders im System aufgerufen. Verwenden Sie ...

if (ob_get_level()){ 
    ob_end_clean(); 
} 

mein Problem behoben. Hoffe es hilft jemand anderem.

Verwandte Themen