1

iOSアプリケーションでさまざまなタイプ(PDF、画像、ビデオ、HTML、.pages、.numbers、Wordなど)のダウンロードされたファイルを表すセルのグリッドを作成しており、プレビューサムネイルをプリエンプティブに作成する方法を探していますこれらのドキュメントをセルに表示します。私は現在、ユーザーが1つを選択した後、これらのドキュメントをプレビューするためにUIDocumentInteractionControllerを使用しており、icons配列がプレビュー画像を返すことを望んでいました。残念ながら、それは一般的なアイコンしか返しません。

PagesとNumbersがこれを行っているようですが、ドキュメントとフォーマットを所有しています。Quicklookフレームワークが解決策を提供することを期待していましたが、まだ見つけていません。これらのサムネイルを簡単に生成する方法を他に見つけた人はいますか?

他の人が示唆しているように、UIWebViewではなく実際のUIImageを使用したいと思います。その解決策はハックのようであり、私はそこにもっと良い解決策があると信じなければなりません。

私の次のオプションは、基本的にビューを画像としてキャプチャすることにより、ドキュメントを開いた後にプレビューを生成することですが、それでもハックのようです。

誰かが何か考えやより明確なオプションがありますか?

ありがとう、

4

1 に答える 1

3

私の解決策: この特定の問題の完全な解決策は見つかりませんでしたが、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
于 2012-12-05T22:47:26.787 に答える