我正在做一个项目,需要对某些页面进行一致打印,为此制作了 PDF。客户也喜欢有一些本地副本,所以这将是一举两得。就分页符的最终位置以及填充如何影响内容而言,打印时事情变得非常不稳定。
我想做的事:
- 用户正在浏览页面
- 用户请求 PDF
- PHP 生成一个 HTML 文件,基本上就是网站减去包装器并加上 CSS
- PHP 将其存储到 /tmp/foobar.html
- PHP 执行打印为 PDF 的命令,类似于
firefox --display=:1 -print /tmp/foobar.html -printmode pdf -printfile /tmp/foobar.pdf
- PHP 将该 PDF 上传到 Amazon S3 进行永久存储,并添加到我们的数据库中以供将来参考
我尝试过的:
我在服务器上安装了 Firefox 和 Xvfb。我尝试将 Xvfb 设置为虚拟显示器并在其上运行 Firefox,但无论Xlib: extension "RANDR" missing on display ":1".
我做什么,都无法解决问题。可能是配置错误,我确实尝试在启动新屏幕时添加该扩展,但没有成功。我不确定我是否没有以正确的方式进行操作。如果 Firefox 和 Xvfb 是正确的路径,那么让它们相互通信的正确方法是什么?是否还有其他依赖关系?如果事实证明这是正确的路径,我将详细说明这一点。
我不想做的事:
没有原生 PHP 转换器 - HTML 中有很多嵌套表格、浮点数,还有很多原生 PHP 无法很好处理的内容。我已经尝试过所有这三种转换器了。
我可以在 Windows 服务器上轻松完成此操作,但我更愿意降低成本。此外,我必须设置跨服务器通信,这会稍微减慢速度
TL:DR;我尝试使用在没有显示器的服务器上运行的 Firefox 打印为 PDF,以便获得一致的打印体验。我试过 Xvfb,但几乎放弃了。如果这是正确的方法,我该如何配置 Xvfb?否则,我还能怎么做呢?