14

我正在寻找一种方法(公共或其他方式)来获取显示文件QuickLook 预览的 NSView、NSImage、CGImageRef 等。本质上相当于 QLThumbnailImageCreate() 但用于预览。

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

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

4

1 回答 1

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;
}
于 2010-01-31T04:49:58.763 回答