JIT Spacetree如何将标签保存为图片

5
我正在使用JavaScript InfoVis Toolkit(http://thejit.org/)并尝试使用canvas.toDataURL("image/png")打印我的扩展空间树可视化。虽然这对我的ForceDirected图表有效,但在SpaceTree中,我们的标签在单独的DIV中,因此当我打印图像时,我得到一个空白的图表。
有人知道如何打印标签吗?任何帮助都将不胜感激。我附上了图形的手动截图以及打印时得到的图像。
是的-我确实看到了问题here - 但它没有回答我的问题,因为我们不能使用“Native”标签,因为我们会进行一些即时样式处理。
HTML代码:
<div id="infovis" style="height: 412px;">
   <div id="infovis-canviswidget" style="position: relative; width: 800px; height: 412px;">
     <canvas id="infovis-canvas" width=800" height="412" style="position: absolute; top: 0px; left: 0px; width: 800px; height: 412px;"></canvas>
     <div id="infovis-label" style="overflow: visible; position: absolute; top: 0px; left: 0px; width: 800px; height: 0px;">
           -- Labels are in here --
     </div>
   </div>
</div>

手动截图手动截图 空白打印图像空白打印图像


嗨,我正在尝试做同样的事情。你找到解决方案了吗? - Cihad Turhan
抱歉让你等了一会儿才发布我解决问题的方法——我得回去找我的代码。请看下面的解决方案。它不是完美的解决方案,但比其他方法更有效。 - bharris9
3个回答

1
我使用 html2canvas 插件解决了这个问题。基本上,html2canvas 会创建一个包含 div 元素(及其子元素)的新画布,然后你可以将其转换为 png 图像文件,方法是使用 myCanvas.toDataURL("image/png")。该图像将包含您的 HTML 标签。(请注意,html2canvas 可能无法正确处理标签的 CSS 属性。)
 html2canvas(document.getElementById("diagram-container"), {
         onrendered: function(canvas) {
         var img = canvas.toDataURL();
         document.write('<img src="'+img+'"/>');
          }
  });

html2canvas库的当前版本支持基本的CSS转换。 - Paulino III

0
我应该在十月份发帖分享这个,但是我忘记了。我最终找到了自己问题的答案。
首先,请查看此处的帖子 HTML 5 Canvas Save Image 以下是我如何实现解决方案(从上面的链接获取CanvasSaver函数代码):
function SaveCanvas(canvasName) {
  var canvas = document.getElementById(canvasName);
  var imgUrl = null;

  if (canvas.getContext) {
    //Get alternative image URL for spacetree only
    if (canvasName.indexOf("tag") == -1) {
        imgUrl = $jit.ST.prototype.print.call();
    }

    var cs = new CanvasSaver('http://joeltrost.com/php/functions/saveme.php');
    //cs.saveJPEG(canvas, 'image');
    cs.savePNG(canvas, 'image', imgUrl);
  }
}

最后,在你的ASP按钮中编写代码来调用SaveCanvas函数:
<asp:ImageButton ID="ImageButton1" ImageUrl="Images/save_icon.png" ToolTip="Save Visualization" AlternateText="Save Visualization" OnClientClick="SaveCanvas('tagCloudVis-canvas');return false;" Style="left: 2px; top:3px; position:relative;" runat=server />

0

我知道这个帖子很老了。但是,如果有人正在寻找此内容并且不想使用html2canvas,那么这里有一个解决方案供大家参考。

         Label: {
            type: 'Native'
        },

在你的JavaScript代码中添加以下内容:var st = new $jit.ST({ <here> }) 要将其保存为图像,请添加以下代码。
HTML:
<a onclick="getImage(this, 'filename.png', 'tree-id')">download tree</a>

JS:

function getImage(a, filename, id){
 a.link = document.getElementById(id).toDataURL();
 a.download = filename;
}

编程愉快 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接