Недавно столкнулся с очень неприятной ошибкой, которую было сложно раздебажить. Идея в том, чтобы встроить в PDF ссылку в виде QR-кода. Но при использовании тега img со значением src в формате data:image/svg+xml;base64,… всё разваливается на части и QR-код не отображается.
На одном из своих проектов, я использую связку laravel-dompdf + php-qrcode. Вкратце, у меня есть HTML код, который конвертируется в PDF с каким-то таким содержанием (важно, что это, просто, картинка в base64):
<img src="data:image/svg+xml;base64,..."> <img src="/www/data/local_image.png">
При этом, картинка, которая открывается по пути работает, а base64 (который не обращается к файловой системе) не работает от слова совсем.
В конфиге laravel-dompdf (config/dompdf.php) можно найти удобное свойство show_warnings. Если перевести его в состояние true, то можно увидеть стектрейс ошибок DomPdf. У меня эта ошибка выглядела примерно вот так:
Permission denied on data:image/svg+xml;base64,...
Что я только не перепробовал делать — все настройки и хаки не приводили к результату. Пропущу часть с поиском проблемы и перейду сразу к решению. Оно заключается в простановке значения allowed_protocols всё в том же конфиге:
'allowed_protocols' => [ // Здесь могут быть ваши другие настройки 'data://' => ['rules' => []], // а вот эта штука решит ваши проблемы ],
Как я понял, laravel-dompdf не сконфигурировать изначально на работу с файлами, которые являются base64-закодированной строкой. От сюда и проблемы с интерпретацией картинки в PDF.