2017-02-16 178 views
5

TL;博士,我从JavaScript寻找批量打印数据库存储的HTML文档的一个很好的方式使用Javascript - 编程批量打印HTML文档

我们的用户通过生成一个开源的所见即所得的基于JavaScript的文本富文本内容编辑(CKEditor)。 HTML内容保存到我们的数据库,并可以通过其内置的打印功能(基本上只是window.print())直接从编辑器打印。这是伟大的,完美的作品。

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

  1. 用户选择要打印的文档。 JS代码循环遍历文档和调用一个接一个地打印。这里的问题是用户会看到一堆打印对话框。这是痛苦的。 (除此之外:我们正在使用Chrome浏览器,但我没有将其设置为信息亭模式的选项)

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

  3. 与上述#2类似,但在某些时候文档被转换并保存为单个PDF。这样可以,但是将HTML转换为PDF似乎并没有很多好的/符合成本效益的选项。

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

有没有更好的方法批量打印JavaScript的HTML内容?很感谢任何形式的帮助!

编辑按@保罗,我需要澄清几点:

内容是,这是在标准的在线文本编辑器创建。在我的情况:

  • 无内部框架
  • 无动画
  • 没有动态内容

现在,是我从打印样式表将被应用编辑器直接打印,所以这可能复杂化事情有点。

+0

这样的事情? http://stackoverflow.com/a/13724670/2418529 –

+0

@NicolòCozzani这将遭受#2中的大DOM问题。我的担忧并不是打开一个新窗口,这是一个新的Chrome打印对话框。谢谢! –

+1

我很满意投票的人,但会很感激反馈意见,以改善未来的问题。这对我来说似乎是一个合理的话题。 –

回答

7

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

+0

这也是我要采用的方法 –

+0

这使得很多意义, 谢谢。你可以建议任何特定的库来实现这与PhantomJS? –

+1

@JP。既然你有html,你可以使用nodejs和[phantom](https://github.com/amir20/phantomjs-node)结合来显示html,参见[截图](http://phantomjs.org /screen-capture.html)的功能,以便如何将其打印为PDF格式。 – matt

0

我完全同意上面的答案,PhantomJS可能是最好的选择。唯一的问题就是在可靠性方面PhantomJS已经非常灵活,并且可以在最后几个版本中使用。如果文档太大,Phantom可能会变得太多(记住它最初是为网络测试而设计的,并且变成了网页自动化)。当写这个剧本,我会建议如下的概括(向上突破的过程成更容易管理的步骤)

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

再次,它不是整体完美的选项后面,却是我们必须以最好的一个现在工作。如果您有任何问题可以随时伸手,我正在自己的Web自动化工作,所以这一切都将在我心中新鲜。

下载用于PhantomJS Here

1

没有足够的代表处发表评论。

我会在服务器端做到这一点。从后端生成HTML文档或PDF,并将其下载给用户。

当用户首次单击时禁用下载按钮,并在服务器生成文档时启用它。您可以使用xmlhttprequest通过在后端设置全局变量来检查完成的任务的百分比,并将其显示在客户端。

如果需要很长的时间来生成服务器,请用户检查later.Like说文件将准备下载到XXXX-XXXX