2013-05-29 12 views
5

Witam Chcę napisać pdf używając NSData lub używając bajtów danych podanych przez serwis internetowy?Jak wygenerować pdf przy użyciu NSData lub przy użyciu celu bajtów danych c?

-(NSData *)saveData:(NSData*)fileData fileName:(NSString *)fileName fileType:(NSString *)fileType 
{ 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
    NSString *documentsDir = [paths objectAtIndex:0]; 

    NSString *filePath = [NSString stringWithFormat:@"%@/%@.%@",documentsDir,fileName,fileType]; 

    NSData* downloadData = [NSData dataWithData:fileData]; 

    [fileManager createFileAtPath:filePath contents:downloadData attributes:nil]; 


} 

Używam tego, ale to nie działa, to daje błąd "Może być uszkodzony lub użyć formatu pliku, którego podgląd nie rozpoznaje." o otwarciu tego pliku pdf utworzonego przez powyższy kod.

+0

Jest to znacznie lepszy pomysł, aby po prostu użyć 'NSData' użytkownika 'writeToFile: atomically:' niż przechodzenie przez NSFileManager. – CodaFi

+0

Czy dane są już w formacie PDF lub szukasz sposobu na konwersję innych danych do formatu PDF? Czy możesz spróbować sprawdzić plik za pomocą edytora szesnastkowego ([Hex Fiend] (http://ridiculousfish.com/hexfiend/) jest niesamowity). Najprawdopodobniej dowiesz się, w jakim formacie są dane. –

+0

Możesz także użyć narzędzia wiersza polecenia 'file', aby dowiedzieć się, jaki jest prawdziwy typ jakiegoś pliku. –

Odpowiedz

7

można przekonwertować NSData do PDF z kodem poniżej ... dostanę miech kod z This link

NSString *string=[NSString stringWithFormat:@"%@.pdf",[yourArray objectAtIndex:pageIndex]]; 
[controller1 addAttachmentData:pdfData mimeType:@"application/pdf" fileName:string]; 
[self presentModalViewController:controller1 animated:YES]; 
[controller1 release]; 

//to convert pdf to NSData 
NSString *pdfPath = [documentsDirectory stringByAppendingPathComponent:@"test.pdf"]; 
NSData *myData = [NSData dataWithContentsOfFile:pdfPath]; 

//to convert NSData to pdf 
NSData *data    = //some nsdata 
CFDataRef myPDFData  = (CFDataRef)data; 
CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData); 
CGPDFDocumentRef pdf  = CGPDFDocumentCreateWithProvider(provider); 

-(IBAction)saveasPDF:(id)sender{ 
    NSString *string=[NSString stringWithFormat:@"%@.pdf",[yourArray 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]; 
} 

Podsumowanie: dostać NSData od ścieżki pliku pdf

NSData *pdfData = [NSData dataWithContentsOfFile:pathToFile1]; 
NSLog(@"pdfData= %d", pdfData != nil); 

napisz NSData do pliku pdf

[pdfData writeToFile:pathToFile2 atomically:YES]; 
+1

dziękuję działało dobrze :) –

+0

@ParasJoshi, Próbowałem zapisać plik za pomocą "writeToFile:", ale nie otwiera pliku w Preview.app. Każda pomoc, jak zapisać powyższy obiekt CGPDFDocumentRef do pliku PDF – Meet

+1

Czy ktoś ma to dla Swift 2? – ChallengerGuy

1

@ChallengerGuy (Jeśli wciąż szukasz podejścia Swift 2 dla CGPDFDocument)

//to convert data of type NSData 

    guard let cfData = CFDataCreate(kCFAllocatorDefault, UnsafePointer<UInt8>(data.bytes), data.length) else { return nil} 

    let cgDataProvider = CGDataProviderCreateWithCFData(cfData) 

    guard let cgPDFDocument = CGPDFDocumentCreateWithProvider(cgDataProvider) else { return nil } 

nadzieję, że powyższe pomaga

Powiązane problemy