// // CGPDFDocument.m // Reader v2.8.6 // // Created by Julius Oklamcak on 2011-07-01. // Copyright © 2011-2015 Julius Oklamcak. All rights reserved. // // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights to // use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies // of the Software, and to permit persons to whom the Software is furnished to // do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in all // copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN // CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // #import "CGPDFDocument.h" // // CGPDFDocumentRef CGPDFDocumentCreateUsingUrl(CFURLRef, NSString *) function // CGPDFDocumentRef CGPDFDocumentCreateUsingUrl(CFURLRef theURL, NSString *password) { CGPDFDocumentRef thePDFDocRef = NULL; // CGPDFDocument if (theURL != NULL) // Check for non-NULL CFURLRef { thePDFDocRef = CGPDFDocumentCreateWithURL(theURL); if (thePDFDocRef != NULL) // Check for non-NULL CGPDFDocumentRef { if (CGPDFDocumentIsEncrypted(thePDFDocRef) == TRUE) // Encrypted { // Try a blank password first, per Apple's Quartz PDF example if (CGPDFDocumentUnlockWithPassword(thePDFDocRef, "") == FALSE) { // Nope, now let's try the provided password to unlock the PDF if ((password != nil) && (password.length > 0)) // Not blank? { char text[128]; // char array buffer for the string conversion [password getCString:text maxLength:126 encoding:NSUTF8StringEncoding]; if (CGPDFDocumentUnlockWithPassword(thePDFDocRef, text) == FALSE) // Log failure { #ifdef DEBUG NSLog(@"CGPDFDocumentCreateUsingUrl: Unable to unlock [%@] with [%@]", theURL, password); #endif } } } if (CGPDFDocumentIsUnlocked(thePDFDocRef) == FALSE) // Cleanup unlock failure { (void)(CGPDFDocumentRelease(thePDFDocRef)), thePDFDocRef = NULL; } } } } else // Log an error diagnostic { #ifdef DEBUG NSLog(@"CGPDFDocumentCreateUsingUrl: theURL == NULL"); #endif } return thePDFDocRef; } // // CGPDFDocumentRef CGPDFDocumentCreateUsingData(CGDataProviderRef, NSString *) function // CGPDFDocumentRef CGPDFDocumentCreateUsingData(CGDataProviderRef dataProvider, NSString *password) { CGPDFDocumentRef thePDFDocRef = NULL; // CGPDFDocument if (dataProvider != NULL) // Check for non-NULL CGDataProviderRef { thePDFDocRef = CGPDFDocumentCreateWithProvider(dataProvider); if (thePDFDocRef != NULL) // Check for non-NULL CGPDFDocumentRef { if (CGPDFDocumentIsEncrypted(thePDFDocRef) == TRUE) // Encrypted { // Try a blank password first, per Apple's Quartz PDF example if (CGPDFDocumentUnlockWithPassword(thePDFDocRef, "") == FALSE) { // Nope, now let's try the provided password to unlock the PDF if ((password != nil) && (password.length > 0)) // Not blank? { char text[128]; // char array buffer for the string conversion [password getCString:text maxLength:126 encoding:NSUTF8StringEncoding]; if (CGPDFDocumentUnlockWithPassword(thePDFDocRef, text) == FALSE) // Log failure { #ifdef DEBUG NSLog(@"CGPDFDocumentCreateUsingData: Unable to unlock data with '%@'", password); #endif } } } if (CGPDFDocumentIsUnlocked(thePDFDocRef) == FALSE) // Cleanup unlock failure { (void)(CGPDFDocumentRelease(thePDFDocRef)), thePDFDocRef = NULL; } } } } else // Log an error diagnostic { #ifdef DEBUG NSLog(@"CGPDFDocumentCreateUsingData: theURL == NULL"); #endif } return thePDFDocRef; } // // BOOL CGPDFDocumentUrlNeedsPassword(CFURLRef, NSString *) function // BOOL CGPDFDocumentUrlNeedsPassword(CFURLRef theURL, NSString *password) { BOOL needPassword = NO; // Default flag if (theURL != NULL) // Check for non-NULL CFURLRef { CGPDFDocumentRef thePDFDocRef = CGPDFDocumentCreateWithURL(theURL); if (thePDFDocRef != NULL) // Check for non-NULL CGPDFDocumentRef { if (CGPDFDocumentIsEncrypted(thePDFDocRef) == TRUE) // Encrypted { // Try a blank password first, per Apple's Quartz PDF example if (CGPDFDocumentUnlockWithPassword(thePDFDocRef, "") == FALSE) { // Nope, now let's try the provided password to unlock the PDF if ((password != nil) && (password.length > 0)) // Not blank? { char text[128]; // char array buffer for the string conversion [password getCString:text maxLength:126 encoding:NSUTF8StringEncoding]; if (CGPDFDocumentUnlockWithPassword(thePDFDocRef, text) == FALSE) { needPassword = YES; } } else { needPassword = YES; } } } CGPDFDocumentRelease(thePDFDocRef); // Cleanup CGPDFDocumentRef } } else // Log an error diagnostic { #ifdef DEBUG NSLog(@"CGPDFDocumentUrlNeedsPassword: theURL == NULL"); #endif } return needPassword; } // // BOOL CGPDFDocumentUrlNeedsPassword(CGDataProviderRef, NSString *) function // BOOL CGPDFDocumentDataNeedsPassword(CGDataProviderRef dataProvider, NSString *password) { BOOL needPassword = NO; // Default flag if (dataProvider != NULL) // Check for non-NULL CGDataProviderRef { CGPDFDocumentRef thePDFDocRef = CGPDFDocumentCreateWithProvider(dataProvider); if (thePDFDocRef != NULL) // Check for non-NULL CGPDFDocumentRef { if (CGPDFDocumentIsEncrypted(thePDFDocRef) == TRUE) // Encrypted { // Try a blank password first, per Apple's Quartz PDF example if (CGPDFDocumentUnlockWithPassword(thePDFDocRef, "") == FALSE) { // Nope, now let's try the provided password to unlock the PDF if ((password != nil) && (password.length > 0)) // Not blank? { char text[128]; // char array buffer for the string conversion [password getCString:text maxLength:126 encoding:NSUTF8StringEncoding]; if (CGPDFDocumentUnlockWithPassword(thePDFDocRef, text) == FALSE) { needPassword = YES; } } else { needPassword = YES; } } } CGPDFDocumentRelease(thePDFDocRef); // Cleanup CGPDFDocumentRef } } else // Log an error diagnostic { #ifdef DEBUG NSLog(@"CGPDFDocumentUrlNeedsPassword: theURL == NULL"); #endif } return needPassword; } // EOF