jspdf/pdfmake 创建 PDF 与将页面打印为 PDF 的好处?

fst*_*str 1 javascript pdf firefox google-chrome jspdf

我想在浏览器扩展选项卡中创建 PDF 报告。我希望能够添加图形、文本、UTF-8 支持、图像、位置文本,但除此之外,在样式和布局方面没有任何过分疯狂的东西。

我一直在阅读有关 jspdf(不支持 UTF8)和 pdfmake 的限制。看起来他们在处理很多问题时会很复杂。

我的一个想法是:

  • 将我的报告所需的 HTML 直接放在页面上。

  • 使用 CSS 隐藏报告 HTML 以外的所有内容,并使用“@media print”样式来设置报告样式。

  • 触发“window.print()”以在 JavaScript 中打印页面。Chrome 显示预览,让您单击即可保存为 PDF。Firefox 的打印预览显示预览,界面有点乱,但您只需点击几下即可保存为 PDF。

我错过了什么吗?我的方法有什么主要缺点吗?也许操作系统特定的问题?为什么要使用 jspdf 或 pdfmake 呢?

我没有看到在任何我觉得奇怪的地方建议使用这种方法。我看到的唯一缺点是用户可能会对为什么他们在不期望 PDF 时被要求打印某些内容感到困惑,但由于报告不是经常生成,所以这里没什么大不了的。

Kan*_*ang 5

这与什么 Marko Toši 刚好相反?说过。实际上,从浏览器打印不会将 PDF 生成为图像(您可以自己快速测试)。但是很多时候你需要在 jsPDF/pdfmake 中使用 HTML->Canvas。

pdfmake 不支持 HTML->PDF 很好:https : //github.com/bpampuch/pdfmake/issues/205 jsPDF 在将 HTML 转换为 PDF 时不支持外部 CSS。

在 pdfmake 和 jsPDF 中,如果你想让你的 PDF 看起来和你的 HTML 一样,你需要做 HTML->Canvas 然后将 canvas 作为图片粘贴到 PDF 中。

在 HTML->PDF 方面,从浏览器打印总是比 javascript PDF 库有更好的结果。

如果您想让 PDF 文件可下载,您可能需要在服务器端查看 phantomJS 或 headless chrome。

回答你的问题:

jspdf/pdfmake 的好处:

  • 正如您所提到的,jspdf/pdfmake 为用户提供了真正的“下载”体验,而不是将“打印”重新用作下载。
  • 与 phantomJS 或无头 chrome 解决方案相比,它不需要服务器端实现。

印刷的好处:

  • 更好的 HTML->PDF 结果(支持所有 HTML 标签和 CSS)。