canvg возвращает белый экран со строкой base64 с angular5 - PullRequest
0 голосов
/ 14 декабря 2018
I am trying to get a snapshot of svg present on a webpage in IE11. But, every time I am getting only white screen.

I have done till now:

        let targetElem = <any>document.getElementById('body');
        let nodesToRecover = [];
        let nodesToRemove = [];

        let svgElem = targetElem.querySelector('svg')

        let parentNode = svgElem.parentNode;
            // let svg = parentNode.innerHTML;
            let svg = "<svg xmlns=\"http://www.w3.org/2000/svg\" id=\"svg-annotations\" style=\"opacity: 1;\" _ngcontent-c7=\"\">\n\t\t\t<defs><marker id=\"arrow-start\" refY=\"4.5\" markerWidth=\"9.9\" markerHeight=\"9\" orient=\"auto\"><path fill=\"black\" d=\"M 9.9 0 L 9.9 9 L 0 4.5 Z\" /></marker><marker id=\"arrow-end\" refX=\"9.9\" refY=\"4.5\" markerWidth=\"9.9\" markerHeight=\"9\" orient=\"auto\"><path fill=\"black\" d=\"M 0 0 L 0 9 L 9.9 4.5 Z\" /></marker></defs><g class=\"annotation-group\" id=\"measurement-36122\" style=\"opacity: 1;\"><g class=\"annotations\"><g class=\"annotation callout elbow editable \" transform=\"translate(758.541 408.978)\"><g class=\"annotation-connector\"><path class=\"connector\" fill=\"none\" stroke=\"black\" d=\"M 0 0 L 137 137 L 162 137\" /></g><g class=\"annotation-note\" transform=\"translate(162 137)\"><g class=\"annotation-note-content\" transform=\"translate(0 3)\"><rect class=\"annotation-note-bg\" fill=\"white\" fill-opacity=\"0\" x=\"0\" width=\"104.79\" height=\"41.36\" /><text class=\"annotation-note-label\" fill=\"black\" y=\"41.36\" dx=\"0\"><tspan x=\"0\" dy=\"0.8em\" /></text><text class=\"annotation-note-title\" font-weight=\"bold\" fill=\"black\"><tspan x=\"0\" dy=\"0.8em\">Face</tspan><tspan x=\"0\" dy=\"1.2em\">:5453831.5mm²</tspan></text></g><path class=\"note-line\" stroke=\"black\" d=\"M 0 0 L 104.79 0\" /><circle class=\"handle \" cursor=\"move\" fill=\"grey\" fill-opacity=\"0.1\" stroke=\"grey\" stroke-dasharray=\"5\" cx=\"0\" cy=\"0\" r=\"10\" /></g></g></g></g><g class=\"annotation-group\" id=\"measurement-59622\" style=\"opacity: 1;\"><g class=\"annotations\"><g class=\"annotation callout elbow editable \" transform=\"translate(889.656 387.507)\"><g class=\"annotation-connector\"><path class=\"connector\" fill=\"none\" stroke=\"black\" d=\"M 0 0 L 137 137 L 162 137\" /></g><g class=\"annotation-note\" transform=\"translate(162 137)\"><g class=\"annotation-note-content\" transform=\"translate(0 3)\"><rect class=\"annotation-note-bg\" fill=\"white\" fill-opacity=\"0\" x=\"0\" width=\"104.79\" height=\"41.36\" /><text class=\"annotation-note-label\" fill=\"black\" y=\"41.36\" dx=\"0\"><tspan x=\"0\" dy=\"0.8em\" /></text><text class=\"annotation-note-title\" font-weight=\"bold\" fill=\"black\"><tspan x=\"0\" dy=\"0.8em\">Face</tspan><tspan x=\"0\" dy=\"1.2em\">:5453831.5mm²</tspan></text></g><path class=\"note-line\" stroke=\"black\" d=\"M 0 0 L 104.79 0\" /><circle class=\"handle \" cursor=\"move\" fill=\"grey\" fill-opacity=\"0.1\" stroke=\"grey\" stroke-dasharray=\"5\" cx=\"0\" cy=\"0\" r=\"10\" /></g></g></g></g></svg>";

            this.canvas = document.createElement('canvas');
            this.canvas.setAttribute('id', '_canvas');

            canvg(this.canvas, svg, {renderCallback: function(){
                console.log(this);
            }});

            nodesToRecover.push({
                parent: parentNode,
                child: svgElem
            });
            parentNode.removeChild(svgElem);

            nodesToRemove.push({
                parent: parentNode,
                child: this.canvas
            });

            parentNode.appendChild(this.canvas);
            let data = this.canvas.toDataURL('image/png', 0.5);
            console.log(data);

после добавления холста к parentNode я могу увидеть свой svg на веб-странице с тегом canvas, но преобразование его в base64 дает мне только белый экран.Может кто-нибудь, пожалуйста, помогите мне, где я делаю неправильно?

1 Ответ

0 голосов
/ 18 декабря 2018

Пожалуйста, проверьте размер элемента SVG (ширина и высота).Возможно, проблема связана с этим свойством.

Поскольку вы используете CSS-функцию translate () на графике SVG, она будет перемещать элемент в горизонтальном и / или вертикальном направлениях.Если смещение больше, чем размер SVG.SVG будет отображаться белым экраном.

...