我正在使用 Morris.js 创建图表。我需要将图形导出为 pdf。我可以看到图表是 svg 元素。我应该怎么做才能做到这一点。
问问题
8059 次
2 回答
5
我拿了一个莫里斯样品,为你做了一个小提琴:
http://jsfiddle.net/1roLdqte/48/
我添加了一个简单的调用,以仅使用莫里斯图将现有 div 格式化为 PDF:
$('#print').click(function () {
printMe();
});
function printMe() {
xepOnline.Formatter.Format('line-example',{render:'download', srctype:'svg'});
}
运行小提琴并按下 PDF 按钮。
请注意,这里有更多可用参数,您可以格式化更多内容,而不仅仅是 morris.js 图表、控制页面大小、添加页眉/页脚等。这只会将图表单独(srctype:'svg')格式化为PDF作为矢量图像(而不是光栅)。
于 2014-08-11T18:01:12.423 回答
0
有用。我尝试使用 morris.js v0.5.0 和 Raphael 2.1.2。
将此添加到您拥有图表的位置(例如您的控制器):
$scope.pdf = function(chartName){
printMorris(chartName);
};
function printMorris(chartName) {
xepOnline.Formatter.Format(chartName, {render:'download', srctype:'svg'});
}
xepOnline.jqPlugin.008.js 是错误的。要解决错误:“Uncaught TypeError: Cannot read property 'length' of null on xepOnline.jqPlugin.008.js:166”,请更改 xepOnline.jqPlugin.008.js 中的代码。
将此添加到第 166 行。当“规则”为空时,这将跳过长度。
if(rules === null)
continue;
现在,在 xepOnline.jqPlugin.008.js 中的函数 togglePrintMediaStyle 中的代码:
togglePrintMediaStyle: function() {
if($('head style[data-xeponline-formatting]').length > 0) {
$('head style[data-xeponline-formatting]').remove();
return;
}
var printrules = [];
for(var x=0;x<document.styleSheets.length;x++) {
var rules=document.styleSheets[x].cssRules;
var rule=[];
if(rules === null)
continue;
for(var x2=0;x2<rules.length;x2++) {
if(rules[x2].media && rules[x2].media && (rules[x2].media[0] === 'print' ||
rules[x2].media && rules[x2].media.mediaText === 'print')) {
for(var x3=0;x3<rules[x2].cssRules.length; x3++) {
rule.push(rules[x2].cssRules[x3]);
}
} else if (rules[x2].parentStyleSheet.media[0] &&
rules[x2].parentStyleSheet.media[0] === 'print' ||
(rules[x2].parentStyleSheet.media &&
rules[x2].parentStyleSheet.media.mediaText === 'print')) {
rule.push(rules[x2]);
}
}
for(var x2=0;x2<rule.length;x2++) {
printrules.push(rule[x2].cssText);
}
}
// write print media styles to head
var html = '\n<style type="text/css" data-xeponline-formatting="true">\n';
for(var x=0; x<printrules.length; x++) {
html+='.xeponline-container ' + printrules[x] + '\n';
}
html += '</style>\n';
$('head').append(html);
},
于 2017-01-20T14:38:38.927 回答