2010-01-30 10 views
14

Estoy buscando una manera (pública o de otro tipo) de obtener un NSView, NSImage, CGImageRef, etc. que muestre la vista previa de QuickLook para obtener un archivo. Esencialmente el equivalente de QLThumbnailImageCreate() pero para la vista previa.Vista previa de Mac Vista rápida en un NSView o NSImage?

Las API públicas que puedo encontrar no son compatibles. Permiten la creación de una imagen en miniatura o un QLPreviewPanel. De hecho, el panel muestra la vista previa de la apariencia rápida, pero no puedo acceder a la apariencia de la vista previa para incrustarla en otras vistas, ni puedo mostrar varias vistas previas a la vez.

Para el fondo, estoy escribiendo una aplicación donde los usuarios pueden insertar enlaces a otros archivos que deben mostrarse en línea, como una etiqueta <img> en HTML. Para imágenes como JPG y PDF, es fácil averiguar qué mostrar. Pensé que para otros formatos usaría Quick Look para generar una buena representación visual de los contenidos del archivo. De esta forma, el conjunto de formatos admitidos por mi aplicación sería fácilmente extensible (solo descargue nuevos generadores Quick Look).

Respuesta

5

Miré en esto extensamente una vez hace un tiempo y no pude encontrar una manera fácil de hacerlo. Dependiendo del tipo de archivo, QuickLook genera diferentes tipos de resultados. Por ejemplo, para archivos iWork, el generador crea el HTML que muestra en un WebView. Para otros tipos, devuelve diferentes tipos de datos.

nunca terminaron usando el código, pero aquí hay un código Desenterré y algunas APIs privadas que podrían ser útiles:

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

También puede ser que desee comprobar esto de Matt Gemmell: http: //mattgemmell.com/2007/10/29/how-to-get-a-quick-look-preview-as-an-nsimage Utiliza QLThumbnailImageCreate para crear una vista previa (incluso de gran tamaño). Si mal no recuerdo, el problema que tuve fue que solo funcionaba con los documentos de la primera página. –

+2

A pesar del título del código de Matt Gemmell, de hecho solo devuelve la miniatura, no la vista previa. –

+0

Gracias por las API privadas ... parecen útiles. Me imagino que la única forma plausible de hacerlo es encontrar de alguna manera el paquete del generador para un archivo dado y luego desempeñar el papel del panel QL, aceptando HTML, imágenes, etc. según sea necesario. Parece factible con suficiente pirateo pero no es trivial ni particularmente robusto si Apple hace cambios. –

Cuestiones relacionadas