Mac Quick Look Предварительный просмотр в NSView или NSImage? - PullRequest
14 голосов
/ 31 января 2010

Я ищу способ (общедоступный или иной) получить NSView, NSImage, CGImageRef и т. Д., Который показывает QuickLook preview для файла. По сути, эквивалент QLThumbnailImageCreate (), но для предварительного просмотра.

Общедоступные API, которые я могу найти, не поддерживают это. Они позволяют создавать миниатюры или QLPreviewPanel. На самом деле панель отображает предварительный просмотр быстрого просмотра, но я не могу получить доступ к внешнему виду предварительного просмотра, чтобы встроить его в другие представления, и не могу отобразить несколько предварительных просмотров одновременно.

Для фона я пишу приложение, в которое пользователи могут вставлять ссылки на другие файлы, которые должны отображаться в виде строки, вроде тега imageв HTML. Для изображений, таких как JPG и PDF, легко понять, что отображать. Я думал, что для других форматов я бы использовал Quick Look, чтобы сгенерировать хорошее визуальное представление содержимого файла. Таким образом, набор форматов, поддерживаемых моим приложением, будет легко расширяемым (просто загрузите новые генераторы Quick Look).

1 Ответ

5 голосов
/ 31 января 2010

Некоторое время назад я тщательно изучил это и не смог найти простой способ сделать это. В зависимости от типа файла QuickLook генерирует различные виды вывода. Например, для файлов iWork генератор создает HTML, который он отображает в WebView. Для других типов он возвращает разные типы данных.

Я никогда не заканчивал тем, что использовал код, но вот некоторый код, который я откопал, и некоторые частные API, которые могут быть полезны:

id QLPreviewCreate(CFAllocatorRef allocator, CFURLRef url,  CFDictionaryRef options);
id QLPreviewCopyBitmapImage(id preview);
id QLPreviewCopyData(id preview);
NSString* QLPreviewGetPreviewType(id preview);
id QLPreviewCopyProperties(id preview);

- (NSData *)getDataForFile:(NSString *)path
{

    NSURL *fileURL = [NSURL fileURLWithPath:path];

    id preview = QLPreviewCreate(kCFAllocatorDefault, fileURL, 0);

    if (preview)
    {
        NSString* previewType = QLPreviewGetPreviewType(preview);

        if ([previewType isEqualToString:@"public.webcontent"])
        {
            // this preview is HTML data
            return QLPreviewCopyData(preview);
        }
        else
        {
           NSLog(@"this type is: %@", previewType);
           // do something else
        }

    }

    return nil;
}
...