从预览内容生成的文档缩略图

时间:2012-05-08 19:35:56

标签: iphone ios ipad document thumbnails

我正在创建一个单元格网格,表示ios应用程序中各种类型的下载文件(PDF,图像,视频,HTML,.pages,.numbers,Word等),我正在寻找一种先发制人的方式为这些文档创建预览缩略图以显示在单元格中。我正在使用UIDocumentInteractionController在用户选择一个文档之后预览这些文档,并希望图标数组将返回预览图像。不幸的是,它只返回一个通用图标。

我看到Pages和Numbers会这样做,但他们拥有文档和格式。我希望Quicklook框架能提供解决方案,但我还没有找到它。有没有其他人找到一种方法来轻松生成这些缩略图?

我更喜欢使用实际的UIImage而不是其他人建议的UIWebView。这个解决方案似乎是一个黑客,我不得不相信那里有更好的解决方案。

我的下一个选择是在他们打开文档后通过将视图捕获为图像来生成预览,但这看起来仍然是hackish。

有人有任何想法或更明确的选择吗?

谢谢,

1 个答案:

答案 0 :(得分: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