Как я могу нарисовать 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-документа.