PDF 权限
PDF 权限模块用于确保 PDF 文档的安全性,提供加密、文档权限、解密、移除密码功能,以保障用户对文档的安全控制和有效管理。
加密
加密功能分为用户密码和所有者密码两部分。用户密码用于打开文档,确保只有授权的用户可以访问文档内容。当设置用户密码时,通常会限制一些诸如修改、复制或打印等文档权限。而所有者密码不仅可以打开文档,还能解锁所有被禁止的权限,使用户能够对文档进行修改、复制或打印等操作。双层密码体系旨在提供更加灵活和安全的文档访问和管理方式。
ComPDFKit 提供多种加密算法和权限设置,根据需求使用合适的算法,设置自定义权限以保护文档。
以下是加密的步骤:
设定不同的用户密码和所有者密码。
创建权限信息类。
设定加密算法。
使用用户密码和所有者密码,权限信息,算法对文档加密。
以下是加密 PDF 文档的示例代码:
let url = URL(fileURLWithPath: "File Path")
let document = CPDFDocument(url: url)
let surl = URL(fileURLWithPath: "")
let options: [CPDFDocumentWriteOption: Any] = [
.ownerPasswordOption: "userPassword",
.userPasswordOption: "ownerPassword",
.encryptionLevelOption: CPDFDocumentEncryptionLevel.AES128,
.allowsPrintingOption: true,
.allowsCopyingOption: false
]
document?.write(to: surl, withOptions: options)
2
3
4
5
6
7
8
9
10
11
12
13
NSURL *url = [NSURL fileURLWithPath:@"File Path"];
CPDFDocument *document = [[CPDFDocument alloc] initWithURL:url];
NSURL *surl = [NSURL fileURLWithPath:@""];
NSDictionary *options = @{CPDFDocumentOwnerPasswordOption : @"userPassword",
CPDFDocumentUserPasswordOption : @"ownerPassword",
CPDFDocumentEncryptionLevelOption : @(CPDFDocumentEncryptionLevelAES256),
CPDFDocumentAllowsPrintingOption : @(YES),
CPDFDocumentAllowsCopyingOption : @(NO),
};
[document writeToURL:surl withOptions:options];
2
3
4
5
6
7
8
9
10
11
12
不同的加密算法及其描述:
算法 | 描述 | 枚举值 |
---|---|---|
无 | 没有加密 | CPDFDocumentEncryptionLevelNoEncryptAlgo |
RC4 | 对明文使用密钥进行异或运算加密 | CPDFDocumentEncryptionLevelRC4 |
AES-128 | 使用128位密钥AES算法加密 | CPDFDocumentEncryptionLevelAES128 |
AES-256 | 使用256位密钥AES算法加密 | CPDFDocumentEncryptionLevelAES256 |
文档权限
PDF 规范中,支持对文档的多种权限进行设置,通过设置这些权限,可以限制用户只能做出符合预期的行为。
PDF 规范定义了如下所示的权限:
- 打印 - 打印文档。
- 高质量打印 - 高保真打印文档。
- 复制 - 复制文档内容。
- 文档更改 - 修改文档内容,但不包括文档属性。
- 文档组合 - 插入、删除和旋转页面。
- 注释 - 创建或修改文档注释,包括表单字段条目。
- 表单字段输入 - 修改表单字段条目,即使不能编辑文档注释。
以下是查看文档权限的步骤:
1.获取文档权限信息。
2.通过文档权限信息查看指定的权限。
以下是查看文档权限的示例代码:
let url = URL(fileURLWithPath: "File Path")
let document = CPDFDocument(url: url)
var commandLineStr = ""
commandLineStr.append("Printing: \(document!.allowsPrinting ? "true" : "false")\n")
commandLineStr.append("Content Copying: \(document!.allowsCopying ? "true" : "false")\n")
2
3
4
5
6
NSURL *url = [NSURL fileURLWithPath:@"File Path"];
CPDFDocument *document = [[CPDFDocument alloc] initWithURL:url];
NSString *commandLineStr = "";
[commandLineStr stringByAppendingFormat:@"Printing: %@\n", document.allowsPrinting ? @"true" : @"flase"];
commandLineStr = [commandLineStr stringByAppendingFormat:@"Content Copying:: %@\n", document.allowsCopying ? @"true" : @"flase"];
2
3
4
5
6
解密
访问具有密码保护的 PDF 文档,需要输入密码。ComPDFKit 提供了两种密码:用户密码和所有者密码。用户密码用于打开文档,确保只有授权的用户可以访问文档内容。而所有者密码不仅打开文档,还解锁所有权限,使用户能够对文档进行修改、打印或复制等操作。双层密码体系旨在提供更加灵活和安全的文档访问和管理方式。
使用不同级别的密码获取不同的权限级别。
解密的步骤如下:
打开文档时判断文档是否已被加密。
对于已加密的文档,输入用户密码或所有者密码均可打开文档。
以下是解密 PDF 文档的示例代码:
let url = URL(fileURLWithPath: "File Path")
let document = CPDFDocument(url: url)
if document?.isLocked == true {
document?.unlock(withPassword: "password")
}
2
3
4
5
6
NSURL *url = [NSURL fileURLWithPath:@""];
CPDFDocument *document = [[CPDFDocument alloc] initWithURL:url];
if (document.isLocked) {
[document unlockWithPassword:@"password"];
}
2
3
4
5
6
删除密码
删除密码是指用户在已经获得了所有者权限的情况下,将文档的所有者密码和用户密码删除并另存为新的文档,新的文档将不再需要密码即可打开且默认可使用所有权限。
删除密码的步骤如下:
解锁文档并获取所有权限。
将解锁后的文档保存。
以下是删除密码的示例代码:
let url = URL(fileURLWithPath: "File Path")
let document = CPDFDocument(url: url)
if document?.isLocked == true {
let surl = URL(fileURLWithPath: "")
document?.unlock(withPassword: "password")
document?.writeDecrypt(to: surl)
}
2
3
4
5
6
7
8
NSURL *url = [NSURL fileURLWithPath:@""];
CPDFDocument *document = [[CPDFDocument alloc] initWithURL:url];
if (document.isLocked) {
NSURL *surl = [NSURL fileURLWithPath:@""];
[document unlockWithPassword:@"password"];
[document writeDecryptToURL:surl];
}
2
3
4
5
6
7
8