前几天我们使用phantomjs通过服务器端prince工具生成pdf。现在我们喜欢将无头浏览器从 phantomjs 更改为另一个。
我研究了哪一个可以快速渲染 phantomjs 和 puppeteer。在我的案例中,报告应用程序生成 PDF,只有我使用 puppeteer 和 phantomjs 对其进行测试。与 puppeteer 相比,phantomjs 可以快速处理 HTML。
然后我学习 google-chrome-headless 选项来生成 PDF。它看起来像一个 Chrome 浏览器 GUI 应用程序的内置模块。我正在使用 Node.js 应用程序。我在命令行中使用以下命令
chrome --headless --disable-gpu --print-to-pdf <src_url>
我注意到 --disable-gpu 选项,其他工具没有它。
以下是这些工具的作用,
您可以使用 puppeteer 控制 chromium 和无头 chromium 的实例。当然,它允许您提供参数并使用该 API 生成 PDF。
您可以使用 Chrome CLI 和 Puppeteer 控制相同的 API。
以下是如何使用 chromium headless 生成网站的 pdf。
chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/
这里使用 puppeteer 也是一样的,
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.chromestatus.com/');
await page.pdf({path: 'chromestatus.pdf', format: 'A4'});
await browser.close();
})();
我使用 PhantomJS 很长一段时间来生成我的 wiki 的屏幕截图以在 VR 中使用。不幸的是,正如前面提到的,该项目不再维护,也没有过渡。
正如其他人提到的,chrome 是一个很好的选择,但在编程的情况下,我自己的偏好是通过使用容器来最小化对运行环境的假设。对于
alpine-chrome
描述为“基于 alpine 官方镜像构建的 Chrome Headless docker 镜像” https://github.com/Zenika/alpine-chrome?tab=readme-ov-file#print-a-pdf 是一个很棒的解决方案,相对较小、清晰的示例,包括您可能需要的示例。