Autodesk forge 锻造具有多层的MarkupUtils renderToCanvas?
我们目前在Forge viewer中加载了一个PDF,其中包含多个标记层(使用自定义DrawMode创建),每个层的可见性可切换 我们想让用户能够打印他们当前看到的内容(带有分层标记的PDF)。我能够找到提供打印潜在解决方案的帖子(使用canvas、getScreenshot和MarkupUtils renderToCanvas)。 示例帖子: 这个解决方案一开始看起来效果不错,但我注意到只有一个标记层被渲染到画布上(似乎是最后添加的一个),其他层被忽略 所有标记都已加载并在屏幕上可见。此外,如果我隐藏该层,它仍然是打印的 是否有任何方法可以使用renderToCanvas从所有加载的标记层添加标记? 或者任何已知的潜在解决方法 谢谢你的帮助。提前谢谢 我编写的函数的代码片段,它可以工作(但只加载最近添加的层)Autodesk forge 锻造具有多层的MarkupUtils renderToCanvas?,autodesk-forge,markup,autodesk,Autodesk Forge,Markup,Autodesk,我们目前在Forge viewer中加载了一个PDF,其中包含多个标记层(使用自定义DrawMode创建),每个层的可见性可切换 我们想让用户能够打印他们当前看到的内容(带有分层标记的PDF)。我能够找到提供打印潜在解决方案的帖子(使用canvas、getScreenshot和MarkupUtils 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);
}
};