PHP: Cara Menampilkan Image Di PDF Menggunakan DomPDF

Cara menampilkan image di PDF menggunakan DomPDF

Secara default, DomPDF tidak bisa menampilkan image, berikut ini error yang biasanya keluar

Image not found or type unknown

Solusinya yaitu perlu diubah atau ditambahkan untuk pengaturan remote nya

use Dompdf\Dompdf;
use Dompdf\Options;

// ...

$options = new Options();
$options->set('isRemoteEnabled', true);

$dompdf = new Dompdf($options);
$dompdf->loadHtml($content);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream('laporan.pdf', array('Attachment' => FALSE));
<img class="logo" width="120" src="http://localhost/nama_aplikasi/assets/img/logo.png" alt="Logo">
  • Source image harus absolute path lengkap dengan protocol dan nama domain seperti contoh diatas
  • Relative path seperti /assets/img/logo.png tidak jalan
  • localhost:8080 misalnya, juga sama tidak akan jalan

Error Maximum execution time of 60 seconds exceeded

Di Laravel atau CodeIgniter 4, kalau misal keluar error maximum execution time, masalahnya ada di loading image nya

Jika menggunakan virtual host Laragon dengan menggunakan URL .test, tidak ada masalah, tetapi jika dijalankan melalui perintah php artisan serve atau php spark serve, maka keluar error tersebut

Solusinya bisa menggunakan base64_encode untuk bagian image nya

Menggunakan base64_encode di CodeIgniter 4

// mengambil absolute path dari image
$imagePath = FCPATH . 'assets/images/logo2.png';
if (!file_exists($imagePath)) {
    return "Image tidak ditemukan";
}

// baca file image
$imageData = file_get_contents($imagePath);
if ($imageData === false) {
    return "Gagal membaca file image";
}

// Encode the image data to base64
$base64String = base64_encode($imageData);

// siap kirim ke view dompdf nya
$data['base64Image'] = 'data:image/png;base64,' . $base64String;

$html = view('laporan/pdf', $data);

Di view pdf nya masukkan ke source image nya langsung

<img src="<?= $base64Image ?>" width="250" alt="Logo">

Menggunakan base64_encode di Laravel

use Illuminate\Support\Facades\File;

// ...

$imagePath = public_path('assets/img/logo.png');
if (!File::exists($imagePath)) {
    return "Logo tidak ditemukan";
}

$imageData = File::get($imagePath);
if ($imageData === false) {
    return "Gagal membaca file image";
}

$base64String = base64_encode($imageData);
$base64Image = 'data:image/png;base64,' . $base64String;

$pdf = Pdf::loadview('laporan.cetak', compact('base64Image'));

Di view pdf nya

<img src="{{ $base64Image }}" width="250" alt="Logo">