2011-09-29 4 views
4

내가 이것을 사용하고, 데이터 I에서 PDF 파일을 작성하려고하면 정말 같은 CGPathRef에서있는 NSData를 반환하는 방법 ...어떻게있는 NSData 소스에서 PDF 파일을 작성 할

+ (NSData *) createPDFDataWithCGPath: (CGPathRef) path mediaBox: (CGRect) mediaBox 
{ 
    CFMutableDataRef data = NULL; 
    if (path) { 
    CFAllocatorRef allocator = NULL; 
    data = CFDataCreateMutable(allocator, 0); 
    CGDataConsumerRef consumer = CGDataConsumerCreateWithCFData(data); 
    CGContextRef context = CGPDFContextCreate(consumer, &mediaBox, NULL); 
    CFTypeRef keys[1] = { kCGPDFContextMediaBox }; 
    CFTypeRef values[1] = { CFDataCreate(allocator, (const UInt8 *)&mediaBox, sizeof(CGRect)) }; 
    CFDictionaryRef pageInfo = CFDictionaryCreate(allocator, keys, values, 1, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); 

    CGPDFContextBeginPage(context, pageInfo); 
    CGContextScaleCTM(context, 1, -1); 
    CGContextTranslateCTM(context, 0, -mediaBox.size.height); 
    CGContextAddPath(context, path); 
    CGContextSetRGBFillColor(context, 0, 0, 0, 1); 
    CGContextFillPath(context); 
    CGPDFContextEndPage(context); 

    CFRelease(pageInfo); 
    CFRelease(values[0]); 
    CGPDFContextClose(context); 
    CGContextRelease(context); 
    CGDataConsumerRelease(consumer); 
    } 
    return (NSData *)data; 
} 

이 올바른 크기로 내 파일을 가져 오지만 경로는 PDF로 그려지지 않습니다 ... 기본적으로 빈 문서입니다.

는 ... 충분히 너무 같은 파일을 작성하는 방법

[maskData writeToFile: DOCUMENTS_PATH_WITH_STRING(@"maskData.pdf") atomically: YES]; 

또는 PDF로 작성하지만 점프 그들보다 더 농구는 그것을인가?

답변

0

약간 붉은 청어였습니다. 경로는 그려 지지만 획이나 채움이 없습니다. 위의 내 질문에 코드는 소리와 예상대로 작동합니다.

0

네 말이 맞아. NSData 개체에 데이터가있는 경우 디스크에 데이터를 쓸 수 있습니다. 그러나 올바른 확장자 (귀하의 경우 .pdf)를 추가해야합니다. 모든 것 (비디오, 그림 등)에 적용됩니다.