Существует ли PHP-библиотека, которая может конвертировать HTML с использованием CSS Grid в формат PDF?

Можете посоветовать либу для создания PDF из HTML с использованием гридов и поддержкой CSS3? Недавно язменил mpdf, который работает с таблицами, и мне нужна более современная альтернатива.
  • 7 февраля 2024 г. 7:49
Ответы на вопрос 2
На данный момент не существует многих PHP библиотек, способных идеально обрабатывать CSS Grid при конвертации HTML в PDF, так как это относительно современная технология веб-разработки, и многие библиотеки для генерации PDF основаны на более старых веб-движках, не поддерживающих все последние стандарты CSS.

Однако для обработки HTML с современными стилями CSS, включая Grid, можно использовать инструменты на базе браузерных движков, такие как Puppeteer, который работает в связке с headless версиями Google Chrome или Chromium. Puppeteer не является PHP-библиотекой, но вы можете использовать его в командной строке или через Node.js приложение для преобразования HTML в PDF. Такой подход требует, чтобы у вас на сервере был установлен Node.js.

Если ваш проект основан на PHP и вы хотите остаться в его экосистеме, вы можете вызывать Puppeteer через командную строку, используя функции PHP, такие как `shell_exec`. 

Вот пример кода, который можно использовать для генерации PDF с помощью Puppeteer и PHP:

```php
$htmlFileName = 'path/to/your/html/file.html';
$pdfFileName = 'path/to/save/pdf/file.pdf';

// Передача команды для генерации PDF через Puppeteer
$command = `node path/to/puppeteer/script.js {$htmlFileName} {$pdfFileName}`;
$output = shell_exec($command);
```

В `puppeteer/script.js` вы бы использовали следующий фрагмент кода для Puppeteer:

```javascript
const puppeteer = require('puppeteer');

let args = process.argv.slice(2);
let htmlFileName = args[0];
let pdfFileName = args[1];

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(`file://${htmlFileName}`, {waitUntil: 'networkidle0'});
  await page.pdf({ path: pdfFileName, format: 'A4' });

  await browser.close();
})();
```

Убедитесь, что у вас установлен Puppeteer (`npm install puppeteer`) перед его использованием.

Если же вам всё же нужна PHP-библиотека, которая поддерживает новейшие стандарты CSS, у вас могут быть ограниченные варианты. Библиотека WeasyPrint, хотя и написана на Python, лучше других поддерживает современный CSS. Вы можете рассмотреть возможность интеграции WeasyPrint в ваш PHP-проект через вызовы в командной строке точно так же, как и в случае с Puppeteer.

Большинство других PHP-библиотек для создания PDF, таких как Dompdf, TCPDF и wkhtmltopdf, имеют различные степени поддержки CSS, но могут испытывать трудности с последними функциями CSS3 и CSS Grid.
shell_exec + chromium с флагами headless disable-gpu и print-to-pdf отрисует вам что угодно, что может отобразить chrome. 
у решения есть изъян - на большинстве хостингов даже не пытайтесь запустить, себе дороже, только виртуальные/физические сервера подходят идеально.

https://github.com/chrome-php/chrome - примерно так
Похожие вопросы