Membuat QR Code di CodeIgniter 4 dan cetak ke PDF

Cara generate atau membuat QR Code di CodeIgniter 4 menggunakan library php-qrcode dan bisa dicetak ke PDF menggunakan dompdf.

Download library php-qrcode via composer

composer require chillerlan/php-qrcode

Di controller dimana QR Code akan ditampilkan dan dicetak, tinggal dipanggil saja

Pastikan nama controller jangan QRCode biar gak konflik dengan library nya

// app/Controllers/Qr_code.php

use chillerlan\QRCode\QRCode;

class Qr_code extends BaseController
{
    public function index()
    {
        // data yang akan disimpan di QR code nya, contoh URL
        $target = base_url(route_to('presensi.proses'));
        // generate QR code
        $result = (new QRCode)->render($target);

        $data['qr_code'] = $result;
        return view('index_qrcode', $data);
    }
}

Output default yang dihasilkan dari hasil render QR Code nya berupa base64 encoded URI seperti ini

data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz...

Jadi untuk menampilkannya bisa menggunakan img

// app/Views/index_qrcode.php

<img src="<?= $qr_code ?>" alt="QR Code" width="150">

Untuk cetak ke PDF, download dulu library dompdf

composer require dompdf/dompdf

Buat template view yang akan dicetak di file app/Views/cetak_qrcode.php

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cetak QR Code</title>
</head>

<body>
    <img src="<?= $qr_code ?>" alt="QR Code" width="300">
</body>

</html>

Di file app/Controllers/Qr_code.php tambahkan method cetak PDF

use chillerlan\QRCode\QRCode;
use Dompdf\Dompdf;

class Qr_code extends BaseController
{
    // ...

    public function cetak()
    {
        // data yang akan disimpan dalam QR Code nya, contoh URL
        $target = base_url(route_to('presensi.proses'));
        // generate QR Code
        $result = (new QRCode)->render($target);

        $data['qr_code'] = $result;

        $html = view('cetak_qrcode', $data);

        $dompdf = new Dompdf();
        $dompdf->loadHtml($html);
        $dompdf->setPaper('A4', 'portrait');
        $dompdf->render();
        $dompdf->stream('qr_code.pdf', ['Attachment' => false]);
    }
}

Jangan lupa tambahkan route

$routes->get('qr_code', 'Qr_code::index', ['as' => 'qr_code']);
$routes->get('qr_code/cetak', 'Qr_code::cetak', ['as' => 'qr_code.cetak']);

URL qr_code akan menampilkan QR code nya, dan URL qr_code/cetak akan mencetak QR Code nya ke PDF

Referensi