2010-01-30 8 views
14

Ich suche nach einem Weg (öffentlich oder anderweitig), um eine NSView, NSImage, CGImageRef, etc, die die QuickLook Vorschau für eine Datei zu erhalten. Im Wesentlichen das Äquivalent von QLThumbnailImageCreate(), aber für die Vorschau.Mac Schnellvorschau in einem NSView oder NSImage?

Die öffentlichen APIs, die ich finden kann, unterstützen dies nicht. Sie ermöglichen die Erstellung eines Miniaturbildes oder eines QLPreviewPanel. Das Panel zeigt zwar die Schnellvorschau an, aber ich kann nicht auf das Aussehen der Vorschau zugreifen, um es in andere Ansichten einzubetten, noch kann ich mehrere Vorschaubilder gleichzeitig anzeigen.

Im Hintergrund schreibe ich eine App, wo Benutzer Links zu anderen Dateien einbetten können, die inline angezeigt werden sollen, ähnlich wie ein <img> Tag in HTML. Für Bilder wie JPGs und PDFs ist es einfach herauszufinden, was angezeigt werden soll. Ich dachte, dass ich für andere Formate mit Quick Look eine schöne visuelle Darstellung des Dateiinhalts erzeugen würde. Auf diese Weise könnte der Satz von Formaten, die von meiner Anwendung unterstützt werden, leicht erweiterbar sein (laden Sie einfach neue Quick Look-Generatoren herunter).

Antwort

5

Ich habe dies ausgiebig einmal vor einer Weile untersucht und war nicht in der Lage, einen einfachen Weg zu finden, es zu tun. Abhängig vom Dateityp generiert QuickLook verschiedene Arten von Ausgaben. Für iWork-Dateien erstellt der Generator beispielsweise HTML, das in einem WebView angezeigt wird. Bei anderen Typen gibt es verschiedene Arten von Daten zurück.

I beendet nie mit dem Code, aber hier einige Code, den ich ausgegraben und einige private APIs, die nützlich sein könnten:

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

Sie könnten auch diese von Matt Gemmell überprüfen möchten out: http: //mattgemell.com/2007/10/29/how-to-get-a-quick-look-preview-as-an-nsimage Es verwendet QLThumbnailImageCreate, um eine Vorschau (auch groß) zu erstellen. Wenn ich mich richtig erinnere, hatte ich das Problem, dass es nur mit den Dokumenten der ersten Seite funktionierte. –

+2

Trotz des Titels des Codes von Matt Gemmell, es tatsächlich nur das Vorschaubild, nicht die Vorschau. –

+0

Danke für die privaten APIs ... die sehen nützlich aus. Ich denke, der einzig plausible Weg dahin ist, das Generator-Bündel für eine bestimmte Datei zu finden und dann die Rolle des QL-Panels zu spielen und HTML, Bilder usw. nach Bedarf zu akzeptieren. Scheint machbar mit genug Hacking, aber nicht trivial noch besonders robust, wenn Apple Änderungen vornimmt. –

Verwandte Themen