【问题标题】:Document thumbnails generated from preview content从预览内容生成的文档缩略图
【发布时间】:2012-05-17 07:55:00
【问题描述】:

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

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

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

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

有人有什么想法或更明确的选择吗?

谢谢,

【问题讨论】:

  • 我也想实现这个,但是除了uiwebview之外没有找到解决方案

标签: iphone ios ipad document thumbnails


【解决方案1】:

我的解决方案: 我从来没有找到这个特殊问题的完整解决方案,但我能够相当有效地处理 PDF。老实说,我不记得是我写了这个还是找到了一个例子。如果是您的代码发布在其他地方,谢谢!此处的最终结果是 docImage 为空,或者包含 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2011-12-13
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    相关资源
    最近更新 更多