2010-01-30 4 views
14

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

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

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

ответ

5

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

Вы также можете проверить это с Мэттом Джеммелл: HTTP: //mattgemmell.com/2007/10/29/how-to-get-a-quick-look-preview-as-an-nsimage Он использует QLThumbnailImageCreate для создания предварительного просмотра (даже большого). Если я правильно помню, проблема, с которой я столкнулся, заключалась в том, что она работала только с документами первой страницы. –

+2

Несмотря на название кода от Matt Gemmell, он фактически возвращает только миниатюру, а не предварительный просмотр. –

+0

Спасибо за частные API ... они выглядят полезными. Я полагаю, что единственный правдоподобный способ сделать это - как-то найти комплект генератора для данного файла, а затем сыграть роль панели QL, принять HTML, изображения и т. Д. По мере необходимости. Кажется, что он достаточно взломан, но не является тривиальным и особенно надежным, если Apple вносит изменения. –

Смежные вопросы