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">