Как мне написать файл PDF из источника NSData - PullRequest
4 голосов
/ 30 сентября 2011

У меня есть метод, который возвращает NSData из CGPathRef следующим образом ...

+ (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 из данных, я получаю файл в правильном размере, но пути не отображаются в PDF ... это в основном пустой документ.

Достаточно ли просто написать файл так ...

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

или их больше прыгать, чтобы записать его в формате PDF?

Ответы [ 2 ]

0 голосов
/ 15 мая 2012

Это было немного красной сельди. Пути были нарисованы, но не имели штрихов или заливок. Код в моем вопросе выше звучит и работает как положено.

0 голосов
/ 15 мая 2012

Ты прав.Если у вас есть данные в объекте NSData, вы можете просто записать их на диск.Но вы должны добавить правильное расширение (в вашем случае .pdf).Работает для всего (видео, картинки и т.д ...)

...