Mit dompdf pdf-Datei erstellen?


02.04.2020, 15:03

 

Das ist mein php-Code. In der Datei code.html.txt ist der html-Code gespeichert.

require_once('dompdf/autoload.inc.php');

 use Dompdf\Dompdf;

 $dompdf = new DOMPDF();

 $html = file_get_contents("code.html.txt");

 $dompdf->load_html($html);

 $dompdf->render();

 $dompdf->stream("file.pdf");

2 Antworten

1) Prüfe, ob dein HTML valid ist. Du musst bedenken, dass die Bibliothek das HTML parsen und auswerten muss. Möglicherweise scheitert es dabei.

Als Zwischenprüfung kannst du ja eine sehr einfache HTML-Datei probieren:

<!doctype html>
<html>
  <head>
    <title>Example</title>
  </head>
  <body>
    <p>Some content</p>
  </body>
</html>

2) Aktiviere die Protokollierung aller Fehler, gleich zu Beginn (nach dem öffnenden PHP-Starttag).

error_reporting(E_ALL);
ini_set('display_errors', 'On');

3) Hast du schon den konkreten Inhalt von $html überprüft, nachdem ihr der Dateiinhalt zugefügt wurde?


gehm1 
Beitragsersteller
 06.04.2020, 14:41

Ok, danke. Mit deinem Beispiel funktioniert es. Aber bei meiner Datei kommt die Warnung "Fatal error: Uncaught Error: Call to a member function get_cellmap()"

gehm1 
Beitragsersteller
 06.04.2020, 15:20
@regex9

Wie meinst du das genau?

regex9  06.04.2020, 15:33
@gehm1

Erster Satz meiner obigen Antwort. Beachte die Verlinkung.

gehm1 
Beitragsersteller
 06.04.2020, 18:26
@regex9

Ich habe einige (über 100) invalide Stellen gefunden und jetzt alle ausgebessert. Jetzt klappt es. Danke für deine Hilfe.

Ich hatte das gleiche Problem.

Habe es so lösen können (keine Ahnung, ob mein Weg der richtige ist). Aber so gehts bei mir

require_once('dompdf/autoload.inc.php');

ob_start();
include_once('code.html.txt');
$html = file_get_contents("code.html.txt");
ob_end_clean();




 use Dompdf\Dompdf;

 $dompdf = new DOMPDF();

 $dompdf->load_html($html);

 $dompdf->render();

 $dompdf->stream("file.pdf");

gehm1 
Beitragsersteller
 02.04.2020, 15:26

Danke für deinen Tipp. Es hat aber leider nicht funktioniert.

RayLaMue  02.04.2020, 15:28
@gehm1

hm

Ich schaue mal schnell bei mir. Habe an der Stelle auch richtig lange gesucht bis es ging.

gehm1 
Beitragsersteller
 02.04.2020, 15:42
@RayLaMue

Und was ist das für eine Datei?

includes/db_connect.php

RayLaMue  02.04.2020, 15:45
@gehm1

Kannst du Ignorieren .
Damit baue ich nur eine Datenbankverbindung auf.

In meinem Original - Script wird die HTML mit Daten aus der Datenbank befüllt bevor das PDF erstellt und per Email verschickt wird. (verschiedene Tele habe ich weggelassen.. )

gehm1 
Beitragsersteller
 02.04.2020, 15:56
@RayLaMue

Und ist meinedatei.php die Datei mit dem Inhalt?

gehm1 
Beitragsersteller
 02.04.2020, 16:21
@RayLaMue

Muss ich da dann einfach code.html.txt einsetzen oder muss ich meine Datei noch in .php umwandeln?

RayLaMue  02.04.2020, 16:25
@gehm1

Gute Frage .
Ich habe es bisher immer mit einer php-Datei gemacht.

gehm1 
Beitragsersteller
 02.04.2020, 17:01
@RayLaMue

Ich habe jetzt code.html.txt in code.php abgeändert.

Mein neuer Code:

<?PHP

require_once ('dompdf/autoload.inc.php');

//Reference

use Dompdf\Dompdf;

// erstelle Dompdf Class

$dompdf = new dompdf();

?>

<!DOCTYPE html>

<html>

<head>

   <meta charset="UTF-8" />

   <title>Auf PDF warten </title> 

   <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

   <link href="w3.css" type="text/css" rel="stylesheet" />

   <link href="style.css" type="text/css" rel="stylesheet" />

   <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

</head>

<body>

<?php

            // PDF inhalt -> Ausgabe in : $html_inhalt

            ob_start();

            include_once('code.php');

            $html_inhalt = ob_get_contents();

            ob_end_clean();

            $html_inhalt;

            $dompdf->load_html($html_inhalt);   // Lade Content aus VARIABLE

            $dompdf->setPaper('a4','portrait'); //portrait

            $dompdf->set_option('defaultMediaType', 'all');

            $dompdf->set_option('isFontSubsettingEnabled', true);

            $dompdf->render();

            $ausgabe = file_put_contents("/pfad/datei.pdf" , $dompdf->output());

?>

</body>

</html>

Leider funktioniert es immer noch nicht.

RayLaMue  02.04.2020, 17:06
@gehm1

das kann so auch nicht gehen ...

 <link href="w3.css" type="text/css" rel="stylesheet" /> 

Tausche diese gegen deine CSS-Datei aus und passe den Pfad an.

include_once('code.php');

Überprüfe: Stimmt der Pfad? (Datei im gleichen Verzeichnis? )

$ausgabe = file_put_contents("/pfad/datei.pdf" , $dompdf->output());

Anpassen: Hier muss dein Speicherpfad rein

gehm1 
Beitragsersteller
 06.04.2020, 14:32
@RayLaMue

Wenn ich keine css-Datei habe, kann ich das ja dann weglassen, oder?

Ja, die Datei befindet sich im gleichen Verzeichnis.

Gibt es mir die Datei unter diesem Pfad auf dem Server oder am PC aus?

gehm1 
Beitragsersteller
 06.04.2020, 14:37
@gehm1

Die dritte Frage hat sich gerade beantwortet. Die pdf-Datei ist auf meinem Server.

RayLaMue  06.04.2020, 17:11
@gehm1

die CSS-Datei kannst du weglassen.

gehts immer noch nicht ?

gehm1 
Beitragsersteller
 06.04.2020, 17:49
@RayLaMue

Leider nicht. Aber regex9 hat mich auf die Idee gebracht, dass der html-Code nicht valide sein könnte.