Как я могу нарисовать NSView правильно в контексте PDF?

У меня есть NSView и к этому NSViewЯ добавил несколько подпредставлений, которые являются подклассом NSView (По имени: Square). Квадраты 50х50 на разных позициях. Я хочу сделать это NSViewс цветом фона Red или же Blue с этим белым фоном, как на скриншоте.

- (void)saveAsPDF
{

NSString *homeDirectory = NSHomeDirectory();
NSURL *fileURL = [NSURL fileURLWithPath:[homeDirectory stringByAppendingPathComponent:@"plik.pdf"]];

CGRect mediaBox = self.bounds;

CGContextRef pdfContext = CGPDFContextCreateWithURL((__bridge CFURLRef)(fileURL), &mediaBox, NULL);

CGPDFContextBeginPage(pdfContext, nil);

for (Square *square in squareGroup) {
    [square.layer renderInContext:pdfContext];
}

CGPDFContextEndPage(pdfContext);

CGContextRelease(pdfContext);

Только то, что у меня есть, это пустой файл PDF. Как я могу правильно нарисовать эти квадраты в pdfContext?

1 ответ

Решение

Вы должны вызвать CGPDFContextClose для записи данных PDF:

// ...

CGPDFContextEndPage(pdfContext);

// Close the PDF document
CGPDFContextClose(pdfContenxt);

CGContextRelease(pdfContext);

// ...

В документации отмечается, что закрытие контекста приводит к записи данных, что может объяснить, почему вы получаете чистый PDF без закрытия:

После закрытия контекста все ожидающие данные записываются в место назначения контекста, и файл PDF завершается. Никакие дополнительные данные не могут быть записаны в целевой контекст после закрытия PDF-документа.

Другие вопросы по тегам