【Foxit PDF SDK for Web】如何配置查看者和文档的权限

在实际的应用场景中,我们往往需要对查看者或者文档本身配置一些权限。 这篇文章将详细介绍如何在 WebPDF SDK 中配置这些权限。

查看者权限设置

*      查看者的文档权限

我们可以在初始化PDFUIPDFViewer时,在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 informationpageIndex:",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);