4

我曾尝试将 FullCalendar.js 渲染的日历打印为 PDF,但是可用的生成器似乎都不起作用:

  • Aspose PDF 不允许使用 JavaScript,而且直接不支持绝对定位的元素
  • PrinceXML 已知在处理无法在 IE、Chrome 或 Firefox 中重现的 JavaScript 时引发TypeError 异常的问题。

我对 PrinceXML 失败的最小复制示例是 Adam Shaw 的 FullCalendar 站点上的示例。即使我保存生成的 HTML(通过$("body").html())并将生成的 HTML 传递给 PrinceXML,从而绕过 PrinceXML 不正确的 JavaScript 处理,PrinceXML 也不会正确布置绝对定位的事件。

我有哪些选择?

4

2 回答 2

4

您最好的选择可能是wkhtmltopdf,它使用 WebKit 作为渲染引擎。这意味着您可以自由地使用 CSS/Javascript。您可能需要查看该javascript-delay选项。

我已在 Ruby on Rails 中成功使用 wkhtmltopdf,但您似乎使用的是 .NET。快速搜索会发现一些可能的 .NET wkhtmltopdf 包装库:

您可能想查看此答案以获取一些替代解决方案。

于 2013-10-24T14:55:23.677 回答
3

我的同事找到了一个更简单的解决方案。

事实证明,我们在测试环境中使用 Pechkin 和 wkhtmltopdf 时遇到了问题。另外,它需要我们设置一个额外的应用程序池来处理打印到 PDF。

使用html2canvas.js

将画布转换为 base64。我推荐 Fred Palmer 的base64.js

将 base64 编码值发送到服务器

创建调用 PDF 转换器库的 Web 服务。我们使用 Aspose,所以我们所做的就是将图像添加到 Aspose PDF 对象。

利润!

这个解决方案非常巧妙,因为它使用用户自己的渲染引擎来生成 PDF。这意味着所见即所得(所见即所得),因此如果日历在用户使用时看起来不错,它应该以相同的方式打印!钱。

于 2013-11-22T22:01:22.950 回答