Autodesk forge 锻造具有多层的MarkupUtils renderToCanvas?

Autodesk forge 锻造具有多层的MarkupUtils renderToCanvas?,autodesk-forge,markup,autodesk,Autodesk Forge,Markup,Autodesk,我们目前在Forge viewer中加载了一个PDF,其中包含多个标记层(使用自定义DrawMode创建),每个层的可见性可切换 我们想让用户能够打印他们当前看到的内容(带有分层标记的PDF)。我能够找到提供打印潜在解决方案的帖子(使用canvas、getScreenshot和MarkupUtils renderToCanvas)。 示例帖子: 这个解决方案一开始看起来效果不错,但我注意到只有一个标记层被渲染到画布上(似乎是最后添加的一个),其他层被忽略 所有标记都已加载并在屏幕上可见。此外,如

我们目前在Forge viewer中加载了一个PDF,其中包含多个标记层(使用自定义DrawMode创建),每个层的可见性可切换

我们想让用户能够打印他们当前看到的内容(带有分层标记的PDF)。我能够找到提供打印潜在解决方案的帖子(使用canvas、getScreenshot和MarkupUtils renderToCanvas)。 示例帖子:

这个解决方案一开始看起来效果不错,但我注意到只有一个标记层被渲染到画布上(似乎是最后添加的一个),其他层被忽略

所有标记都已加载并在屏幕上可见。此外,如果我隐藏该层,它仍然是打印的

是否有任何方法可以使用renderToCanvas从所有加载的标记层添加标记? 或者任何已知的潜在解决方法

谢谢你的帮助。提前谢谢

我编写的函数的代码片段,它可以工作(但只加载最近添加的层)


下面是
renderToCanvas
方法的外观(您可以在中找到它):

MarkupsCore.prototype.renderToCanvas=函数(上下文、回调、renderAllMarkups){
var width=this.bounds.width;
var height=this.bounds.height;
var viewBox=this.getSvgViewBox(宽度、高度);
var numberOfScreenshotsTaken=0;
var加价=[];
var层;
var onMarkupScreenshotTaken=函数(){
if(回调&(++numberOfScreenshotsTaken===markups.length)){
回调();
}
}.约束(本);
如果(渲染标记){
var svgKeys=Object.keys(this.svg.childNodes);
var layersKeys=Object.keys(this.svgLayersMap);
//仅附加其父层包含在svg主容器中的标记。
对于(var i=0;i
如您所见,如果未定义第3个参数或将其设置为
false
,则仅渲染活动层的标记。如果将第三个参数设置为
true
,则应渲染所有层的标记


试着自己进入这个方法,在
标记之前,仔细检查最后的标记列表。列表中的每个项目都会调用renderToCanvas

真不敢相信我错过了,链接非常有用。我已经添加了true作为第三个参数,所有参数都显示出来了!真的很感谢你的时间,只是在这个领域找到我的方式。再次感谢。
export const printViewerToPDF = (markupsCore: MarkupsCore, jsPDF: any) => {
    // Create new image
    var screenshot = new Image();

    // Get the canvas element
    var canvas = document.getElementById('snapshot') as HTMLCanvasElement;

    // Fit canvas to match viewer
    if (canvas) {
        canvas.width = markupsCore.bounds.width;
        canvas.height = markupsCore.bounds.height;

        // Create a context
        var ctx = canvas.getContext('2d');

        // Clear
        if (ctx) {
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            ctx.drawImage(screenshot, 0, 0, canvas.width, canvas.height);
        }

        // Screenshot viewer and render to canvas
        markupsCore.viewer.getScreenShot(canvas.width, canvas.height, function(
            blobUrl: any,
        ) {
            screenshot.onload = function() {
                if (ctx) {
                    ctx.drawImage(screenshot, 0, 0);
                }
            };

            screenshot.src = blobUrl;
        });

        // Render markup to canvas
        setTimeout(function() {
            markupsCore.renderToCanvas(ctx, function() {
                var pdf = new jsPDF('l', 'px', [canvas.height, canvas.width]);
                pdf.addImage(ctx!.canvas, 0, 0, canvas.width, canvas.height);
                pdf.save(Date.now().toString() + '.pdf');
            });
        }, 300);
    }
};