gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:20:18 29 4
gpt4 key购买 nike

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

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

有帮助吗?

最佳答案

Web View 可用于制作 MS 文档预览。

我曾尝试用这段代码来做到这一点。它有效……但是…… WebView 需要在图形线程中工作,所以当这个操作运行时你的界面会变慢。也许你能优化一下。

标题

@interface WebViewThumbnailGenerationOperation: NSOperation <UIWebViewDelegate> {
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 <UIWebViewDelegate>

@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

关于iphone - 是否可以从 .doc 或 .xls 文档中获取缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8475125/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com