代码之家  ›  专栏  ›  技术社区  ›  kabirbaidhya Jan Hančič

Autodesk Forge查看器仅渲染PDF文件的单个页面

  •  1
  • kabirbaidhya Jan Hančič  · 技术社区  · 9 年前

    Autodesk Forge Viewer 渲染三维和二维设计文件。其他格式的文件渲染得很好。但在这种情况下 pdf 文件,即使文件实际上有多个页面,也只呈现第一个页面。 但我们需要显示所有页面 .

    Viewer loading only the first page

    function doInitializeTheViewer(urn, token, element) {
        const options = {
            'env': 'AutodeskProduction',
            'accessToken': token
        };
    
        let documentId = 'urn:' + urn;
    
        return new Promise((resolve, reject) => {
            Autodesk.Viewing.Initializer(options, function onInitialized() {
                let viewerApp = new Autodesk.A360ViewingApplication(element.id);
    
                viewerApp.onDocumentLoaded = function (doc) {
    
                    resolve(getViewerInstance().then(viewer => {
                        state.viewer = viewer;
                        return state;
                    }));
                };
    
                viewerApp.onDocumentFailedToLoad = (reason, errorCode) => {
                    reject({errorCode, reason});
                };
    
                viewerApp.registerViewer(viewerApp.k3D, Autodesk.Viewing.Private.GuiViewer3D);
                viewerApp.loadDocumentWithItemAndObject(documentId);
    
                state.viewerApp = viewerApp;
            });
        });
    }
    

    并且,它是如何被调用的:

    let element = document.getElementById('#the-viewer');
    
    fetch2LegToken().then(
        ({accessToken}) => doInitializeTheViewer(urnB64, accessToken, element)
    );
    

    在这里,我还需要做什么才能让查看器同时渲染多页pdf文件和其他3D/2D文件?

    我无法在 API documentation 我也无法在任何样本中找到它。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Shiya Luo    9 年前

    .pdf 文件在查看器中转换为二维图纸 .pdf格式 文件应显示为单个二维视图。

    如果只使用 Instantiate a Basic Viewer 您将得到多个视图,如下所示:

    multiple 2D views

    因为你超越了 onDocumentLoaded ,看看 Autodesk360App.js 实施 已加载文档 方法在第621行:

    function showDesignExplorer( modelDocument )
    {
        var viewableItems = Autodesk.Viewing.Document.getSubItemsWithProperties(modelDocument.getRootItem(), {'type':'folder','role':'viewable'}, true);
        var root = viewableItems[0];
        var geometryItems = Autodesk.Viewing.Document.getSubItemsWithProperties(root, {'type':'geometry'}, true);
        if (geometryItems.length === 0)
            return false;
    
        if (geometryItems.length === 1) {
            // Check if the item has camera views.
            return modelDocument.getNumViews( geometryItems[0] ) > 1;
        }
        return true;
    }
    

    在您的 已加载文档 方法,调用 Autodesk.Viewing.Document.getSubItemsWithProperties 方法获取所有视图。

    还有一条线在 lmvdbg at演示如何加载所有视图。