Ios从byte数组创建pdf

时间:2012-07-18 13:04:04

标签: iphone ios ipad pdf

我想从字节流(我从wsdl收到)创建一个pdf,我已经在NSArray上插入了这个字节流,但我不知道怎么写pdf。 (这个字节流是pdf) 谢谢!

                //to convert NSData to pdf
                NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arrayOfByte];

                CFDataRef myPDFData  = (__bridge_retained CFDataRef)data;
                CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData);
                CGPDFDocumentRef pdf   = CGPDFDocumentCreateWithProvider(provider);

                NSArray *docDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                NSString *docDirectory = [docDirectories objectAtIndex:0];
                NSString *fileName = [docDirectory stringByAppendingPathComponent:@"abcd.pdf"];

                [data writeToFile:fileName atomically:NO];

但我收到:找不到PDF标题:找不到`%PDF'。

2 个答案:

答案 0 :(得分:2)

要从已签名的8位字符数组中获取数据字节,您可以执行以下操作:

NSArray *bytes = ...;

NSMutableData *data = [[NSMutableArray alloc] initWithCapacity:bytes.count];
for (NSNumber *byteVal in bytes) {
    Byte b = (Byte)(byteVal.intValue);
    [data appendBytes:&b length:1];
}

这应该可行,但如果在解析JSON时直接填充data对象会更有效。

然后您可以使用以下命令将字节写入文件:

NSArray *docDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDirectory = [docDirectories objectAtIndex:0];
NSString *fileName = [docDirectory stringByAppendingPathComponent:@"abcd.pdf"];

[data writeToFile:fileName atomically:NO];

答案 1 :(得分:0)

如果它确实是一个字节数组,它应该被编码为字符串并转换为NSData对象,或直接存储在NSData对象中。从那里,CoreGraphics包含用于创建和操作PDF文件的本机函数。

//to convert NSData to pdf
NSData *data     = [NSData dataWithBytes:(void)wdslBytes length:sizeOf(wdslBytes)];
CFDataRef myPDFData  = (CFDataRef)data;
CGDataProviderRef provider = CGDataProviderCreateWithCFData(myPDFData);
CGPDFDocumentRef pdf   = CGPDFDocumentCreateWithProvider(provider);