当前位置:   jquery > 正文

使用html2canvas将高图图表呈现为pdf不适用于IE和Firefox

javascript,pdf,svg,highcharts,html2canvas,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员工具,站长工具

我们使用html2canvas.js和html2canvas.svg.js(版本0.5.0 beta1)和highcharts.js将圆环图下载到pdf中.

这在Chrome中可以正常使用,但是在IE和Firefox中这不起作用.在IE中,图表呈现不正确,在Firefox中根本不呈现.

以下是Chrome,IE和Firefox下载的屏幕截图

铬

IE(边缘) IE

火狐 在此输入图像描述

我用来做html2canvas的代码如下:

html2canvas($("#container"), {
    onrendered: function (canvas) {
      var imgData = canvas.toDataURL(
        'image/png');
      var doc = new jsPDF('p', 'mm');
      doc.addImage(imgData, 'PNG', 10, 10);
      doc.save('sample-file.pdf');
    }
  });

我创建了一个jsFiddle来演示这里的问题 - http://jsfiddle.net/jko0rs5g/3/

有谁知道可能导致这个问题的原因,以及我们如何解决它?

编辑

只是为了澄清为什么我们没有使用内置的Highcharts导出,这是为了我们在Highcarts中添加额外的html,例如图表上方或下方的附加信息,或者例如甜甜圈内的分数.我已经更新了jsfiddle以反映这一点.



1> Rob..:

感谢Pawel Fus朝着正确的方向点头,我们使用canvg.js工作,在调用html2canvas之前暂时用画布替换了svg.

最后一个问题出现在svg中的一些html使用em来调整字体大小(不幸的是我们很多模板都这样做).我们通过在将svg渲染到画布之前更新使用em到底层像素大小的任何字体大小来解决这个问题(请参阅获取JS中DOM元素的计算字体大小以了解我们如何计算实际字体大小)

下面是下载按钮单击的更新代码

$('#download').click(function() {
  var svgElements = $("#container").find('svg');

  //replace all svgs with a temp canvas
  svgElements.each(function() {
    var canvas, xml;

    // canvg doesn't cope very well with em font sizes so find the calculated size in pixels and replace it in the element.
    $.each($(this).find('[style*=em]'), function(index, el) {
      $(this).css('font-size', getStyle(el, 'font-size'));
    });

    canvas = document.createElement("canvas");
    canvas.className = "screenShotTempCanvas";
    //convert SVG into a XML string
    xml = (new XMLSerializer()).serializeToString(this);

    // Removing the name space as IE throws an error
    xml = xml.replace(/xmlns=\"http:\/\/www\.w3\.org\/2000\/svg\"/, '');

    //draw the SVG onto a canvas
    canvg(canvas, xml);
    $(canvas).insertAfter(this);
    //hide the SVG element
    $(this).attr('class', 'tempHide');
    $(this).hide();
  });


  html2canvas($("#container"), {
    onrendered: function(canvas) {
      var imgData = canvas.toDataURL(
        'image/png');
      var doc = new jsPDF('p', 'mm');
      doc.addImage(imgData, 'PNG', 10, 10);
      doc.save('sample-file.pdf');
    }
  });

  $("#container").find('.screenShotTempCanvas').remove();
  $("#container").find('.tempHide').show().removeClass('tempHide');
});

在这里查看更新的jsfiddle - http://jsfiddle.net/zuvzcgvz/22/

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/jquery/detail/13278
推荐阅读
  • 如何解决《JavaScript确认无法在Chrome中使用》经验,为你挑选了1个好方法。javascript,confirm,chrome,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,u... [详细]

  • 如何解决《为什么points.sort(function(a,b){returnab});返回-1,0或1?》经验,为你挑选了2个好方法。javascript,算法,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,j... [详细]

  • 如何解决《为什么匿名函数会丢失对象范围?》经验,为你挑选了1个好方法。javascript,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人... [详细]

  • 如何解决《反应条件渲染模式》经验,为你挑选了1个好方法。javascript,reactjs,css,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工... [详细]

  • 如何解决《怎么不是帮手?》经验,为你挑选了1个好方法。javascript,meteor,meteor-blaze,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工... [详细]

  • 如何解决《Rails:在JavaScript中捕获错误消息》经验,为你挑选了1个好方法。javascript,ruby,ajax,jquery,ruby-on-rails,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工... [详细]

  • 如何解决《在Windows10UniversalApp中从JavaScript调用C#组件》经验,为你挑选了0个好方法。javascript,c#,winjs,win-universal-app,windows-10,DevBox,在线流程... [详细]

  • 如何解决《摆脱SVG圆形元素上的锯齿》经验,为你挑选了0个好方法。html,javascript,css,jquery,svg,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳... [详细]

  • 如何解决《如果未选中复选框,则阻止表单提交》经验,为你挑选了1个好方法。javascript,forms,ajax,checkbox,jquery,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码... [详细]

  • 如何解决《无法保持jQuery下拉列表滑落》经验,为你挑选了0个好方法。javascript,jquery,drop-down-menu,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,un... [详细]

  • 如何解决《在chromedev工具中加载单独的源图文件》经验,为你挑选了1个好方法。javascript,google-chrome,source-maps,json,chrome,DevBox,在线流程图,编程,编程问答,程序员,开发者工... [详细]

  • 如何解决《如何将变量值从GULP注入到JS文件中》经验,为你挑选了1个好方法。javascript,javascript-objects,gulp,gulp-header,注入,json,DevBox,在线流程图,编程,编程问答,程序员,开... [详细]

  • 如何解决《使用javascript图表可视化数据-动态》经验,为你挑选了1个好方法。javascript,data-visualization,bar-chart,plotly,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,... [详细]

  • 如何解决《如何使用Gulp4async/await?》经验,为你挑选了1个好方法。javascript,asynchronous,async-await,gulp,ecmascript-next,DevBox,在线流程图,编程,编程问答,程... [详细]

  • 如何解决《为什么二维数组的索引返回-1》经验,为你挑选了1个好方法。javascript,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在线开发工具,前端开发工具,开发人员... [详细]

  • 如何解决《Angular中方括号使用的目的是什么?》经验,为你挑选了3个好方法。javascript,angularjs,注入,安全,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix... [详细]

  • 如何解决《如何在Typescript中实现JS函数指针》经验,为你挑选了1个好方法。javascript,typescript,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳... [详细]

  • 如何解决《控制器的ngdoc文档》经验,为你挑选了1个好方法。javascript,documentation-generation,angularjs,ngdoc,grunt-ngdocs,DevBox,在线流程图,编程,编程问答,程序员... [详细]

  • 如何解决《在webpack文件的顶部添加注释》经验,为你挑选了1个好方法。webpack,javascript,https,DevBox,在线流程图,编程,编程问答,程序员,开发者工具,开发工具,json解析,二维码生成,unix时间戳,在... [详细]

  • 如何解决《CleaningupProtractorstacktrace》经验,为你挑选了0个好方法。javascript,selenium,end-to-end,jasmine,protractor,DevBox,在线流程图,编程,编程问答... [详细]

相关标签
  

闽ICP备14008679号