#iphone #objective-c #ios #pdf #nsdata
#iPhone #objective-c #iOS #PDF #nsdata
Вопрос:
Конвертирую веб-страницу в PDF-файл. Я сделал следующее,
NSString *string=[NSString stringWithFormat:@"%@.pdf",[chapersArray objectAtIndex:pageIndex]];
[controller1 addAttachmentData:pdfData mimeType:@"application/pdf" fileName:string];
[self presentModalViewController:controller1 animated:YES];
[controller1 release];
Теперь, как я могу преобразовать свои NSData в pdf и сохранить в памяти моего приложения? Пожалуйста, помогите мне с примерами кодов или предложений. Спасибо всем.
Комментарии:
1. Откуда берутся pdfData?
2. Извини, друг, я тебя запутал. Я хочу преобразовать NSData в PDF и сохранить в памяти моего приложения.
3. Что, черт возьми, означает «хранить в памяти моего приложения»? Объект NSData уже находится в памяти. Кроме того, «конвертировать в PDF» ничего не значит без объяснения того, из какого формата вы конвертируете.
Ответ №1:
Я предполагаю, что у вас есть свой PDF-файл в каталоге documents здесь. Вы можете изменить его там, где он есть на самом деле. Попробуйте это —
//to convert pdf to NSData
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:@"test.pdf"];
NSData *myData = [NSData dataWithContentsOfFile:pdfPath];
По сути, с помощью CGPDFDocumentCreateWithProvider вы можете конвертировать NSData
в pdf,
//to convert NSData to pdf
NSData *data = //some nsdata
CFDataRef myPDFData = (CFDataRef)data;
CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData);
CGPDFDocumentRef pdf = CGPDFDocumentCreateWithProvider(provider);
Не забудьте CFRelease
удалить все неиспользуемые данные после завершения.
Комментарии:
1. Извини, друг, я тебя запутал. Я хочу преобразовать NSData в PDF и сохранить в памяти моего приложения.
2. @Srikar Appal Здравствуйте, как сохранить этот PDF в файл.
3. @EaswaramoorthyKanagaraj это должно сработать
[myFile writeToFile:[NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], @"yourfilename.pdf"] atomically:YES];
4. @SrikarAppal Что здесь myFile, это myData в первом фрагменте кода? Или что-то еще во втором фрагменте? Пожалуйста, любезно разъясните это, а также метод, о котором вы говорите.
5. @SrikarAppal, я попытался сохранить файл с помощью «writeToFile:», но он не открывает файл. Любая помощь, как сохранить вышеупомянутый объект CGPDFDocumentRef в файл pdf
Ответ №2:
Я получил это простым способом следующим образом,
-(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];
}
Ответ №3:
Вы можете попробовать использовать это решение:
- (void)saveDataToPDF:(NSData *)pdfDocumentData { //Создать ссылку на документ pdf CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((CFDataRef)pdfDocumentData); CGPDFDocumentRef document = CGPDFDocumentCreateWithProvider(dataProvider); //Создать контекст pdf CGPDFPageRef страница = CGPDFDocumentGetPage(документ, 1); // Страницы нумеруются, начиная с 1 CGRect pageRect = CGPDFPageGetBoxRect(страница, kCGPDFMediaBox); CFMutableDataRef mutableData = CFDataCreateMutable(NULL, 0); // NSLog(@"w:%2.2f , h:%2.2f ",pageRect.size.width, pageRect.size.height); CGDataConsumerRef dataConsumer = CGDataConsumerCreateWithCFData(изменяемые данные); CGContextRef pdfContext = CGPDFContextCreate(dataConsumer, amp;pageRect, NULL); если (CGPDFDocumentGetNumberOfPages(document)> 0) { // Нарисуйте страницу в новом контексте //page = CGPDFDocumentGetPage(document, 1); // Страницы нумеруются, начиная с 1 CGPDFContextBeginPage(pdfContext, NULL); CGContextDrawPDFPage(pdfContext, страница); CGPDFContextEndPage(pdfContext); } ещё { NSLog (@"Не удалось создать документ"); } CGContextRelease(pdfContext); // Выпуск перед записью данных на диск. // Запись на диск [(__bridge NSData *) Изменяемые данные writeToFile:@"/Users/David/Desktop /test.pdf" атомарно: ДА]; // Очистка CGDataProviderRelease(dataProvider); //Освободить поставщика данных CGDataConsumerRelease(dataConsumer); CGPDFDocumentRelease (документ); CFRelease (изменяемые данные); }