Skip to content

关闭文档

福昕 PDF SDK(Web)通过 PDFViewer.close 关闭当前已打开的文档。PDFUI 基于 PDFViewer 封装,因此在使用 UIExtension 时也可以通过 pdfui.close() 关闭文档。

关闭文档会释放当前文档对应的渲染对象、清理激活状态,并触发文档关闭相关流程。打开新文档时,SDK 也会先尝试关闭当前文档。

基本用法

javascript
await pdfui.close();

如果您使用 PDFViewCtrl:

javascript
await pdfViewer.close();

当当前没有打开文档时,调用 close() 会直接完成,不会抛出错误。

关闭前确认

close() 支持传入关闭前回调。如果回调返回 false,SDK 将阻止关闭文档。

javascript
await pdfui.close(async function(pdfDoc) {
    const confirmed = window.confirm('是否关闭当前文档?');
    return confirmed;
});

这适合用于以下场景:

  • 文档存在未保存的修改,需要用户确认。
  • 关闭前需要检查业务状态。
  • 关闭前需要异步保存数据。

关闭后回调

close() 的第二个参数是关闭后的回调,可用于清理业务状态或更新界面。

javascript
await pdfui.close(
    async function(pdfDoc) {
        return window.confirm('是否关闭当前文档?');
    },
    function() {
        console.log('文档已关闭');
    }
);

在初始化参数中设置默认回调

如果应用中需要统一处理关闭前后的逻辑,可以在创建 PDFUIPDFViewer 时,通过 customs.closeDocBeforecustoms.closeDocAfter 设置默认回调。

javascript
const pdfui = new UIExtension.PDFUI({
    viewerOptions: {
        libPath: './lib',
        jr: {
            licenseSN: licenseSN,
            licenseKey: licenseKey
        },
        customs: {
            closeDocBefore: async function(pdfDoc) {
                return window.confirm('是否关闭当前文档?');
            },
            closeDocAfter: function() {
                console.log('文档关闭完成');
            }
        }
    },
    renderTo: '#pdf-ui'
});

直接调用 close() 且不传入参数时,SDK 会使用初始化参数中的默认回调。

javascript
await pdfui.close();

打开新文档时的关闭流程

调用 openPDFByFileopenPDFByHttpRangeRequest 打开新文档前,SDK 会先关闭当前文档。因此,如果您配置了 closeDocBefore,该回调也会影响“打开新文档”流程。

javascript
const pdfui = new UIExtension.PDFUI({
    viewerOptions: {
        libPath: './lib',
        jr: {
            licenseSN: licenseSN,
            licenseKey: licenseKey
        },
        customs: {
            closeDocBefore: async function() {
                // 返回 false 时,当前文档不会被关闭,新文档也不会继续打开。
                return window.confirm('关闭当前文档并打开新文档?');
            }
        }
    },
    renderTo: '#pdf-ui'
});

错误处理

如果关闭前回调返回 falseclose() 返回的 Promise 会进入 rejected 状态。建议在业务代码中按需捕获。

javascript
try {
    await pdfui.close(function() {
        return false;
    });
} catch (error) {
    console.log('文档关闭被取消', error);
}

注意事项

  • 不要在关闭流程中继续使用旧的 PDFDocRenderPDFPageRender 对象。
  • 如果关闭前需要保存注释、表单或文档修改,请在 closeDocBefore 中完成或阻止关闭。
  • 打开新文档前会触发当前文档关闭流程,业务确认逻辑需要同时考虑“主动关闭”和“切换文档”两种场景。