Aus irgendeinem Grund rendert DomPDF kein Bild, das in der zu analysierenden HTML-Datei enthalten ist:
Das Bild wird jedoch auf der Seite gerendert, wenn es als HTML zurückgegeben wird:
Ich habe mir diese Probleme angesehen und sichergestellt, dass DOMPDF_ENABLE_REMOTE auf true und verifizierte Dateiberechtigungen eingestellt ist:
dompdf image not real image nicht lesbar oder leer
Bildfehler in DOMPDF für ZF2
Gibt es noch andere Dinge, die ich überprüfen sollte?
Ist die PHP-Einstellung allow_url_fopen auf wahr setzen? Wenn Sie 0.6.x verwenden, können Sie dompdf/www/setup.php laden, um zu sehen, ob Ihre Installation rote Markierungen enthält.
– BrianS
12. September 2014 um 2:59 Uhr
David PP
Das Folgen half mir wie Charme, zumindest lokal, und sogar mit
define("DOMPDF_ENABLE_REMOTE", false);
Die Lösung besteht darin, den Bild-SRC wie folgt auf den absoluten Pfad auf dem Server zu ändern:
Das Konvertieren des Bildes in base64 funktioniert für mich $imageUrl = (string) Image::make(public_path($path)) ->fit(80, 80) ->encode('data-url');
– Olotin Temitop
30. Oktober 2018 um 18:21 Uhr
Das Hinzufügen eines absoluten Pfads funktionierte für mich anstelle eines relativen Pfads.
– Niles Pansuriya
30. Juli 2020 um 9:55 Uhr
Jon
Da es eine andere Antwort gab, die vorschlägt, die Remote-Option in zu aktivieren module.config.php und ich noch keine Kommentare hinzufügen kann, dachte ich, es wäre am besten zu antworten, dass diese Datei in neueren Versionen von DomPDF nicht existiert.
Wenn Sie remote gespeicherte Bilder in eine neuere Version einbinden müssen, müssen Sie dies als Option an den Konstruktor übergeben:
$dompdf = new Dompdf(array('enable_remote' => true));
Dies hat das Problem behoben, das ich hatte.
Hat für mich auf Laravel funktioniert, danke
– ynsmtkl
5. Juli 2021 um 22:30 Uhr
Dies funktionierte für mich mit Remote-Images. Ich danke Ihnen für das Teilen!
– vanari
13. August 2021 um 22:13 Uhr
enable_remote hat Synonyme, erwähnt in github.com/dompdf/dompdf/blob/master/src/Options.php: elseif($key === 'isRemoteEnabled' || $key === 'is_remote_enabled' || $key === 'enable_remote') {$this->setIsRemoteEnabled($value);}
– Arja
30. Juli um 17:50 Uhr
Ok, ich hatte das gleiche Problem mit dem Bild mit:
Der Grund, warum es funktioniert hat, ist, dass Sie ursprünglich nach dem Bilderverzeichnis im Stammverzeichnis suchen. Das “./” bedeutet einfach “in diesem Verzeichnis suchen”. Sie könnten tatsächlich das “./” entfernen und es wird immer noch funktionieren.
– Benutzer3562712
3. Dezember 2014 um 20:15 Uhr
du entscheidest. Ich war dabei, eine Menge Sachen neu zu ordnen!!
– Chad Caldwell
22. Juli 2016 um 20:02 Uhr
Nach all diesen Versuchen habe ich … das ist die Lösung!
– Markus
16. August 2016 um 3:40 Uhr
Jetzt (Mai 2018) ist der richtige Weg:
$options = new Options();
$options->set('isRemoteEnabled',true);
$dompdf = new Dompdf( $options );
Danke, Mate. Ich habe versucht, ein Bild von S3 zur Anzeige im PDF zu bekommen. Hat bei mir wie am Schnürchen funktioniert 😁
– Omer
18. April 2021 um 22:03 Uhr
Brauchst du nicht wirklich isRemoteEnabled eingeschaltet, wenn sich alle Ihre Bilder und was nicht auf demselben Server befinden, der das Skript ausführt.
Warum es Ihr Bild nicht lädt
DomPdf schützt Sie davor, dadurch angegriffen zu werden. Gem Dokumentation Folgendes wird nicht funktionieren:
und dann können Sie beliebige einfügen <img> mit src von innen (kann verschachtelt werden) das /public Ordner in HTML.
Sicherheitshinweis
Es scheint ein einfacher Gewinn zu sein, Chroot einfach in Ihren App-Stammordner zu setzen, aber nicht. Es öffnet ein böses Tor, eines, das du geschlossen halten willst. Angeblich sind keine kritischen Skripte drin /publicnur Bilder, öffentliche Dokumente, Routing etc.
Nutzungshinweis
Beachten Sie, dass ich ein anderes Verzeichnistrennzeichen als das in der Dokumentation verwendete verwendet habe. ich glauben Die beste Vorgehensweise wäre, etwas in der folgenden Zeile zu tun:
define('DS', DIRECTORY_SEPARATOR);
$public = ABSPATH . DS . 'public'; // ABSPATH is defined to be __DIR__ in root folder of your app
$image = $public . DS . 'logo' . DS . 'logo-md.png';
/* Optional */
$saveLocation = ABSPATH . DS . '..' . DS . 'private' . DS . 'invoices'; // Note that save location doesn't have to be in '/public' (or even in 'www')
$html = <<<HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
* {
font-family: DejaVu Sans !important;
}
@page {
margin: 0;
padding: 0;
}
html, body {
margin: 0;
min-height: 100%;
padding: 0;
}
</style>
</head>
<body>
<img src="{$image}">
</body>
</html>
HTML;
$dompdf = new Dompdf();
$dompdf->getOptions()->setChroot($public);
$domPdf->loadHtml($html, 'UTF-8');
$domPdf->setPaper('A4', 'portrait');
$domPdf->render();
/* either */
$domPdf->stream($filename); // filename is optional
/* or */
$outputString = $domPdf->output();
$pdfFile = fopen($saveLocation, 'w');
fwrite($pdfFile, $outputString);
fclose($pdfFile);
Danke, Mate. Ich habe versucht, ein Bild von S3 zur Anzeige im PDF zu bekommen. Hat bei mir wie am Schnürchen funktioniert 😁
– Omer
18. April 2021 um 22:03 Uhr
Ich löse dieses Problem, indem ich den vollständigen Pfad des externen CSS verwende. Dieser funktionierte auf meinem Linux-Ubuntu-Server:
Geben Sie bei der Bereitstellung von Beispielcode diesen bitte als Beispiel an, um das Problem für den Fragesteller zu beheben. (IE-Beispielcode mit einem vollständigen Pfad zu einem Bild und nicht zu einem Stylesheet, da es bei dieser Frage um ein Bild geht.)
– Loren
17. Januar 2018 um 12:37 Uhr
10991500cookie-checkDomPDF: Bild nicht lesbar oder leeryes
Ist die PHP-Einstellung
allow_url_fopen
auf wahr setzen? Wenn Sie 0.6.x verwenden, können Sie dompdf/www/setup.php laden, um zu sehen, ob Ihre Installation rote Markierungen enthält.– BrianS
12. September 2014 um 2:59 Uhr