2015-09-16 2 views
0

Есть ли способ, чтобы сделать слой хостинга NSView (как он появляется на экране) в PDF или растровый файл без реализующего –drawInContext: метода каждого CALayer (или аналогичным образом, делегат каждого слоя-х -(void)drawLayer:inContext: метод)? Я просто хочу содержимое NSView точно так же, как они появляются с минимальным дополнительным кодом рисования.Как вынести слой хостинга NSView в файл

Я читал многочисленные источники, которые говорят, что для рендеринга в PDF вы должны реализовать -drawInContext:, что имеет смысл, если вы имеете дело с пользовательским слоем подкласса (иначе, как еще он знал бы, что рисовать) , но я хочу, чтобы слои, которые «просто работают», когда вы добавляете их в представление, например CATextLayer или CAShapeLayer. Кажется совершенно излишним переписывать код для CATextLayer, рассказывая ему, как рисовать себя, когда он явно полностью способен это сделать на экран.

Я пропустил что-то очевидное?

ответ

2

я успешно написал иерархию слоя в целях, чтобы в формате PDF, используя следующий код:

- (void)renderToPath:(NSString *)filePath 
{ 
    NSImage *image = [[NSImage alloc] initWithSize:self.bounds.size]; 
    [image lockFocus]; 
    [self.layer renderInContext:[NSGraphicsContext currentContext].CGContext]; 
    [image unlockFocus]; 

    NSImageView *tempImageView = [[NSImageView alloc] initWithFrame:self.bounds]; 
    tempImageView.image = image; 
    NSData *pdf = [tempImageView dataWithPDFInsideRect:self.bounds]; 
    [pdf writeToFile:filePath atomically:YES]; 
} 

Here's a sample project.

+0

Мне очень жаль ... в перечитывании моего вопроса Я понимаю, что это было немного обманчиво; этот ответ определенно работает для создания растрового PDF-файла, но есть ли аналогичный способ создания PDF-документа, который является чисто векторным (поэтому 'CATextLayer' останется выбираемым текстом, 'CAShapeLayer' будет независим от разрешения и т. д.)? Вот где '-drawInContext:' как будто требуется вместо '-renderInContext:', но я не получил его для работы. Вы знаете способ адаптации этого кода для вектора? –