Я работаю над проектом, в котором нам нужна последовательная печать определенных страниц, и для этого созданы PDF-файлы. Покупатели также хотят иметь несколько локальных копий, так что это будет двукратным выигрышем. С печатью все становится очень опасно в том, где заканчиваются разрывы страниц и как на вещи влияют отступы.
Что я хочу сделать:
firefox --display=:1 -print /tmp/foobar.html -printmode pdf -printfile /tmp/foobar.pdf
Что я пробовал:
Я установил Firefox на свой сервер и Xvfb. Я пробовал настроить Xvfb как виртуальный дисплей и запустить на нем Firefox, но получаю Xlib: extension "RANDR" missing on display ":1".
Неважно что я делаю. Вероятно, он настроен неправильно, я безуспешно пытался добавить это расширение при запуске нового экрана. Я не уверен, что поступлю правильно. Если Firefox и Xvfb - правильный путь, как правильно заставить их разговаривать друг с другом? Есть еще зависимости? Я подробно остановлюсь на этом, если окажется, что это правильный путь.
Чего я не хочу делать:
Нет собственных преобразователей PHP - много вложенных таблиц в этом HTML, много чисел с плавающей запятой, много всего, что родной PHP не работает. Все 3 пробовал уже.
Я мог бы легко сделать это на сервере Windows, но я бы предпочел снизить расходы. Плюс тогда мне придется настроить межсерверную связь, что немного замедлит работу
TL: DR; Я пытаюсь выполнить печать в формате PDF с помощью Firefox, запущенного на сервере без дисплея, чтобы обеспечить стабильную печать. Я пробовал Xvfb и почти сдался. Если это правильный способ, как мне настроить Xvfb? В противном случае, как еще я мог бы это сделать?
Используйте безголовый рендерер, например PhantomJS или wkhtmltopdf.