【问题标题】:Javascript - Programmatically batch print HTML documentsJavascript - 以编程方式批量打印 HTML 文档
【发布时间】:2017-02-16 18:45:33
【问题描述】:

tl;dr 我正在寻找一种从 javascript 批量打印数据库存储的 HTML 文档的好方法

我们的用户通过基于 JavaScript 的开源 WYSIWYG 文本编辑器 (CKEditor) 生成富文本内容。 HTML 内容保存到我们的数据库中,并且可以通过其内置的打印功能(基本上只是 window.print())直接从编辑器打印。这很棒,而且效果很好。

现在,我们需要批量打印保存的文档,我正在寻找可行的解决方案。我可以看到多种选择,但都有很大的权衡:

  1. 用户选择要打印的文档。 JS 代码循环遍历文档和调用 print 一个接一个。这里的问题是用户会看到一堆打印对话框。这是痛苦的。 (顺便说一句:我们使用的是 Chrome,但我没有将其设置为 kiosk 模式的选项)

  2. 用户选择要打印的文档。 JS 代码将所有这些组合在一个(隐藏的)容器中,并且它们都打印为一个“文档”。这些可能是包含表格、图像等的相当大的文档。我担心这里涉及的性能,因为我们可能会向 DOM 添加大量数量。

  3. 与上面的 #2 类似,但有时文档会被转换并保存为单个 PDF。这没关系,但似乎没有很多好的/成本效益高的将 HTML 转换为 PDF 的选项。

  4. 生成某种可以处理 HTML 内容的报告。我查看了 SQL Server 报告服务,但它支持的 HTML 标记和 CSS 属性非常有限。

有没有更好的方法从 javascript 批量打印 HTML 内容?非常感谢任何帮助!

编辑根据@Paul,我需要澄清几点:

内容是在您的标准在线文本编辑器中创建的内容。就我而言:

  • 没有 iframe
  • 没有动画
  • 没有动态内容

现在,如果我直接从编辑器中打印,则会应用打印样式表,所以这可能会使事情变得有点复杂。

【问题讨论】:

  • @NicolòCozzani 这将受到 #2 中大型 DOM 问题的影响。我担心的是不打开新窗口,它是否是新的 Chrome 打印对话框。谢谢!
  • 我同意人们拒绝投票,但希望能提供反馈以改进未来的问题。对我来说,这似乎是一个合理的主题问题。
  • 这个问题不清楚,因为 HTML 可以包含插入的内容,如 <iframe>,动态内容,如 CSS 动画,或通过 JavaScript 从 <script> 标签加载或生成的内容。没有指定转换是否必须处理 HTML 的所有这些元素或仅处理其中的一个子集。除了说明手动方法或多次打印对话很痛苦之外,该问题也没有具体说明已尝试过什么或目前的做法有什么问题。例如,您是否尝试过像 selenium 或 phantomJS 这样的自动化浏览器?
  • 要求打印单个.pdf 还是多个.pdf 文档?

标签: javascript


【解决方案1】:

由于内容可能很大并且消耗大量内存,我会在服务器端执行此操作。在客户端选择文档并请求服务器将其呈现为 PDF,例如利用 PhantomJS。然后,您甚至可以使用移动客户端来获取 PDF。

【讨论】:

  • 这也是我会采用的方法
  • 这很有意义,谢谢。你能推荐任何特定的库来使用 PhantomJS 实现这一点吗?
  • @JP。由于您拥有 html,您可以使用 nodejs 与 phantom 结合来显示 html,请参阅 screen capture 功能,了解如何将其打印为 pdf。
  • @Janne 我奖励你赏金,因为你的似乎是最广泛接受的答案。在我找到解决方案之前,我将保持这个问题没有答案,以期获得更多答案。感谢大家的建议!
  • 我已经看到使用 DevExpress 的 RichEdit 功能在 asp.net 的 Web 服务器应用程序中将 HTML 文档转换为 PDF 的效果很好
【解决方案2】:

我完全同意上面的答案,PhantomJS 可能是最好的选择。唯一的问题是可靠性方面,PhantomJS 在过去的几个版本中已经很完善了。如果文档太大,Phantom 可能无法处理(请记住,它最初是为 Web 测试目的而设计的,后来演变为 Web 自动化)。在为此编写脚本时,我建议遵循以下大纲(将流程分解为更易于管理的步骤)

    var steps = [
  function() {
    // step 1
  },
  function() {
    // step 2
  }
]

再次重申,总体而言,这不是一个完美的选择,但它是我们目前必须使用的最佳选择。如果您有任何问题,请随时与我们联系,我自己正在研究网络自动化,所以这一切都会在我脑海中浮现。

PhantomJS 下载Here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多