1

在我們的應用程序中,我們使用Autodesk Forge Viewer來呈現3D和2D設計文件。其他格式的文件可以很好地呈現。但是對於pdf文件,即使文件實際上有多個頁面,也只會呈現第一個頁面。 但我們需要顯示所有頁面Autodesk Forge查看器僅爲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中配置這個,也不能在任何示例中找到它。

+0

您是否試圖渲染.pdf文件或鏈接pdf的文件,但無法在瀏覽器中加載它?如果是後者,你想要加載什麼類型的文件? –

+0

@ShiyaLuo不,我試圖在查看器中加載'pdf'文件本身。它確實加載沒有任何錯誤。但問題是隻有第一頁被加載,即使pdf文件有多個頁面 – kabirbaidhya

回答

2

.pdf文件在查看器中被翻譯爲2D圖紙,.pdf文件中的每個頁面都應顯示爲單獨的2D視圖。

如果只是用來自Instantiate a Basic Viewer樣板代碼,你會得到多個視圖,像這樣:

multiple 2D views

既然你重寫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在演示如何加載所有視圖。

+0

這是沒有道理的。而'Autodesk.Viewing.Document.getSubItemsWithProperties'確實返回其他頁面。謝謝。 順便說一句,之所以我重寫'onDocumentLoaded'和'onDocumentFailedToLoad'是因爲我需要處理這些事件並在我們的應用程序中觸發必要的操作。那麼,在不重寫這些方法的情況下處理這個問題的推薦方法是什麼? – kabirbaidhya

+0

此外,示例中顯示的樣板代碼在這裏https://developer.autodesk.com/en/docs/viewer/v2/tutorials/basic-viewer/使用'viewerApp.loadDocumentWithItemAndObject(documentId);'它本身不會' t接受任何回調來處理文檔加載或我需要處理的錯誤事件。 – kabirbaidhya

+1

隨意將您需要的代碼複製並粘貼到您自己的'onDocumentLoaded'函數中。 –

相關問題