1

В нашем приложении мы используем Autodesk Forge Viewer для создания 3D-и 2D-файлов дизайна. Файлы с другими форматами получаются очень хорошо. Но в случае файлов pdf обрабатывается только первая страница, даже если файл имеет несколько страниц. Но нам нужно отобразить все страницы.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, а также не смог найти его в любом образце.

+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. –