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

时间:2016-08-19 03:52:34

标签: javascript autodesk autodesk-forge autodesk-viewer autodesk-model-derivative

在我们的应用程序中,我们使用Autodesk Forge Viewer来渲染3D和2D设计文件。具有其他格式的文件可以很好地呈现。但是对于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 个答案:

答案 0 :(得分:2)

var item_width = $('.item-slider').width(); var item_margin = (item_width-600)/5; //sum of 4 elements divided by 5 margin spaces var items = $('ul.item-slider>li'); var x = 0; $.each(items,function(index){ $(this).data("id",x); x = x+1; }); function needToCall(){ $.each(items,function(index){ var pos = $(this).data('id'); if($(this).data('id') < 1){ var left =(pos-1) * 150 + (pos-1) * 10; -Math.abs(left); $(this).css("left",left); } else if($(this).data('id') === 1){ $(this).css("left", 0); console.log("positon is set to" + $(this).css("left")); } else if($(this).data('id') > 1){ var left = (pos-1) * 150 + (pos-1) * 10; $(this).css("left", left); console.log("positon is set to " + $(this).css("left")); } }); } $(".explore_matches > button[name = 'pre']").click(function(){ $.each(items,function(index){ console.log("each working"); $(this).data('id',"abc"); }) needToCall(); console.log("skipped"); }); 个文件在查看器中翻译为2D工作表,.pdf文件中的每个页面都应显示为单独的2D视图。

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

multiple 2D views

由于您覆盖.pdf,请查看Autodesk360App.js实施onDocumentLoaded方法的方式。在第621行:

onDocumentLoaded

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方法获取所有观看次数。

lmvdbg处还有一行说明了如何加载所有视图。