I tried using the info given here
https://developer.apple.com/library/mac/#documentation/graphicsimaging/conceptual/drawingwithquartz2d/dq_pdf/dq_pdf.html#//apple_ref/doc/uid/TP30001066-CH214-TPXREF101
but it is really vague...
I also tried using this code using UIKit... the file is created.. but it is of 0 kb.. cannot write any data..
BOOL allowCopy=YES;
BOOL allowPrint=YES;
//NSString *password=@"test";
CGContextRef pdfContext; //our pdfContext
CFStringRef path;
CFURLRef url;
CGRect pageRect = CGRectMake(0, 0,500, 500);
NSString *fileName=@"Test.pdf";
// CFStringRef passwordString = (__bridge_retained CFStringRef)password;
const char *filename = [fileName UTF8String];
// Create a CFString from the filename we provide to this method when we call it
path = CFStringCreateWithCString (NULL, filename, kCFStringEncodingUTF8);
// Create a CFURL using the CFString we just defined
url = CFURLCreateWithFileSystemPath (NULL, path, kCFURLPOSIXPathStyle, 0);
CFMutableDictionaryRef myDictionary = NULL;
// This dictionary contains extra options mostly for 'signing' the PDF
myDictionary = CFDictionaryCreateMutable(NULL, 0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(myDictionary, kCGPDFContextOwnerPassword, CFSTR("user"));
CFDictionarySetValue(myDictionary, kCGPDFContextUserPassword, CFSTR("user"));
if (!allowCopy)
CFDictionarySetValue(myDictionary, kCGPDFContextAllowsCopying, kCFBooleanFalse);
//kCGPDFContextAllowsCopying is set to TRUE by default
if (!allowPrint)
CFDictionarySetValue(myDictionary, kCGPDFContextAllowsPrinting, kCFBooleanFalse);
//kCGPDFContextAllowsPrinting is set to TRUE by default
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0]; // Get documents folder
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:fileName];
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createFileAtPath:dataPath contents:nil attributes:nil];
// CGRect papersize= CGRectMake(0, 0, 400, 400);
pdfContext = CGPDFContextCreateWithURL (url, &pageRect, myDictionary);
// Cleanup our mess
CFRelease(myDictionary);
CFRelease(url);
//Now, this is a tricky part. We make use of a do - while loop in order to create as many pages as needed
CGContextBeginPage (pdfContext, &pageRect); //begins a new PDF page
//create layout for our page
CGRect bounds = CGRectMake(0, 0,500,500);
UIGraphicsPushContext(pdfContext); //pushing the context, as explained at the beginning of this post
CGContextSaveGState(pdfContext);
CGContextTranslateCTM(pdfContext, 0, bounds.origin.y);
CGContextScaleCTM(pdfContext, 1, -1);
CGContextTranslateCTM(pdfContext, 0, -(bounds.origin.y + bounds.size.height));
//[@"HELLO" drawInRect:CGRectMake(10,15,10,30) withFont:[UIFont fontWithName:@"Helvetica-Bold" size:40]];
//THIS IS THE NASTY PART
CGContextRestoreGState(pdfContext);
UIGraphicsPopContext();
CGContextEndPage (pdfContext); //ends the current page
// We are done with our context now, so we release it
CGContextRelease (pdfContext);
CFRelease(path);
// Create our PDF Context with the CFURL, the CGRect we provide, and the above defined dictionary
if anyone can help.. thanks..
Modify the listing 13-4 and add the lines below that are placed between comments:
CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("My Name"));
///
CFDictionarySetValue(myDictionary, kCGPDFContextUserPassword, CFSTR("userpassword"));
CFDictionarySetValue(myDictionary, kCGPDFContextOwnerPassword, CFSTR("ownerpassword"));
///
pdfContext = CGPDFContextCreateWithURL (url, &pageRect, myDictionary);
The supported security options are listed at the end of the article.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With