1

在我们的应用程序中,我们使用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 文档中也找不到任何配置它的方法,也无法在任何示例中找到它。

4

1 回答 1

2

.pdf文件在查看器中被翻译为 2D 图纸,.pdf文件中的每一页都应显示为单独的 2D 视图。

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

多个 2D 视图

既然您覆盖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也有一行演示如何加载所有视图。

于 2016-08-19T06:46:18.577 回答