2016-06-30 17 views
0

Mein Fall ist ein wenig komplizierter als die anderen zuvor beantwortet. Mit demselben Code sind die Ergebnisse unterschiedlich.dompdf Fehler Kann nicht streamen pdf: Header bereits gesendet

ARBEITS Cenario - 1. Schritt

Zum http://renamchristofoletti.com/en/works/covers/

Klicken Sie auf Thumbnails und TILL 4 Bilder.

Klicken Sie auf Download und dann Portfolio herunterladen.

PDF wurde wie erwartet generiert. =)

ERROR Cenario - 2. Schritt

das gleiche tun wie oben, aber jetzt, fügen Sie mehr als 6 Bilder in der Thumbnails.

PDF erhalten eine „Kann nicht pdf-Stream: Header bereits gesendet Fehler“

Ist mit Bild keine Rolle, sind die Auswahl Ihnen, gleiche passiert.

DOMPDF CODE

ob_clean(); 
echo '<html><body>...'; // above html and css goes here 

$images2 = str_replace(' ', "", $_COOKIE['rc_folio']); 
$images = explode(',', $images2); 
$images = array_filter($images); 

foreach ($images as $image) { 
    $img_id = get_image_id($image); 

    $imglocal = wp_get_attachment_metadata($img_id); 

     $img_abs_path = ABSPATH . 'wp-content/uploads/' . $imglocal['file']; 
     list($width, $height) = getimagesize($img_abs_path); 
     if ($width > $height) { 
      // Landscape 
      echo '<div style="page-break-after: always; text-align: center;"><div class="content-line"></div><div class="content-line-2"></div><img src="' . $img_abs_path . '" style="width: 80%; max-width: 80%; height: auto; margin-top: 250px;" /></div>'; 
     } else { 
      // Portrait or Square 
      echo '<div style="page-break-after: always; text-align: center;"><div class="content-line"></div><div class="content-line-2"></div><img src="' . $img_abs_path . '" style="width: auto; height: 60%; max-height: 60%; margin-top: 180px;" /></div>'; 
     } 
} 
echo '</body></html>'; 

$html = ob_get_contents(); 
ob_get_clean(); 

$pdf_path = ABSPATH . 'wp-content/themes/moqueca/dompdf-master/dompdf_config.inc.php'; 
require_once($pdf_path); 

$dompdf = new DOMPDF(); 
$dompdf->load_html($html); 
$dompdf->set_paper('letter', 'portrait'); 
$dompdf->render(); 
$dompdf->stream("renam_christofoletti_customfolio.pdf"); 
exit(); 

Bitte kann meine Meinung über das jemand erklären? Ich habe viele andere Lösungen ausprobiert, aber nichts scheint zu funktionieren.

Vielen Dank im Voraus!

+0

Warum die Verwendung der 'ob_clean' etc. Ich denke nicht, dass es eine empfohlene Methode ist. Kannst du all dein 'echo' in' $ html. = ''Umwandeln und endlich verwenden? Lass es mich wissen, wenn du immer noch den Fehler bekommst – Dharam

Antwort

1

Sie scheinen mit einem Limit in der Ausgabepuffergröße zu laufen. Sie können überprüfen, ob es eine Größenbegrenzung ist durch den Wert der output_buffering Konfigurationsparameter Überprüfung:

echo ini_get('output_buffering'); 

Wenn dies der Fall ist, dass Sie entweder die Puffergröße ändern können:

ini_set('output_buffering', true); // no limit 
ini_set('output_buffering', 12288); // 12KB limit 

oder folgen Sie den Anweisungen Anweisungen in Kommentar zu Ihrer Frage des Dharam und drücken Sie den Inhalt in eine Variable direkt anstatt auf Ausgabepufferung verlassen:

$html = '<html><body>...'; // above html and css goes here 

$images2 = str_replace(' ', "", $_COOKIE['rc_folio']); 
$images = explode(',', $images2); 
$images = array_filter($images); 

foreach ($images as $image) { 
    $img_id = get_image_id($image); 

    $imglocal = wp_get_attachment_metadata($img_id); 

     $img_abs_path = ABSPATH . 'wp-content/uploads/' . $imglocal['file']; 
     list($width, $height) = getimagesize($img_abs_path); 
     if ($width > $height) { 
      // Landscape 
      $html .= '<div style="page-break-after: always; text-align: center;"><div class="content-line"></div><div class="content-line-2"></div><img src="' . $img_abs_path . '" style="width: 80%; max-width: 80%; height: auto; margin-top: 250px;" /></div>'; 
     } else { 
      // Portrait or Square 
      $html .= '<div style="page-break-after: always; text-align: center;"><div class="content-line"></div><div class="content-line-2"></div><img src="' . $img_abs_path . '" style="width: auto; height: 60%; max-height: 60%; margin-top: 180px;" /></div>'; 
     } 
} 
$html .= '</body></html>'; 
0

Fall gelöst. Ich habe nur Echo für HTML geändert. = Und alles funktioniert perfekt.

Danke.