javascript - 将 SVG 转换为 PNG 时如何包含 <div> 标签

标签 javascript jquery html angularjs svg

这里是 SVG 新手。我正在尝试进行一项改进,其中在将 SVG map 转换为 PNG 期间包含国家/地区标签(如 <div>)。

要转换的 map 如下所示:

enter image description here

这就是它在 DOM 中的样子。 div要包含的标签已突出显示。

enter image description here

这是我到目前为止尝试过的:

var svg = $('svg', $(svgParentId));

// append map labels                                          // From this line...
var outerHtmlColl = $(svgParentId).find('.marker-label');     //
                                                              //
_.forEach(outerHtmlColl, function(item){                      //  
    svg = svg.append(item.outerHTML);                         //
});                                                           // ...to this line

// check whether style should be applied
if (styleSheet) {
    var styles = loadStyles([styleSheet]);

    var defs = $('defs', svg);
    if (!defs.length) {
        svg.prepend('<defs></defs>');
        defs = $('defs', svg).first();
    }

    var style = $('style', defs);
    if (!style.length) {
        defs.prepend('<style type="text/css"></style>');
        style = $('style', defs).first();
        style.html(styles);
    }
}

var serializer = new XMLSerializer();
var svgStr = serializer.serializeToString(svg[0]);

var canvas = $('#hiddenCanvas')[0];
canvas.width = width;
canvas.height = height;

canvg(canvas, svgStr,
    {
        ignoreDimensions: true, //does not try to resize canvas
        scaleWidth: width,
        scaleHeight: height,
        renderCallback: function () {
            var pngImg = canvas.toDataURL("image/png");
            func(pngImg.substring(22));
        }
    }
);

不幸的是,这不起作用,如下所示:

enter image description here

我不确定我到底错过了什么(或者这是否可能...)。任何意见将不胜感激。

谢谢。

最佳答案

Div 不是有效的 SVG 子元素,因此将它们移动到 SVG 中是行不通的。

您应该通过将 div 元素转换为 <text> 将 div 中的文本移动到 SVG 中元素。使用文本元素的 x 和 y 属性在 SVG 中定位标签。

关于javascript - 将 SVG 转换为 PNG 时如何包含 <div> 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47509968/

相关文章:

javascript - 如何为javascript方法添加jquery确认对话框

html - CSS 位置在悬停时无法正常工作

javascript - 从 div 页面顶部下拉

html - 适用于所有不同设备的响应式网页设计

javascript - 将 <a> 插入由带有 javascript 或 jQuery 的插件生成的 div

javascript - 如何克服asp.net mvc3中的ajax数据大小限制

javascript - 如何在 laravel 5 提交成功后显示一个甜蜜的警告框?

javascript - 将 JavaScript 操作与 DOM 集成的最佳实践

javascript - jQuery 对象如何模仿数组?

javascript - 打开 IE Developers Tools 后,JavaScript 发生了什么变化?