我正在使用 Vue 为客户构建规范表,需要制作可查看和可打印的 PDF。
我一直在尝试 Puppeteer,但从我在网上看到的情况来看(如果我错了请纠正我),Puppeteer 不支持可选择的文本,也不支持调整 PDF 的 DPI。我还遇到 Puppeteer 以低质量呈现 PDF 的问题 - 字体模糊/没有抗锯齿。
有哪些(如果有的话)PDF 渲染器
- 将 HTML 页面呈现为 PDF*
- 支持可选文本*
- 允许调整 DPI*
- CSS 支持*(即它将呈现 CSS)
- 可以接受URL作为参数
- 允许多个页面
- 并在 Node/Javascript 中运行(可选)
编辑:到目前为止我发现的最好的是 eKoopmans html2pdf ,但不幸的是,它不允许选择文本(据我所知)——这是一个交易破坏者。
似乎没有这样的 javascript 包,所以如果有 PHP 或 C++ 中的包 - 它也会被考虑。
最佳答案
我找到的最佳解决方案是 ebdrup/html2pdf.it .您可以找到现场演示 here .它使用 Phantom JS,似乎支持我需要的所有功能,但我尚未测试的分页符除外。
下一个障碍是弄清楚如何提取必要的函数,这样我就可以在我的脚本中使用这些功能,而不必传递 GET 查询字符串(这值得它自己的问题)。
编辑:我没有意识到的一个问题是似乎没有办法延迟 PDF 的生成,这是一个问题,因为我使用的是 Vue 并且必须先构建页面。
编辑 2020:
在这篇文章之后,我重新访问了 Puppeteer,它可以处理我需要的一切。
调整DPI
您可以通过设置页面视口(viewport)来调整 DPI。
Puppeteer 等同于 1in = 96px . ctrl+f 表示 unitToPixels
例子。
const browser = puppeteer.launch();
const page = await browser.newPage();
// Multiply the desired length in inches by 96
await page.setViewport({
width: 8.5 * 96,
height: 11 * 96,
});
等待...
您可以在完成之前等待选择器。在我的例子中,我将一个类附加到主体以供 Puppeteer 收听和捕获。
const browser = puppeteer.launch();
const page = await browser.newPage();
const html = buildDOM(); // Has js that appends .finished class to <body>
await page.setContent(html);
await page.waitForSelector('.finished');
关于javascript - 任何提供可调 dpi、可选文本和 CSS 支持的 HTML 到 PDF 渲染器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50394673/