html and Svg to Canvas javascript

前端 未结 5 739
别那么骄傲
别那么骄傲 2021-02-02 01:36
&l
5条回答
  •  南旧
    南旧 (楼主)
    2021-02-02 02:01

    You will need to use canvg library for drawing this svg to a temporary canvas and then remove that canvas once you take the screenshot using html2canvas.

    Here is the link for canvg : https://github.com/canvg/canvg

    Try this:

    //find all svg elements in $container
    //$container is the jQuery object of the div that you need to convert to image. This div may contain highcharts along with other child divs, etc
    var svgElements= $container.find('svg');
    
    //replace all svgs with a temp canvas
    svgElements.each(function () {
        var canvas, xml;
    
        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.className = "tempHide";
        $(this).hide();
    });
    
    //...
    //HERE GOES YOUR CODE FOR HTML2CANVAS SCREENSHOT
    //...
    
    //After your image is generated revert the temporary changes
    $container.find('.screenShotTempCanvas').remove();
    $container.find('.tempHide').show().removeClass('tempHide');
    

提交回复
热议问题