安全
福昕 PDF SDK 安卓版通过 Core SDK 提供了多种文档加密与解密能力,支持密码加密、证书加密和自定义安全处理器,以满足不同级别的文档安全保护需求。
UI Extensions 内置密码输入
如果您使用的是完整阅读器(UI Extensions),打开加密文档时会自动弹出密码输入对话框(PasswordModule),无需额外编码。
核心类
| 类 | 说明 |
|---|---|
StdSecurityHandler | 标准安全处理器,用于密码加密 |
StdEncryptData | 密码加密参数(加密算法、密钥长度、权限等) |
CertificateSecurityHandler | 证书安全处理器,用于证书加密 |
加密类型常量
通过 PDFDoc.getEncryptionType() 获取文档当前的加密类型:
| 常量 | 值 | 说明 |
|---|---|---|
e_EncryptNone | 0 | 未加密 |
e_EncryptPassword | 1 | 密码加密 |
e_EncryptCertificate | 2 | 证书加密 |
e_EncryptFoxitDRM | 3 | Foxit DRM 加密 |
e_EncryptCustom | 4 | 自定义加密 |
e_EncryptRMS | 5 | Microsoft RMS 加密 |
加密算法常量
| 常量 | 值 | 说明 |
|---|---|---|
SecurityHandler.e_CipherRC4 | 1 | RC4 算法 |
SecurityHandler.e_CipherAES | 2 | AES 算法 |
用户权限常量
通过 StdEncryptData 的 user_permissions 参数设置,可使用位或组合:
| 常量 | 值 | 说明 |
|---|---|---|
PDFDoc.e_PermPrint | 0x0004 | 允许打印 |
PDFDoc.e_PermModify | 0x0008 | 允许修改文档 |
PDFDoc.e_PermExtract | 0x0010 | 允许提取内容 |
PDFDoc.e_PermAnnotForm | 0x0020 | 允许添加注释和填写表单 |
PDFDoc.e_PermFillForm | 0x0100 | 仅允许填写表单 |
PDFDoc.e_PermExtractAccess | 0x0200 | 允许无障碍访问提取 |
PDFDoc.e_PermAssemble | 0x0400 | 允许组合文档 |
PDFDoc.e_PermPrintHigh | 0x0800 | 允许高质量打印 |
示例:密码加密
java
import com.foxit.sdk.pdf.PDFDoc;
import com.foxit.sdk.pdf.SecurityHandler;
import com.foxit.sdk.pdf.StdEncryptData;
import com.foxit.sdk.pdf.StdSecurityHandler;
PDFDoc doc = new PDFDoc("path/to/Sample.pdf");
doc.load(null);
// 构造加密参数:加密元数据、权限、AES-128
StdEncryptData encryptData = new StdEncryptData(
true,
PDFDoc.e_PermModify | PDFDoc.e_PermFillForm | PDFDoc.e_PermPrint,
SecurityHandler.e_CipherAES,
16
);
StdSecurityHandler handler = new StdSecurityHandler();
byte[] userPassword = "user123".getBytes();
byte[] ownerPassword = "owner456".getBytes();
if (handler.initialize(encryptData, userPassword, ownerPassword)) {
doc.setSecurityHandler(handler);
doc.saveAs("path/to/encrypted.pdf", PDFDoc.e_SaveFlagNormal);
}
示例:证书加密
java
import com.foxit.sdk.pdf.CertificateSecurityHandler;
CertificateSecurityHandler certHandler = new CertificateSecurityHandler();
certHandler.initialize(envelopes, SecurityHandler.e_CipherAES, true);
doc.setSecurityHandler(certHandler);
doc.saveAs("path/to/cert_encrypted.pdf", PDFDoc.e_SaveFlagNormal);
移除加密
java
doc.removeSecurity();
doc.saveAs("path/to/decrypted.pdf", PDFDoc.e_SaveFlagNormal);
API 参考
StdSecurityHandler、StdEncryptData、CertificateSecurityHandler 的完整接口说明请参阅 API 手册。