是否可以从.doc或.xls文档中获取缩略图图像?

我正在寻找从MS doc / xls文档的页面创建一个图像缩略图,但我一无所获。

对于pdf文档,我使用了Quarz框架,但在这种情况下我不能。

一些帮助?

Web视图可用于制作MS doc预览。

我试过用这段代码做过一次。 它工作……但是…… Web视图需要在图形线程中工作,所以当这个操作运行时你的界面会变慢。 也许你可以优化它。

@interface WebViewThumbnailGenerationOperation: NSOperation  { BOOL finished; } @property(nonatomic,retain) NSURL* documentURL; @property(nonatomic,retain) UIWebView* webView; -(void)saveThumbnail:(UIImage*)thumbnail; @end 

 /**************************************************************************************************/ #pragma mark - WebViewBased Thumbnails @implementation WebViewThumbnailGenerationOperation @synthesize documentURL,webView; -(void)dealloc { RELEASE_SAFELY(documentURL); [super dealloc]; } - (void)loadWebView { if (self.isCancelled) { return; } self.webView = [[[UIWebView alloc] init] autorelease]; self.webView.delegate = self; self.webView.scalesPageToFit = YES; self.webView.frame = CGRectMake(0, 0, 290, 290); NSURLRequest *request = [NSURLRequest requestWithURL:documentURL]; [self.webView loadRequest:request]; } - (void)webViewDidFinishLoad:(UIWebView *)webView { if (self.isCancelled) { return; } UIGraphicsBeginImageContext(CGSizeMake(290,290)); CGContextRef context = UIGraphicsGetCurrentContext(); [self.webView.layer renderInContext:context]; UIImage *thumbnail = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [self performSelectorInBackground:@selector(saveThumbnail:) withObject:thumbnail]; self.webView = nil; } -(void)saveThumbnail:(UIImage*)thumbnail { NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; if (self.isCancelled) { return; } if(!thumbnail) { return; } NSData* thumbnailData = UIImageJPEGRepresentation(thumbnail,0.8); [IOHelper saveThumbnailData:thumbnailData forDocumentURL:documentURL]; [self willChangeValueForKey:@"isFinished"]; finished = YES; [self didChangeValueForKey:@"isFinished"]; [pool release]; } -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSLog(@"Preview failed for %@ error %@",document.name,error); [self willChangeValueForKey:@"isFinished"]; finished = YES; [self didChangeValueForKey:@"isFinished"]; self.webView = nil; } -(void)start { finished = NO; [super start]; } - (void)main { if (self.isCancelled) { return; } [self performSelectorOnMainThread:@selector(loadWebView) withObject:nil waitUntilDone:YES]; } -(BOOL)isFinished { return finished; } @end 

编辑: ARC版!

 @interface WebViewThumbnailGenerationOperation: NSOperation  @property(nonatomic, strong) NSURL* documentURL; @property(nonatomic, strong) UIWebView* webView; @property(nonatomic) BOOL finished; -(void)saveThumbnail:(UIImage*)thumbnail; @end 

 /**************************************************************************************************/ #pragma mark - WebViewBased Thumbnails @implementation WebViewThumbnailGenerationOperation - (void)loadWebView { if (self.isCancelled) { return; } self.webView = [[UIWebView alloc] init]; self.webView.delegate = self; self.webView.scalesPageToFit = YES; self.webView.frame = CGRectMake(0, 0, 290, 290); NSURLRequest *request = [NSURLRequest requestWithURL:documentURL]; [self.webView loadRequest:request]; } - (void)webViewDidFinishLoad:(UIWebView *)webView { if (self.isCancelled) { return; } UIGraphicsBeginImageContext(CGSizeMake(290,290)); CGContextRef context = UIGraphicsGetCurrentContext(); [self.webView.layer renderInContext:context]; UIImage *thumbnail = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [self performSelectorInBackground:@selector(saveThumbnail:) withObject:thumbnail]; self.webView = nil; } -(void)saveThumbnail:(UIImage*)thumbnail { @autoreleasepool { if (self.isCancelled) { return; } if(!thumbnail) { return; } NSData* thumbnailData = UIImageJPEGRepresentation(thumbnail,0.8); [IOHelper saveThumbnailData:thumbnailData forDocumentURL:documentURL]; [self willChangeValueForKey:@"isFinished"]; finished = YES; [self didChangeValueForKey:@"isFinished"]; } } -(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSLog(@"Preview failed for %@ error %@", document.name, error); [self willChangeValueForKey:@"isFinished"]; finished = YES; [self didChangeValueForKey:@"isFinished"]; self.webView = nil; } -(void)start { finished = NO; [super start]; } - (void)main { if (self.isCancelled) { return; } [self performSelectorOnMainThread:@selector(loadWebView) withObject:nil waitUntilDone:YES]; } -(BOOL)isFinished { return finished; } @end