我想将NVD3图表转换为PDF文档。这些图表通常显示在浏览器中(我无法为每个图表创建单独的打印和显示实例),我使用PhantomJS完成了所有工作,但我遇到了一个我似乎无法解决的问题找到一个很好的解决方案。
所有NVD3模型都使用转换,但只有部分转换受transitionDuration
选项的影响。由于这些转换,我现在必须在"捕获"之前使用超时。 PhantomJS中的屏幕制作PDF,否则会导致文档在转换过程中拍摄那些图表。显然,我不必等待。
PhantomJS使用print
媒体类型来渲染PDF,因此很容易禁用任何CSS3动画(使用媒体查询),但我找不到任何方法可以关闭D3过渡(换句话说 - 强制默认转换持续时间为0)。我可以在JavaScript中检测到print
媒体类型,但无法在D3 / NVD3中找到全局关闭动画的好方法...这就是我所拥有的所有内容真的做得很多:
var chart = nv.models.multiBarChart()
.tooltipContent(tooltip)
.stacked(true)
.showControls(false);
var duration = 1000; // default duration
if(window.matchMedia) {
if(window.matchMedia('print').matches) {
duration = 1; // duration for print
}
}
chart.transitionDuration(duration);
答案 0 :(得分:9)
从NVD3 1.7.1开始,您可以使用持续时间选项:
chart.duration(0);
答案 1 :(得分:3)
我想不出另一个解决方案,而不是修改nvd3源。如果替换
的所有发生 transitionDuration = 250
的
transitionDuration = 0