在NSView或NSImage中预览Mac的快速查看?

14

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

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

背景是,我正在编写一个应用程序,用户可以在其中嵌入链接到其他文件,这些文件应该被内联显示,有点像HTML中的<img>标签。对于像JPG和PDF之类的图像,很容易确定要显示什么。我认为,对于其他格式,我将使用Quick Look生成文件内容的漂亮可视化表示形式。这样,我的应用程序支持的格式集将很容易地扩展(只需下载新的Quick Look生成器)。

1个回答

5

我曾经花费大量时间研究这个问题,但无法找到简单的方法来实现。根据文件类型,QuickLook 生成不同类型的输出。例如,对于 iWork 文件,生成器会生成 HTML 并在 WebView 中显示。对于其他类型,它返回不同类型的数据。

我最终没有使用这段代码,但是这里有一些我找到的代码和一些可能有用的私有 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
你可能也想从Matt Gemmell那里了解一下这个:http://mattgemmell.com/2007/10/29/how-to-get-a-quick-look-preview-as-an-nsimage它使用QLThumbnailImageCreate创建预览(甚至是大型的)。如果我没记错的话,我遇到的问题是它只能用于第一页文档。 - Ken Aspeslagh
2
尽管代码来自Matt Gemmell,但它实际上只返回缩略图,而不是预览。 - Niko Matsakis
谢谢提供私有API...看起来很有用。我想唯一可行的方法是找到给定文件的生成器捆绑包,然后扮演QL面板的角色,根据需要接受HTML、图像等。如果苹果进行更改,则似乎可以通过足够的黑客攻击实现,但不是微不足道的,也不是特别健壮的。 - Niko Matsakis
如果您使用我列出的API,就不需要直接使用生成器。如果您有任何问题,请告诉我。 - Ken Aspeslagh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接