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 处还有一行演示如何加载所有视图。
在我们的应用程序中,我们使用 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 处还有一行演示如何加载所有视图。