Reputation: 1521
Am converting a webpage as a pdf file. I did the following,
NSString *string=[NSString stringWithFormat:@"%@.pdf",[chapersArray objectAtIndex:pageIndex]];
[controller1 addAttachmentData:pdfData mimeType:@"application/pdf" fileName:string];
[self presentModalViewController:controller1 animated:YES];
[controller1 release];
Now how can i convert my NSData into pdf and save in my application memory? Kindly help me with sample codes or suggestions. Thanks all.
Upvotes: 0
Views: 12792
Reputation: 4934
You can try with this solution:
- (void)saveDataToPDF:(NSData *)pdfDocumentData { //Create the pdf document reference CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((CFDataRef)pdfDocumentData); CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(dataProvider); //Create the pdf context CGPDFPageRef page = CGPDFDocumentGetPage(document, 1); //Pages are numbered starting at 1 CGRect pageRect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox); CFMutableDataRef mutableData = CFDataCreateMutable(NULL, 0); //NSLog(@"w:%2.2f, h:%2.2f",pageRect.size.width, pageRect.size.height); CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(mutableData); CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, &pageRect, NULL); if (CGPDFDocumentGetNumberOfPages(document) > 0) { //Draw the page onto the new context //page = CGPDFDocumentGetPage(document, 1); //Pages are numbered starting at 1 CGPDFContextBeginPage(pdfContext, NULL); CGContextDrawPDFPage(pdfContext, page); CGPDFContextEndPage(pdfContext); } else { NSLog(@"Failed to create the document"); } CGContextRelease(pdfContext); //Release before writing data to disk. //Write to disk [(__bridge NSData *)mutableData writeToFile:@"/Users/David/Desktop/test.pdf" atomically:YES]; //Clean up CGDataProviderRelease(dataProvider); //Release the data provider CGDataConsumerRelease(dataConsumer); CGPDFDocumentRelease(document); CFRelease(mutableData); }
Upvotes: 1
Reputation: 1521
I got this is in a simple method as follows,
-(IBAction)saveasPDF:(id)sender{
NSString *string=[NSString stringWithFormat:@"%@.pdf",[chapersArray objectAtIndex:pageIndex]];
[controller1 addAttachmentData:pdfData mimeType:@"application/pdf" fileName:string];
[self presentModalViewController:controller1 animated:YES];
[pdfData writeToFile:[self getDBPathPDf:string] atomically:YES];
}
-(NSString *) getDBPathPDf:(NSString *)PdfName {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
return [documentsDir stringByAppendingPathComponent:PdfName];
}
Upvotes: 3
Reputation: 73588
Am assuming you have your pdf in documents directory here. You can change it to where ever it actually is. Try this -
//to convert pdf to NSData
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:@"test.pdf"];
NSData *myData = [NSData dataWithContentsOfFile:pdfPath];
Essentially using CGPDFDocumentCreateWithProvider you can convert NSData
to pdf,
//to convert NSData to pdf
NSData *data = //some nsdata
CFDataRef myPDFData = (CFDataRef)data;
CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData);
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithProvider(provider);
Don't forget to CFRelease
all unused data after you are done.
Upvotes: 14