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.
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.
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];
}
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); }
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.