Серверная печать в PDF HTML-файла в /tmp?

Я работаю над проектом, в котором нам нужна последовательная печать определенных страниц, и для этого созданы PDF-файлы. Клиентам также нравится иметь несколько локальных копий, так что это будет двойной выигрыш. Вещи становятся очень нестабильными в печати, где заканчиваются разрывы страниц и как отступы влияют на вещи.

Что я хочу сделать:

  1. Пользователь просматривает страницу
  2. Пользователь запрашивает PDF
  3. PHP генерирует HTML-файл, в основном сайт без минуса и плюс CSS
  4. PHP сохраняет это в /tmp/foobar.html
  5. PHP выполняет команду, которая печатает в PDF, аналогично firefox --display=:1 -print /tmp/foobar.html -printmode pdf -printfile /tmp/foobar.pdf
  6. PHP загружает этот PDF в Amazon S3 для постоянного хранения, добавляет в нашу базу данных для дальнейшего использования

Что я пробовал:

Я установил Firefox на свой сервер и Xvfb. Я попытался настроить Xvfb как виртуальный дисплей и запустить на нем Firefox, но я получаю Xlib: extension "RANDR" missing on display ":1". Неважно что я делаю. Вероятно, он неправильно настроен, я попытался добавить это расширение при запуске нового экрана без удачи. Я не уверен, правильно ли я поступлю. Если Firefox и Xvfb - правильный путь, как правильно заставить их общаться друг с другом? Есть ли еще зависимости? Я уточню это, если окажется, что это правильный путь.

Что я не хочу делать:

Нет нативных конвертеров PHP - множество вложенных таблиц в этом HTML, много с плавающей точкой, много вещей, с которыми нативный PHP плохо справляется. Я пробовал все 3 уже.

Я мог бы так легко сделать это на сервере Windows, но я бы предпочел сократить расходы. Плюс тогда мне придется установить межсерверную связь, которая немного замедлит работу

TL:DR; Я пытаюсь печатать в PDF, используя Firefox, работающий на сервере без дисплея, чтобы у меня был постоянный опыт печати. Я попробовал Xvfb и почти сдался. Если это правильный путь, как мне настроить Xvfb? В противном случае, как еще я мог бы сделать это?

1 ответ

Используйте рендерер без головы, такой как PhantomJS или wkhtmltopdf.

Другие вопросы по тегам