关闭文档
福昕 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('文档已关闭');
}
);
在初始化参数中设置默认回调
如果应用中需要统一处理关闭前后的逻辑,可以在创建 PDFUI 或 PDFViewer 时,通过 customs.closeDocBefore 和 customs.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();
打开新文档时的关闭流程
调用 openPDFByFile 或 openPDFByHttpRangeRequest 打开新文档前,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'
});
错误处理
如果关闭前回调返回 false,close() 返回的 Promise 会进入 rejected 状态。建议在业务代码中按需捕获。
javascript
try {
await pdfui.close(function() {
return false;
});
} catch (error) {
console.log('文档关闭被取消', error);
}
注意事项
- 不要在关闭流程中继续使用旧的
PDFDocRender或PDFPageRender对象。 - 如果关闭前需要保存注释、表单或文档修改,请在
closeDocBefore中完成或阻止关闭。 - 打开新文档前会触发当前文档关闭流程,业务确认逻辑需要同时考虑“主动关闭”和“切换文档”两种场景。