2010-01-30 9 views
14

Sto cercando un modo (pubblico o meno) per ottenere un NSView, NSImage, CGImageRef, ecc. Che mostra l'anteprima QuickLook per un file. Sostanzialmente l'equivalente di QLThumbnailImageCreate() ma per l'anteprima.Anteprima di Mac Quick Look in un NSView o NSImage?

Le API pubbliche che riesco a trovare non supportano questo. Consentono la creazione di un'immagine di anteprima o di un QLPreviewPanel. Il pannello infatti visualizza l'anteprima dell'anteprima, ma non riesco ad accedere all'aspetto dell'anteprima per incorporarlo in altre viste, né posso visualizzare più anteprime contemporaneamente.

Per lo sfondo, sto scrivendo un'app in cui gli utenti possono incorporare collegamenti ad altri file che dovrebbero essere visualizzati in linea, un po 'come un tag img > in HTML. Per immagini come JPG e PDF è facile capire cosa visualizzare. Ho pensato che per altri formati avrei usato Quick Look per generare una bella rappresentazione visiva dei contenuti del file. In questo modo l'insieme dei formati supportati dalla mia applicazione sarebbe facilmente estensibile (basta scaricare i nuovi generatori Quick Look).

risposta

5

Ho esaminato questo argomento una volta tanto indietro e non sono riuscito a trovare un modo semplice per farlo. A seconda del tipo di file, QuickLook genera diversi tipi di output. Ad esempio, per i file iWork, il generatore crea l'HTML che viene visualizzato in una WebView. Per altri tipi restituisce diversi tipi di dati.

non ho mai finito per usare il codice, ma ecco qualche codice ho scavato e alcune API private che potrebbe essere a portata di mano:

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

Si potrebbe anche voler controllare questo fuori da Matt Gemmell: http: //mattgemmell.com/2007/10/29/how-to-get-a-quick-look-preview-as-an-nsimage Usa QLThumbnailImageCreate per creare un'anteprima (anche di grandi dimensioni). Se ricordo bene, il problema che ho avuto è che ha funzionato solo con i documenti della prima pagina. –

+2

Nonostante il titolo del codice di Matt Gemmell, in realtà restituisce solo la miniatura, non l'anteprima. –

+0

Grazie per le API private ... quelle sembrano utili. Immagino che l'unico modo plausibile per fare ciò sia trovare in qualche modo il bundle del generatore per un dato file e poi giocare il ruolo del pannello QL, accettando HTML, immagini, ecc. Secondo necessità. Sembra fattibile con abbastanza hacking ma non banale né particolarmente robusto se Apple apporta modifiche. –

Problemi correlati