在实际的应用场景中,我们往往需要对查看者或者文档本身配置一些权限。 这篇文章将详细介绍如何在 WebPDF SDK 中配置这些权限。
查看者权限设置
查看者的文档权限
我们可以在初始化PDFUI或PDFViewer时,在viewerOptions参数中配置查看器相关的权限,并通过API getDocPermissions来实现控制的权限。 您可以参考 API 参考中的 PDFViewCtrl.PDF.constant.User_Permissions 去获取具体权限的详细信息。
示例代码如下:
var pdfui = new PDFUI({
viewerOptions: {
……
customs:{
getDocPermissions: function () {
//you can operate text annotations, fill in interactive form fields and print the document.
return PDFViewCtrl.PDF.constant.User_Permissions.annotForm | PDFViewCtrl.PDF.constant.User_Permissions.print
},
}
},
……
});
查看者的注释权限
有两种方法可以配置注释权限。 不同的方式可以控制不同注释的相关权限,您可以根据需要选择其一。
1. 通过 API getAnnotPermissions 配置权限。 详细权限值请参考PDFViewCtrl.constants.ANNOTATION_PERMISSION。
示例代码如下:
var ANNOTATION_PERMISSION = PDFViewCtrl.constants.ANNOTATION_PERMISSION;
var pdfui = new PDFUI({
viewerOptions: {
……
customs:{
getAnnotPermissions: function(annot) {
if(annot.getTitle() === userName){
return Promise.resolve(JSON.stringify([ANNOTATION_PERMISSION.fully]))
}else{
return Promise.resolve(JSON.stringify([ANNOTATION_PERMISSION.replyable]))
}
}
}
},
……
});
2. 通过注释标志配置权限。 注释标志是 PDF 标准中定义的与注释相关的权限。 您可以参考 PDFViewCtrl.PDF.annots.constant.Annot_Flags 获取更多详细信息。
当当前用户与注解作者一致时,将拥有所有权限,反之将被被关闭权限。示例代码如下:
var userName = "";
pdfui.addViewerEventListener(PDFViewCtrl.Events.tapAnnotation , function(annotRender){
var annot = annotRender.getAnnot();
pdfui.getAnnotManager(annot).then(function(annotManager) {
var annotFlag = annotManager.getAnnotFlag(annot);
console.log("===current annotation information:pageIndex:",annot.getPage().info.index,"type:",annot.info.type,",title:",annot.info.title,':permissions');
console.log('checkHidden',annotFlag.checkHidden())
console.log('checkInvisible',annotFlag.checkInvisible())
console.log('checkLocked',annotFlag.checkLocked())
console.log('checkLockedContents',annotFlag.checkLockedContents())
console.log('checkNoRotate',annotFlag.checkNoRotate())
console.log('checkNoView',annotFlag.checkNoView())
console.log('checkNoZoom',annotFlag.checkNoZoom())
console.log('checkPrint',annotFlag.checkPrint())
console.log('checkReadOnly',annotFlag.checkReadOnly())
console.log('checkToggleNoView',annotFlag.checkToggleNoView())
pdfui.redraw(true);
})
})
pdfui.getUserName().then(function (name){
userName = name;
});
pdfui.getAnnotManager().then(function(annotManager) {
annotManager.setViewerAnnotFlag(function(annot) {
if(annot.getTitle() === userName){
return 0;
}else{
return PDFViewCtrl.PDF.annots.constant.Annot_Flags.locked;
}
});
pdfui.redraw(true);
});
附加权限
附加权限目前只支持下载权限,允许用户下载PDF文件。 有关详细信息,请参阅 PDFViewCtrl.PDF.constant.Additional_Permission。
示例代码如下:
var pdfui = new PDFUI({
viewerOptions: {
……
customs:{
getAdditionalPerm:function(){
//return 0 means no permission to download the document.
return 0;
},
}
},
……
});
文档权限设置
文档权限
Foxit PDF SDK for Web 可以通过设置文档密码来配置文档权限。 可以给文档设置ownerPassword,然后配置文档相关的权限。
请参阅 API 参考中的 PDFViewCtrl.PDF.constant.User_Permissions 以获取特定权限的详细信息。 示例代码如下:
//Set the password of owner to 'abc', and if non-owner open the document, he only read the document. Only when owner open the document with the right password, he can do anything with the document.
var test = {userPassword:'',ownerPassword:'abc',permission:0,cipher:'aes256',isEncryptMetaData:true,expected:true}
var pdfviewer = await pdfui.getPDFViewer();
var pdfdoc = await pdfviewer.getCurrentPDFDoc();
await pdfdoc.setPasswordAndPermission(test.userPassword,test.ownerPassword,test.permission,test.cipher,test.isEncryptMetaData);
注释权限
和如上的查看者注解权限一样,我们可以通过注解flags来配置注解的权限。示例代码如下:
var pdfViewer = await pdfui.getPDFViewer();
var pdfDoc = await pdfViewer.getCurrentPDFDoc();
var pdfPage = await pdfDoc.getPageByIndex(0);
//Add a square annotation and set the flag to locked.
var annots = await pdfPage.addAnnot({
type:"square",
rect:{
left:300,
right:400,
bottom:300,
top:400
}
})
annots[0].setFlags(PDFViewCtrl.PDF.annots.constant.Annot_Flags.locked);
表单域权限
我们可以通过设置form field flag来配置Form Field的权限,详见PDFViewCtrl.PDF.form.constant.Field_Flag。示例代码如下:
var pdfViewer = await pdfui.getPDFViewer();
var pdfdoc = await pdfViewer.getCurrentPDFDoc();
await pdfdoc.loadPDFForm();
let form = pdfdoc.getPDFForm ();
var control = {pageIndex:0,fieldName:'textField1',fieldType:PDFViewCtrl.PDF.form.constant.Field_Type.Text,rect:{left: 100,right: 250,top: 430,bottom: 330}};
var ret = await form.addControl(control.pageIndex,control.fieldName,control.fieldType,control.rect);
var field = await form.getField('textField1');
await field.setValue('123');
await field.setFlags(PDFViewCtrl.PDF.form.constant.Field_Flag.ReadOnly);