2012-05-08 80 views
1

我創建了一個單元格網格,表示在ios應用程序中表示各種類型(PDF,圖像,視頻,HTML,.pages,。數字,Word等)的下載文件。尋找一種方法來預先創建這些文檔的預覽縮略圖以顯示在單元格中。我正在使用UIDocumentInteractionController預覽這些文件後用戶選擇一個,並希望圖標數組將返回預覽圖像。不幸的是,它只返回一個通用圖標。預覽內容生成的文檔縮略圖

我看到Pages和Numbers會這樣做,但它們擁有文檔和格式。我希望Quicklook框架能提供解決方案,但我還沒有找到它。其他人是否找到了輕鬆生成這些縮略圖的方法?

我更願意使用實際的UIImage而不是其他人所建議的UIWebView。該解決方案似乎是一個黑客攻擊,我不得不相信這裏有更好的解決方案。

我的下一個選擇是在他們打開文檔之後生成一個預覽,通過將視圖基本上捕獲爲圖像,但這仍然看起來很駭人聽聞。

任何人有任何想法或更清晰的選擇?

感謝,

+0

我也想實現這個,但沒有找到其他的解決方案,然後UIWebView的 – harshalb

回答

2

我的解決辦法: 我從來沒有發現一個完整的解決方案這方面的問題,但我能處理PDF是相當有效的。我真的不記得我是寫這個還是找到一個例子。如果這是你的代碼發佈在其他地方,謝謝!這裏的最終結果是docImage是null,或者包含PDF的第一頁作爲圖像。加載我的表格行時,我將圖像預覽設置爲默認圖像,然後使用塊在後臺線程上運行此代碼。完成後,我只需將預覽動畫回到單元格中即可。

NSURL *pdfFileURL = [NSURL fileURLWithPath:localFilePath]; 
CGPDFDocumentRef pdfDoc = CGPDFDocumentCreateWithURL((__bridge CFURLRef) pdfFileURL); 
NSUInteger numPages = CGPDFDocumentGetNumberOfPages(pdfDoc); 

if(numPages > 0) { 
    docImage = [UIImage imageFromPDFDocumentRef:pdfDoc]; 
} 
CGPDFDocumentRelease(pdfDoc); 

UIImage的類別:

@implementation UIImage (CGPDFDocument) 

+(UIImage *)imageFromPDFDocumentRef:(CGPDFDocumentRef)documentRef { 
    return [self imageFromPDFDocumentRef:documentRef page:1]; 
} 
+(UIImage *)imageFromPDFDocumentRef:(CGPDFDocumentRef)documentRef page:(NSUInteger)page { 
    CGPDFPageRef pageRef = CGPDFDocumentGetPage(documentRef, page); 
    CGRect pageRect = CGPDFPageGetBoxRect(pageRef, kCGPDFCropBox); 

    UIGraphicsBeginImageContext(pageRect.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    CGContextTranslateCTM(context, CGRectGetMinX(pageRect),CGRectGetMaxY(pageRect)); 
    CGContextScaleCTM(context, 1, -1); 
    CGContextTranslateCTM(context, -(pageRect.origin.x), -(pageRect.origin.y)); 
    CGContextDrawPDFPage(context, pageRef); 

    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    return finalImage;  
} 
@end