Signatures
Foxit PDF SDK for iOS provides digital signature create, verify, remove, and property APIs via Core SDK. Recipients can verify document origin and whether content was altered.
UI Extensions built-in signatures
With the full reader (UI Extensions), the SignatureModule handles signing and verification—no extra code required.
Default signature types
The SDK includes default signature callbacks for:
Adobe.PPKLite+adbe.pkcs7.detachedAdobe.PPKLite+adbe.pkcs7.sha1
Core class
| Class | Description |
|---|---|
FSSignature | Signature object. Create with [FSPDFPage addSignature:], retrieve with [FSPDFDoc getSignature:] |
Digest algorithm constants
| Constant | Description |
|---|---|
FSSignatureDigestSHA1 | SHA-1 |
FSSignatureDigestSHA256 | SHA-256 |
FSSignatureDigestSHA384 | SHA-384 |
FSSignatureDigestSHA512 | SHA-512 |
Signature key constants
Use setKeyValue:value::
| Constant | Description |
|---|---|
FSSignatureKeyNameSigner | Signer |
FSSignatureKeyNameLocation | Location |
FSSignatureKeyNameReason | Reason |
FSSignatureKeyNameContactInfo | Contact info |
FSSignatureKeyNameDN | Distinguished name |
FSSignatureKeyNameText | Custom text |
Appearance flag constants
Use setAppearanceFlags::
| Constant | Description |
|---|---|
FSSignatureAPFlagSigner | Show signer |
FSSignatureAPFlagReason | Show reason |
FSSignatureAPFlagSigningTime | Show signing time |
FSSignatureAPFlagDN | Show DN |
FSSignatureAPFlagLocation | Show location |
FSSignatureAPFlagBitmap | Show image |
FSSignatureAPFlagText | Show custom text |
Example: sign and verify
objc
#import <FoxitRDK/FSPDFObjC.h>
FSPDFDoc *doc = [[FSPDFDoc alloc] initWithPath:@"path/to/Sample.pdf"];
[doc load:nil];
FSPDFPage *page = [doc getPage:0];
// Add signature field
FSRectF *rect = [[FSRectF alloc] initWithLeft1:100 bottom1:600 right1:300 top1:700];
FSSignature *signature = [page addSignature:rect];
// Appearance
[signature setAppearanceFlags:
FSSignatureAPFlagSigner | FSSignatureAPFlagDN |
FSSignatureAPFlagReason | FSSignatureAPFlagSigningTime |
FSSignatureAPFlagLocation];
// Signature metadata
[signature setKeyValue:FSSignatureKeyNameSigner value:@"John Smith"];
[signature setKeyValue:FSSignatureKeyNameLocation value:@"Beijing"];
[signature setKeyValue:FSSignatureKeyNameReason value:@"Document approval"];
[signature setFilter:@"Adobe.PPKLite"];
[signature setSubFilter:@"adbe.pkcs7.detached"];
// Sign
NSString *certPath = @"path/to/cert.pfx";
NSString *savePath = @"path/to/signed.pdf";
FSProgressive *progressive = [signature startSign:certPath
cert_password:@"123"
digest_algorithm:FSSignatureDigestSHA256
save_path:savePath
client_data:nil
pause:nil];
FSProgressState state = FSProgressiveToBeContinued;
while (state == FSProgressiveToBeContinued) {
state = [progressive resume];
}
// Verify all signatures in signed document
FSPDFDoc *signedDoc = [[FSPDFDoc alloc] initWithPath:savePath];
[signedDoc load:nil];
int count = [signedDoc getSignatureCount];
for (int i = 0; i < count; i++) {
FSSignature *sig = [signedDoc getSignature:i];
if (!sig || [sig isEmpty]) continue;
FSProgressive *verifyProgress = [sig startVerify:nil pause:nil];
FSProgressState vState = FSProgressiveToBeContinued;
while (vState == FSProgressiveToBeContinued) {
vState = [verifyProgress resume];
}
unsigned int verifiedState = [sig getState];
if (verifiedState & FSSignatureStateVerifyValid) {
NSLog(@"Signature %d is valid", i);
}
}API reference
See the API reference for FSSignature.