Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting a local image in PDF using DOMPDF

Tags:

php

dompdf

I am new to PHP and trying to build a little project for my assignment.

I am trying to convert some HTML to a PDF using PHP (DOMPDF package). The HTML does contain some tags to output some images that are locally stored within the this project's folder.

I am currently getting "Image not found or type unknown" error, which I have seen is quite common when trying to do this.

I have done some research and experimented with quite a few different things, however I do not seem to be getting anywhere unfortunately.

Does anyone know what I might be doing wrong?

Just a little snippet from my project:

index.php

<?php 

require_once 'packages/dompdf/autoload.inc.php'; 

use Dompdf\Dompdf;

$dompdf = new Dompdf();

$dompdf->loadHtml("<img src='photo.jpeg'>");

$dompdf->setPaper('A4', 'portrait'); 
 
$dompdf->render(); 

$dompdf->stream("test-pdf", array("Attachment" => 0));

?>

The image is stored in the same directory as the index.php file. I am using XAMPP as a development environment.

Hope this is described correctly. Thanks everyone and appreciate the support!

like image 456
RishV Avatar asked Aug 10 '26 00:08

RishV


1 Answers

As @KIKOSoftware mentioned in the comments, the src attribute of an img tag can either contain an absolute URI or base64-encoded image data. You can use the following helper function to generate the latter on the fly.

function ImageToDataUrl(String $filename) : String {
    if(!file_exists($filename))
        throw new Exception('File not found.');
    
    $mime = mime_content_type($filename);
    if($mime === false) 
        throw new Exception('Illegal MIME type.');

    $raw_data = file_get_contents($filename);
    if(empty($raw_data))
        throw new Exception('File not readable or empty.');
    
    return "data:{$mime};base64," . base64_encode($raw_data);
}

Which will then be used like this:

$dompdf->loadHtml("<img src='" . ImageToDataUrl('photo.jpeg') . "'>");
like image 181
volkerschulz Avatar answered Aug 12 '26 16:08

volkerschulz



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!