# PDFViewer 多实例

# 概念解释

  • 多实例:在同一个网页中,不通过 iframe 等手段,同时创建和管理多个独立的PDFViewer实例的能力。每个实例可以加载、显示和操作独立的PDF文档,相互之间不会产生干扰。
  • PDFViewer: 是 Foxit PDF SDK For Web 的一个重要入口类,通过 Foxit PDF SDK For Web 渲染 PDF 文档,需要实例化这个类。

# 之前版本的限制

在 9.0.0 版本之前,只支持单一 PDFViewer 实例的创建和使用,这限制了开发者同时加载和展示多个PDF文档的能力(虽然可以通过 iframe 实现,但是 iframe 也存在诸多缺点,已经不被建议使用)。经过一番升级改进后,从 9.0.0 版本开始,支持多实例。

# 如何实现 PDFViewer 多实例

实现多个 PDFViewer 实例之前,需要先创建多个 DOM 实例,这是很有必要的,每个 PDFViewer 实例都需要渲染在指定的 DOM 节点中, 一下是一段缩减后的代码示例:

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 eSelectPDFFile = eContainer.querySelector('[name=select-pdf-file]');
    var eRenderTo = eContainer.querySelector('.pdf-viewer');

    pdfViewer.init(eRenderTo);
    return pdfViewer;
}

完整的代码实例,请参考 Full 包中的示例: examples/PDFViewCtrl/multiple-case

以下是一个可运行的实例,请点击 run 按钮预览效果:

# 多实例的应用场景

在法律领域中同时查阅多个案件文件,或在学术研究中对比多个相关论文。可以参考 Full 包中的 /examples/PDFViewCtrl/overlay-comparison 示例。