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

标签 javascript google-chrome pdf firefox jspdf

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

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

我的一个想法是:

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

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

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

我错过了什么吗?我的方法有什么重大缺点吗?也许操作系统特定问题?你为什么要用 jspdf 或 pdfmake 来代替它?

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

最佳答案

这与马尔科·托希奇所说的完全相反。实际上,从浏览器打印不会生成 PDF 作为图像(您可以自己快速测试)。但是很多时候你需要使用 HTML->Canvas 和 jsPDF/pdfmake。

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 或 headless chrome 解决方案相比,它不需要服务器端实现。

打印的好处:

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

关于javascript - jspdf/pdfmake 创建 PDF 与将页面打印为 PDF 的好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49441740/

相关文章:

javascript - 如何使用键值对获取数组的lastindex

javascript - 为什么当我尝试初始化多个组件时,Firefox 和其他浏览器会卡住,但在 Chrome 上却不会?

python - 在 Ubuntu 上安装 Chromedriver 以使用 Splinter

javascript - Chrome 扩展程序包含错误

iphone - 使用 CGPDF 在 PDF 中查找超链接

javascript - 动态创建的元素上的事件绑定(bind)?

javascript - Treepanel节点行索引

javascript - JS检查字符串是否只包含西里尔符号和空格

java - 使用 Oxygen 将 XML 转换为 PDF

javascript - 单击 jspdf 下载按钮时不会执行任何操作。在 android Cordova