Javascript HTML2Canvas将溢出的内容转换为图像

Javascript HTML2Canvas将溢出的内容转换为图像,javascript,html,canvas,html2canvas,Javascript,Html,Canvas,Html2canvas,我有一个潜水舱,水太多了。它基本上包括一个大的组织结构图。我想做的是导出div的全部内容,而不是使用html2canvas库导出可见部分,但到目前为止我还无法实现。下面的代码段不会呈现全部内容。有没有办法做到这一点 function export(){ html2canvas( [ document.getElementById('diagram') ], { onrendered: function(canvas) { var dataUr

我有一个潜水舱,水太多了。它基本上包括一个大的组织结构图。我想做的是导出div的全部内容,而不是使用html2canvas库导出可见部分,但到目前为止我还无法实现。下面的代码段不会呈现全部内容。有没有办法做到这一点

function export(){  
    html2canvas( [ document.getElementById('diagram') ], {
        onrendered: function(canvas) {

            var dataUrl = canvas.toDataURL();
            window.open(dataUrl, "toDataURL() image", "width=800, height=800");
            //Canvas2Image.saveAsPNG(canvas);
        }
     });
}
我正在使用BasicPrimitions库生成组织结构图。它接受一个div并将所有元素插入其中。因为我的图表相当大,所以它从容器中溢出。 Xhtml代码如下所示:

<rich:panel style="float: left; width: 100%;">
     <div style="float: left; height:600px; margin-left: 1%;  width: 19%; border-style: dotted; border-width:1px;">
          Some irrelevant content
     </div>
     <div id="diagram" class='diagram' style="float: right; height:600px;  width: 59%; border-style: dotted; border-width:1px;">
          This is the div all charts are dynamically inserted
     </div>
     <div style="float: left; height:600px; margin-left: 1%;  width: 19%; border-style: dotted; border-width:1px;">
          Some more irrelevant content 
     </div>
</rich:panel>

一些无关的内容
这是动态插入所有图表的div
一些更不相关的内容

我不知道html2canvas中是否有一个简单的选项(即将所有溢出设置为可见的选项),但一个迂回的方法可能是在调用导出函数时将图表元素的溢出属性的父级设置为可见,然后在html2canvas的onrendered回调中将其再次设置为hidden,以便用户有最少的时间来感知它:

function export(){ 
document.getElementById('diagram').parentNode.style.overflow = 'visible'; //might need to do this to grandparent nodes as well, possibly.
    html2canvas( [ document.getElementById('diagram') ], {
        onrendered: function(canvas) {
            document.getElementById('diagram').parentNode.style.overflow = 'hidden';
            var dataUrl = canvas.toDataURL();
            window.open(dataUrl, "toDataURL() image", "width=800, height=800");
            //Canvas2Image.saveAsPNG(canvas);
        }
     });
}
请尝试一下,它对我更有效,因为我必须设置特定的大小,并显示和隐藏某些屏幕大小的元素:

function convertCanvasAndSend(idElement, nameImage) {
var element = document.getElementById(idElement);
var styleOrig = element.getAttribute("style");
element.setAttribute("style", "width: 1400px; height: 480px;");
element.querySelector("ANY_HIDDEN_YOU NEED").setAttribute("style", "display: block;");
domtoimage.toBlob(element)
.then(function (blob) {
    window.saveAs(blob, nameImage + '.png');
    element.setAttribute("style", styleOrig);
    element.querySelector("ANY_HIDDEN_YOU NEED").setAttribute("style", styleOrigInnDiv);
});

}

谢谢你的绝妙创意!我设法得到了完整的图像。然而,我做的有点不同。我直接更改了容器的大小(目前这是一个荒谬的数字,但是可以计算实际大小),然后又更改回原始大小。小部件现在支持自动调整大小选项,因此它将扩展其大小以自动显示所有内容。