Sample code for 30+ languages & platforms
Objective-C Requires Chilkat v11.7.0+

Find Out Whether a PDF Needs a Password Before Loading It

See more PDF Protection Examples

Demonstrates PreLoadCheck, which examines a PDF file without loading it and without any password. It reports whether the file is encrypted, by which method and algorithm, whether a password is needed to open it, and what its permissions are. An application uses it to decide whether to ask for a password, or which certificate it needs, before calling LoadFile. PreLoadCheckBd does the same for a PDF held in memory.

Chilkat Objective-C Downloads

Objective-C
#import <CkoPdf.h>
#import <CkoJsonObject.h>

BOOL success = NO;

//  This example requires the Chilkat API to have been previously unlocked.
//  See Global Unlock Sample for sample code.

//  The PDF used in this example is available at two_page_memo.pdf

//  The PDF used in this example is available at encrypted_user_password.pdf

//  The PDF used in this example is available at no_copy_permission.pdf

CkoPdf *pdf = [[CkoPdf alloc] init];
CkoJsonObject *info = [[CkoJsonObject alloc] init];

//  A PDF that is not encrypted.  Nothing but "encrypted" is reported for it.
success = [pdf PreLoadCheck: @"qa_data/pdf/two_page_memo.pdf" jsonOut: info];
if (success == NO) {
    NSLog(@"%@",pdf.LastErrorText);
    return;
}

NSLog(@"%@",@"two_page_memo.pdf");
NSLog(@"%@%d",@"  encrypted: ",[info BoolOf: @"encrypted"]);

//  A PDF that needs a password to open.
success = [pdf PreLoadCheck: @"qa_data/pdf/encrypted_user_password.pdf" jsonOut: info];
if (success == NO) {
    NSLog(@"%@",pdf.LastErrorText);
    return;
}

NSLog(@"%@",@"encrypted_user_password.pdf");
NSLog(@"%@%d",@"  encrypted: ",[info BoolOf: @"encrypted"]);
NSLog(@"%@%@",@"  method: ",[info StringOf: @"method"]);
NSLog(@"%@%@",@"  algorithm: ",[info StringOf: @"algorithm"]);
NSLog(@"%@%d",@"  openPasswordRequired: ",[info BoolOf: @"openPasswordRequired"]);

//  A PDF that opens without a password but is restricted.  The permissions are readable without
//  any password.
success = [pdf PreLoadCheck: @"qa_data/pdf/no_copy_permission.pdf" jsonOut: info];
if (success == NO) {
    NSLog(@"%@",pdf.LastErrorText);
    return;
}

NSLog(@"%@",@"no_copy_permission.pdf");
NSLog(@"%@%d",@"  encrypted: ",[info BoolOf: @"encrypted"]);
NSLog(@"%@%d",@"  openPasswordRequired: ",[info BoolOf: @"openPasswordRequired"]);
NSLog(@"%@%d",@"  may copy: ",[info BoolOf: @"permissions.copy"]);

//  The typical use: ask for a password only when one is needed, then load.
success = [pdf PreLoadCheck: @"qa_data/pdf/encrypted_user_password.pdf" jsonOut: info];
if (success == NO) {
    NSLog(@"%@",pdf.LastErrorText);
    return;
}

if ([info BoolOf: @"openPasswordRequired"] == YES) {
    //  An application would prompt for the password here.
    pdf.UserPassword = @"secret";
}

success = [pdf LoadFile: @"qa_data/pdf/encrypted_user_password.pdf"];
if (success == NO) {
    NSLog(@"%@",pdf.LastErrorText);
    return;
}

NSLog(@"%@%d",@"loaded, pages: ",[pdf.NumPages intValue]);

//  Sample output:

//  two_page_memo.pdf
//    encrypted: False
//  encrypted_user_password.pdf
//    encrypted: True
//    method: password
//    algorithm: rc4-128
//    openPasswordRequired: True
//  no_copy_permission.pdf
//    encrypted: True
//    openPasswordRequired: False
//    may copy: False
//  loaded, pages: 1