【问题标题】:Browser Print dialog not showing浏览器打印对话框未显示
【发布时间】:2018-08-15 10:54:44
【问题描述】:

我的 angularjs 项目中引用了 print.min.js。我已经成功打印(非常简单!)以满足我的大部分需求。我遇到了当用户按下我的“打印”按钮时没有出现浏览器打印对话框的情况。该问题似乎与文件大小有关。我还不知道大小阈值,但似乎在几页之后,该过程在 print.min.js 某处挂起。较小的文件(2 - 3 页左右)打印没有问题。有什么想法吗?

谢谢!

【问题讨论】:

  • 您是要打印 html、json 数据还是 pdf 文档?您是否检查过控制台是否有任何错误?
  • 将 html 输入到 printJS() 以进行 PDF 输出。控制台中没有错误。我的打印函数被输入,除了 console.log() 调用 printJS 是函数中唯一的另一行代码。
  • 我终于让它运行了一段时间。生成 PDF 大约需要 10 分钟。源 HTML 约为 383kb。它最终生成了 PDF,并显示了浏览器打印窗口。 PDF 文件大小约为 160kb。相比之下,大约 17kb 的 HTML 需要大约 3 秒的时间来处理并生成大约 100kb 大小的 PDF。我正在做(或不做)的事情是否有助于提高 printJS 的效率?
  • 知道了。打印大型或复杂的 html 时,最好不要使用 javascript 处理所有计算的样式。请看我的回答。

标签: printjs


【解决方案1】:

默认情况下,Print.js 将处理每个 html 元素的计算样式。打印大型和/或复杂的 html 时,此过程可能需要一段时间。特别是在速度较慢的机器上。

为了防止这种情况,库有一个参数scanStyles,可以设置为false。 但是,为了使其正常工作,您可能希望使用 css 类而不是内联样式来设置 html 样式。由于该库不扫描计算的样式,因此它需要接收您要在打印时使用的 css。

例如,当在带有两个附加样式表 myStylesheet.cssvendor.css 的页面上打印 id 为 myElement 的元素时:

printJS(
  {
    printable: 'myElement',
    type: 'html',
    scanStyles: false,
    css: ['myStyleSheet', 'vendor.css']
  }
)

这也支持 css 打印媒体查询。

如有必要,您还可以传递自定义内联样式:

printJS(
  {
    printable: 'myElement',
    type: 'html',
    scanStyles: false,
    css: ['myStyleSheet', 'vendor.css'],
    style: 'h1 { color: blue; }, someClass { font-size: 1rem; }'
  }
)

http://printjs.crabbly.com/#configuration

【讨论】:

  • 酷。目前,我传递了一个专门用于 printJS 的 .css,但 aIso 使用了大量的内联样式。我会按照你的建议将我所有的内联样式移到 .css 中。谢谢!
  • 差异是惊人的。正如我所提到的,之前从我发送的 html 生成 PDF 大约需要 10 分钟。删除了所有内联样式并将其移至 css 中,将性能更改为几乎即时渲染 pdf。非常感谢您的支持!!
猜你喜欢
  • 2011-08-14
  • 2012-04-30
  • 1970-01-01
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 1970-01-01
相关资源
最近更新 更多