我尝试将FullCalendar.js渲染的日历打印为PDF,但是可用的生成器似乎都不起作用:
- Aspose PDF不允许JavaScript,直接只是不支持绝对定位的元素
- PrinceXML存在已知问题,即在处理在IE,Chrome或Firefox中不可重现的JavaScript时会抛出TypeError异常。
我关于PrinceXML失败的最小重现示例是Adam Shaw的FullCalendar站点上的示例。 即使我保存生成的 HTML(通过 $("body").html()
)并将生成的 HTML 传递给 PrinceXML,从而绕过 PrinceXML 不正确的 JavaScript 处理,PrinceXML 也没有正确布局绝对定位的事件。
我有哪些选择?
最好的选择可能是wkhtmltopdf,它使用WebKit作为渲染引擎。这意味着你可以自由使用CSS/Javascript。您可能需要查看javascript-delay
选项。
我已经在Ruby on Rails中成功使用了wkhtmltopdf,但看起来你使用的是.NET。快速搜索显示了一些可能的 .NET wkhtmltopdf 包装库:
- 格曼尼/佩奇金
- codaxy/wkhtmltopdf
您可能需要查看此答案以获取一些替代解决方案。
我的同事找到了一个更简单的解决方案。
事实证明,我们在测试环境中使用Pechkin和wkhtmltopdf时遇到了问题。 此外,它还要求我们设置一个额外的应用程序池来处理打印到 PDF。
使用 html2canvas.js 库
将画布转换为 base64。 我推荐弗雷德·帕尔默的base64.js
将 base64 编码值发送到服务器
创建调用 PDF 转换器库的 Web 服务。 我们使用Aspose,所以我们所做的只是将图像添加到Aspose PDF对象中。
利润!
这个解决方案非常流畅,因为它使用用户自己的渲染引擎来生成PDF。 这意味着所见即所得(所见即所得),因此,如果用户使用日历时看起来不错,则应以完全相同的方式打印! 钱。