PDFViewer 多实例
概念解释
PDFViewer 多实例功能包含以下核心概念:
多实例: 在同一网页中创建和管理多个独立的 PDFViewer 实例的能力,无需使用 iframe。每个实例可以加载、显示和操作独立的 PDF 文档,互不干扰。
PDFViewer: Foxit PDF SDK for Web 的重要入口类。渲染 PDF 文档时需要实例化此类。
版本支持说明
版本要求
从 9.0.0 版本开始支持多实例功能。在此之前的版本仅支持单实例。
实现多实例
基础步骤
实现多实例的关键是为每个 PDFViewer 实例创建独立的 DOM 节点。以下是基础实现示例:
javascript
var PDFViewer = PDFViewCtrl.PDFViewer;
function createPDFViewer(containerId) {
var eContainer = document.getElementById(containerId);
var pdfViewer = new PDFViewer({
libPath: '../../../lib',
jr: {
licenseSN: licenseSN,
licenseKey: licenseKey,
},
customs: {
ScrollWrap: PDFViewCtrl.CustomScrollWrap
}
});
var eRenderTo = eContainer.querySelector('.pdf-viewer');
pdfViewer.init(eRenderTo);
return pdfViewer;
}
完整示例
可以在 Full 包的 examples/PDFViewCtrl/multiple-case
目录下查看完整示例代码。
运行示例
下面是一个完整的可运行实例:
html
<div class="foxit-web-pdf-app" id="pdf-app-0">
<div class="pdf-viewer-container">
<div class="pdf-viewer"></div>
</div>
</div>
<div class="foxit-web-pdf-app" id="pdf-app-1">
<div class="pdf-viewer-container">
<div class="pdf-viewer"></div>
</div>
</div>
<style>
body {
display: flex;
overflow: hidden;
flex-direction: row;
}
.foxit-web-pdf-app {
display: flex;
flex-direction: column;
flex: 1;
height: 100vh;
min-width: 50vw;
border-right: 1px solid #ddd;
box-sizing: border-box;
position: relative;
}
.pdf-viewer-container {
flex: 1;
overflow: scroll;
min-width: 0;
}
.fv__viewer-single-view-mode .fv__pdf-view-mode-item {
--facing-margin: 0;
}
.continuous-view-mode .fv__pdf-view-mode-item.fv__pdf-view-mode-item {
--facing-margin: auto;
margin-top: 8px;
}
</style>
<script>
const libPath = window.top.location.origin + '/lib';
var PDFViewer = PDFViewCtrl.PDFViewer;
function createPDFViewer(containerId) {
var eContainer = document.getElementById(containerId);
var pdfViewer = new PDFViewer({
libPath: libPath,
jr: {
fontPath: 'http://webpdf.foxitsoftware.com/webfonts',
licenseSN: licenseSN,
licenseKey: licenseKey,
},
customs: {
ScrollWrap: PDFViewCtrl.CustomScrollWrap
}
});
var eRenderTo = eContainer.querySelector('.pdf-viewer');
pdfViewer.init(eRenderTo);
return pdfViewer;
}
// 创建两个viewer实例
var viewer1 = createPDFViewer('pdf-app-0');
var viewer2 = createPDFViewer('pdf-app-1');
// 加载不同的PDF文件
viewer1.openPDFByHttpRangeRequest({
range: {
url: getAssetPath("/assets/1-feature-example_default-setup.pdf"),
},
}, {fileName: "1-feature-example_default-setup.pdf"});
viewer2.openPDFByHttpRangeRequest({
range: {
url: getAssetPath("/assets/PDFViewer_Multiple_Instances.pdf"),
},
}, {fileName: "PDFViewer_Multiple_Instances.pdf"});
function getAssetPath(filePath) {
var pathname = window.top.location.pathname;
if (pathname.indexOf('/docs/developer-guide') === 0) {
return ('/docs/developer-guide/' + filePath).replace('//', '/');
}
return filePath;
}
</script>
应用场景
PDFViewer 多实例功能适用于以下场景:
- 法律领域:同时查阅多个案件文件
- 学术研究:对比多个相关论文
示例参考
可以参考 Full 包中的 /examples/PDFViewCtrl/overlay-comparison
示例了解更多应用场景。