#php #laravel #api #laravel-6 #dompdf
#php #laravel #API #laravel-6 #dompdf
Вопрос:
Я пишу функцию для создания и отображения PDF-файла с использованием Dompdf в проекте Laravel 6 с использованием PHP 8. Я пробовал использовать множество руководств и даже официальную документацию от GitHub для обычной версии Dompdf и ее оболочки для Laravel. Вот мой код функции генератора pdf:
private function generate_pdf(){
$html = '
<html>
<body>
<h1>Hello Dompdf</h1>
<h2>MDF</h2>
</body>
</html>
';
$pdf = PDF::loadHTML($html);
return $pdf->stream('welcome.pdf');
}
Это работает нормально, но вот результат функции:
Как вы можете видеть, элементы накладываются друг на друга. Я искал ответы, но не могу найти ничего связанного. Кто-нибудь знает, почему это происходит?
Ответ №1:
Если у кого-то снова возникнет эта проблема, я нашел решение, и это худшее, что может быть:
private function generate_pdf(){
$html = '
<html>
<body>
<h1>Hello Dompdf</h1><br/><br/>
<h2>MDF</h2>
</body>
</html>
';
$pdf = PDF::loadHTML($html);
return $pdf->stream('welcome.pdf');
}
Просто добавьте
элементы к каждому элементу, чтобы предоставить правильное пространство. Это неприятное решение, но оно работает.
Комментарии:
1. используйте теги div и выровняйте свои html-компоненты используйте div для разделения html на разделы, тогда у вас не будет таких проблем
2. Divs вообще не работал, он просто создал контейнер блочного типа, а затем нарисовал его поверх любого другого элемента (тот же случай, который я продемонстрировал). Выравнивание работало нормально, но это не слишком помогло моей задаче. Тег <br/> работал хорошо… Интересно, возникает ли эта проблема только на моем компьютере, потому что я установил что-то не так, или отсутствует зависимость, или есть кто-то еще с такой же проблемой 🤔.
Ответ №2:
Проблема заключается в совместимости с PHP 8
самим собой. У меня была такая же проблема, и понижение версии до PHP 7.4 сработало на моем сервере. Не уверен, в чем может быть несовместимость, но сразу после обновления to PHP 8.0
DOMPDF
перестал правильно интерпретировать HTML и начал размещать элементы друг на друге.