2012-05-08 17 views
1

iosアプリケーションでさまざまなタイプ(PDF、画像、動画、HTML、.pages、.numbers、Wordなど)のダウンロードファイルを表すセルのグリッドを作成していますこれらのドキュメントがセルに表示されるようにプレビューサムネイルを事前に作成する方法を探しています。私は現在、UIDocumentInteractionControllerを使用して、ユーザが選択した後にこれらのドキュメントをプレビューし、アイコン配列がプレビューイメージを返すことを期待していました。残念なことに、汎用アイコンだけを返します。プレビューコンテンツから生成されたサムネイル画像

私はページと番号がこれを行うのを見るが、それらはドキュメントと書式を所有している。私は、Quicklookフレームワークが解決策を提供することを期待していましたが、私はそれをまだ見つけていません。他の誰かが簡単にこれらのサムネイルを生成する方法を見つけましたか?

私はUIWebViewではなく、実際のUIImageを使用することをお勧めします。その解決策はハックと思われるので、そこにはもっと良い解決策があると信じなければなりません。

私の次の選択肢は、本質的にビューをイメージとしてキャプチャすることによってドキュメントを開いた後にプレビューを生成することですが、まだ見た目が悪いようです。

誰もが思考や明確なオプションを持っていますか?

おかげで、

+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 
関連する問題