Autodesk Forge 查看器仅呈现 PDF 文件的单页

Autodesk Forge viewer renders only single page for PDF files

在我们的应用程序中,我们使用 Autodesk Forge Viewer 渲染 3D 和 2D 设计文件。其他格式的文件可以很好地呈现。但是在 pdf 文件的情况下,即使文件实际上有多个页面,也只会呈现第一页。 但是我们需要显示所有页面

这是我用来初始化查看器的代码部分:

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 中也找不到任何配置方法,也无法在任何示例中找到它。

.pdf 文件在查看器中转换为 2D 图纸,.pdf 文件中的每个页面应显示为单独的 2D 视图。

如果您只使用 Instantiate a Basic Viewer 中的样板代码,您将获得多个视图,如下所示:

由于您覆盖了 onDocumentLoaded,请查看 Autodesk360App.js 是如何实现 onDocumentLoaded 方法的。在第 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;
}

在您的 onDocumentLoaded 方法中,调用 Autodesk.Viewing.Document.getSubItemsWithProperties 方法以获取所有视图。

lmvdbg 处还有一行演示如何加载所有视图。