繁体   English   中英

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

[英]Document thumbnails generated from preview content

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

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

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

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

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

谢谢,

我的解决方案:我从来没有找到完整的解决方案这个特定的问题,但我能够相当有效地处理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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM