2013-05-29 7 views
5

Ciao Voglio scrivere pdf usando NSData o usando i byte dati dati da webservice?Come generare pdf usando NSData o usando i dati byte obiettivo 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]; 


} 

Sto usando questo, ma non sta funzionando E 'darmi errore "Si può essere danneggiato o utilizzare un formato di file che Anteprima non riconosce". aprendo quel pdf creato dal codice precedente.

+0

È un'idea molto migliore di utilizzare solo 'NSData' di 'writeToFile: atomically:' che passa attraverso NSFileManager. – CodaFi

+0

I dati sono già nel formato PDF o stai cercando un modo per convertire altri dati in PDF? Puoi provare a ispezionare il tuo file usando un Hex Editor ([Hex Fiend] (http://ridiculousfish.com/hexfiend/) fantastico). Molto probabilmente capirai in che formato sono i dati. –

+0

Puoi anche usare lo strumento da riga di comando 'file' per capire il vero tipo di alcuni file. –

risposta

7

è possibile convertire NSData-PDF con il codice di muggito ... io ottenere il codice soffietto Da 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]; 
} 

Sommario: ottenere NSData dal percorso del file pdf

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

scrivere NSData in pdf file

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

grazie hai lavorato bene :) –

+0

@ParasJoshi, ho provato a salvare il file usando "writeToFile:" ma non apre il file in Preview.app. Qualsiasi aiuto su come salvare l'oggetto CGPDFDocumentRef sopra nel file pdf – Meet

+1

Qualcuno ha questo per Swift 2? – ChallengerGuy

1

@ChallengerGuy (se siete ancora alla ricerca di un approccio Swift 2 per il 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 } 

Spero che quanto sopra contribuisce

Problemi correlati