2010-01-30 24 views
14

Tôi đang tìm kiếm một cách (công khai hoặc cách khác) để có được một NSView, NSImage, CGImageRef, v.v ... cho thấy Xem nhanh QuickLook cho một tệp. Về cơ bản tương đương với QLThumbnailImageCreate() nhưng để xem trước.Xem trước nhanh trên Mac trong NSView hoặc NSImage?

API công cộng mà tôi có thể tìm thấy không hỗ trợ điều này. Chúng cho phép tạo hình thu nhỏ hoặc QLPreviewPanel. Trên thực tế, bảng điều khiển hiển thị bản xem trước nhanh, nhưng tôi không thể truy cập vào giao diện của bản xem trước để nhúng nó trong các chế độ xem khác hoặc tôi cũng không thể hiển thị nhiều bản xem trước cùng một lúc. Đối với nền, tôi đang viết một ứng dụng mà người dùng có thể nhúng liên kết đến các tệp khác sẽ được hiển thị nội dòng, giống như một thẻ <img> trong HTML. Đối với hình ảnh như JPG và PDF, thật dễ dàng để tìm ra những gì để hiển thị. Tôi nghĩ rằng đối với các định dạng khác, tôi sẽ sử dụng Quick Look để tạo ra một biểu diễn trực quan đẹp về nội dung của tệp. Bằng cách này, tập hợp các định dạng được ứng dụng của tôi hỗ trợ sẽ dễ dàng mở rộng (chỉ cần tải xuống trình tạo Quick Look mới).

Trả lời

5

Tôi đã xem xét điều này một cách rộng rãi một lần và không thể tìm thấy cách dễ dàng để thực hiện điều đó. Tùy thuộc vào loại tệp, QuickLook tạo các loại đầu ra khác nhau. Ví dụ, đối với các tệp iWork, trình tạo tạo HTML mà nó hiển thị trong một WebView. Đối với các loại khác, nó trả về các loại dữ liệu khác nhau.

tôi không bao giờ kết thúc bằng cách sử dụng mã này, nhưng đây là một số mã tôi đào lên và một số API tin rằng có thể có ích:

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

Bạn cũng có thể muốn kiểm tra này ra từ Matt Gemmell: http: //mattgemmell.com/2007/10/29/how-to-get-a-quick-look-preview-as-an-nsimage Nó sử dụng QLThumbnailImageCreate để tạo bản xem trước (thậm chí lớn). Nếu tôi nhớ chính xác, vấn đề tôi gặp phải là nó chỉ làm việc với các tài liệu trang đầu tiên. –

+2

Mặc dù tiêu đề của mã từ Matt Gemmell, thực tế nó chỉ trả lại hình thu nhỏ chứ không trả về bản xem trước. –

+0

Cảm ơn các API riêng ... những giao diện này hữu ích. Tôi thấy rằng cách chính đáng duy nhất để làm điều này là bằng cách nào đó tìm thấy các gói máy phát điện cho một tập tin nhất định và sau đó đóng vai trò của bảng điều khiển QL, chấp nhận HTML, hình ảnh, vv khi cần thiết. Dường như có thể thực hiện được với đủ hack nhưng không tầm thường cũng không đặc biệt mạnh nếu Apple thay đổi. –

Các vấn đề liên quan