Предварительный просмотр Mac Quick Preview в NSView или NSImage?

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

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

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

Ответы

Ответ 1

Я много раз заглядывал в это время и не мог найти простой способ сделать это. В зависимости от типа файла 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;
}