首页 / 浏览问题 / WebGIS / 问题详情
如何打印viewer场景
32EXP 2024年01月15日
我在写webgis项目时,在使用浏览器自带打印功能时,我只想打印cesium中的场景而不打印界面中的其他内容,有没有好的办法只打印场景呢

1个回答

您好,

如果您只需要打印SuperMap iClient3D for Cesium中的场景内容,可参考官方“场景出图”示例:http://support.supermap.com.cn:8090/webgl/Cesium/examples/webgl/editor.html#outputScene

官方示例输出结果为当前场景的jpg格式图片,直接打印输出的图片即可。

希望可以帮助到您!

865EXP 2024年01月15日
我现在不是输出为图片,我需要调用浏览器打印功能,打印的时候只打印场景不打印其他的,有没有解决办法

您好,

浏览器打印是浏览器厂商提供的功能,不属于超图产品,友情支持仅供参考,根据查询为您提供以下两种办法:

(1)根据scene.outputSceneToFile拿到画面场景内容的base64data,具体可参考上一条回答有关于场景出图的官方示例,将打印的内容添加到iframe里,将base64data转换为image标签,然后打印整个iframe,具体代码参考如下:

function printInIFrame(base64data) {
            const printContentHtml = `<img style="position:absolute;top:0px;left:0px;width:100%;height:100%" src="${base64data}"/>`
            const iframe = document.createElement("iframe");
            iframe.setAttribute(
                "style",
                "position:absolute;top:0px;left:0px;width:100%;height:100%"
            );
            document.body.appendChild(iframe);
            iframe.contentDocument.write(printContentHtml);
            setTimeout(() => {
                iframe.contentDocument.close();
                iframe.contentWindow.print();
            }, 3000);
        };

(2)根据scene.outputSceneToFile拿到画面场景内容的base64data,将其添加到一个新创建的div元素中。将base64data转换为image标签,接着将这个div元素添加到页面的body中,并在一定时间后触发打印功能,然后再将添加的内容移除,具体代码参考如下:

function printInBody(base64data) {
            const printContentHtml = `<img style="position:absolute;top:0px;left:0px;width:100%;height:100%" src="${base64data}"/>`
            var div = document.createElement("div");
            div.innerHTML = printContentHtml;
            document.body.appendChild(div);
            setTimeout(() => {
                window.print();
            }, 1000);

            setTimeout(() => {
                document.body.removeChild(div);
            }, 3000);
        };

希望能够帮助到您!

...