2013-05-29 8 views
5

Merhaba NSData'u kullanarak veya webservice tarafından verilen veri baytlarını kullanarak pdf yazmak istiyorum?NSData'yı kullanarak veya veri baytları nesnesini c kullanarak pdf nasıl oluşturulur?

-(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]; 


} 

Bunu kullanıyorum ama işe yaramıyor bana hata vermek var "Bu hasarlı veya Önizleme tanımadığı bir dosya biçimini kullanın olabilir." Yukarıdaki kod ile oluşturulan pdf'yi açmak.

+0

sadece 'NSData' kullanmasına Bu çok daha iyi bir fikir olur Umut (hala CGPDFDocument için Swift 2 yaklaşıma arıyorsanız) 'writeToFile: atomically: 'NSFileManager'dan geçiyor. – CodaFi

+0

Veriler PDF formatında mı, yoksa diğer bazı verileri PDF'ye dönüştürmenin bir yolunu mu arıyorsunuz? Bir Hex Editor ([Hex Fiend] (http://ridiculousfish.com/hexfiend/) harika) kullanarak dosyanızı incelemek için deneyebilirsiniz. Büyük olasılıkla verilerin hangi formatta olduğunu anlayacaksınız. –

+0

Bazı dosyaların gerçek tipini belirlemek için 'file' komut satırı aracını da kullanabilirsiniz. –

cevap

7

Eğer feryat kodu ile PDF için NSData dönüştürebilirsiniz ... Ben 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]; 
} 

Özeti itibaren feryat Kodunu olsun: pdf dosyası yolundan NSData olsun

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

NSData pdf dosyasına yaz

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

teşekkür ederim iyi çalıştı :) –

+0

@ParasJoshi, "writeToFile:" kullanarak dosyayı kaydetmeye çalıştı ama dosyayı Preview.app içinde açmaz. Yukarıdaki CGPDFDocumentRef nesnesinin pdf dosyasına nasıl kaydedileceğine dair yardım – Meet

+1

Swift 2 için bunu yapan var mı? – ChallengerGuy

1

@ChallengerGuy

//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 } 

yukarıda

İlgili konular