返回

Vue CLI 2 与 wkhtmltopdf 结合使用指南

前端

安装 wkhtmltopdf

brew install wkhtmltopdf

使用 wkhtmltopdf 生成 PDF

wkhtmltopdf http://localhost:8080/ output.pdf

解决 wkhtmltopdf 常见问题

CSS 支持不佳

wkhtmltopdf 对 CSS3 的支持不佳,这可能会导致生成 PDF 时出现样式问题。为了解决这个问题,可以使用以下方法:

  • 使用较早版本的 CSS,如 CSS2。
  • 使用外部样式表,而不是内联样式。
  • 避免使用复杂的 CSS 样式。
  • 使用一些 CSS 预处理器,如 Sass 或 Less,并将其编译成 CSS2 代码。

字体问题

wkhtmltopdf 可能无法正确渲染某些字体。为了解决这个问题,可以使用以下方法:

  • 安装缺少的字体。
  • 将字体转换为 PDF 支持的格式,如 TTF 或 OTF。
  • 使用 @font-face 规则将字体嵌入到 PDF 文档中。

图像问题

wkhtmltopdf 可能无法正确渲染某些图像。为了解决这个问题,可以使用以下方法:

  • 确保图像分辨率足够高。
  • 将图像转换为 PDF 支持的格式,如 JPG 或 PNG。
  • 使用 CSS 样式调整图像大小和位置。

使用 puppeteer 生成 PDF

puppeteer 是一个 Node.js 库,可以用来控制 Chrome 浏览器。它可以用来生成 PDF 文档,并支持更好的 CSS3 支持。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('http://localhost:8080');
  const pdf = await page.pdf();

  await browser.close();

  fs.writeFileSync('output.pdf', pdf);
})();

puppeteer 与 wkhtmltopdf 的对比

特性 wkhtmltopdf puppeteer
CSS 支持 不佳 较好
字体支持 不佳 较好
图像支持 不佳 较好
安装 较简单 较复杂
使用 较简单 较复杂
速度 较快 较慢
内存使用 较低 较高

总结

wkhtmltopdf 是一个生成 PDF 文档的强大工具,但它对 CSS3 的支持不佳。puppeteer 是一个功能更强大的工具,它可以用来生成 PDF 文档,并支持更好的 CSS3 支持。但是,puppeteer 的安装和使用比 wkhtmltopdf 更加复杂。