2010-01-30 23 views
14

我正在寻找一种方式(公共或其他)来获取NSView,NSImage,CGImageRef等,它显示文件的QuickLook预览。基本上相当于QLThumbnailImageCreate(),但是用于预览。Mac Quick Look预览在NSView或NSImage中?

我可以找到的公共API不支持这个。它们允许创建缩略图或QLPreviewPanel。该面板实际上显示快速预览,但我无法访问预览外观以将其嵌入到其他视图中,也不能一次显示多个预览。

对于背景,我正在编写一个应用程序,用户可以在其中嵌入应该以内联方式显示的其他文件的链接,有点像HTML中的<img>标记。对于JPG和PDF等图像,很容易找出要显示的内容。我认为对于其他格式,我会使用Quick Look来生成文件内容的一个很好的可视化表示。这样,我的应用程序支持的一组格式就可以轻松扩展(只需下载新的Quick Look生成器)。

回答

5

我曾经广泛地研究过这个问题,但没能找到一个简单的方法来做到这一点。根据文件的类型,QuickLook会生成不同类型的输出。例如,对于iWork文件,生成器会生成显示在WebView中的HTML。对于其他类型,它返回不同类型的数据。

我从来没有最终使用的代码,但这里的一些代码,我挖出一些私人的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

您可能还需要从马特Gemmell检查了这一点: HTTP: //mattgemmell.com/2007/10/29/how-to-get-a-quick-look-preview-as-an-nsimage 它使用QLThumbnailImageCreate创建预览(甚至很大)。如果我没有记错,我遇到的问题是它只能用于第一页文档。 – 2010-01-31 05:09:58

+2

尽管来自Matt Gemmell的代码的标题,它实际上只返回缩略图,而不是预览。 – 2010-01-31 06:30:02

+0

感谢您使用私人API ......这些看起来很有用。我认为唯一可行的方法是以某种方式为给定文件找到生成器包,然后扮演QL面板的角色,根据需要接受HTML,图像等。似乎可以做到有足够的黑客行为,但如果苹果做出改变的话,这些行为并不平凡,也不会特别强大 – 2010-01-31 06:32:17

相关问题