ios-文件预览-QLPreViewController

来源:互联网 发布:asp网站数据库下载 编辑:程序博客网 时间:2024/05/06 20:23

         最近在做的项目中有相关pdf文件预览的功能,所以了解了一下相关的资料。基本上网上给出来的方法有两种,分别是用UIWebVie和CGContextDrawPDFPage,可以点击查看,但是本文所要讲的是另外一种方式-----使用QLPreViewController进行预览,QLPreViewController不仅支持PDF,还支持其他多种文件的预览,可谓功能强大。

         先看下官方文档的说法:

A displayed preview includes a title taken from the last path component of the item URL. You can override this by implementing a preview​Item​Title accessor for the preview item.

A Quick Look preview controller can display previews for the following items:

  • iWork documents

  • Microsoft Office documents (Office ‘97 and newer)

  • Rich Text Format (RTF) documents

  • PDF files

  • Images

  • Text files whose uniform type identifier (UTI) conforms to the public.text type (see Uniform Type Identifiers Reference)

  • Comma-separated value (csv) files

   

        使用方式:

    

1.首先新建一个QLPreviewController对象preview;

2.遵循协议QLPreviewControllerDataSource,设置代理;

3.实现协议方法:返回文档数量方法- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller;

                           返回URL的方法 - (id <QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index;

4.模态或push出QLPreviewController的对象preview。



   关键代码:

#pragma mark -QLPreviewControllerDataSource- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {    return 1;}- (id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {        NSString *filePath = [[HKClassRoomManager sharedInstance] getFilePath:self.classFile];        NSAssert(filePath, @"preview nil item");        NSFileManager* fileManager = [NSFileManager defaultManager];    NSError* error = nil;    if ([fileManager fileExistsAtPath:filePath]) {        NSDictionary* fileInfo = [fileManager attributesOfItemAtPath:filePath                                                               error:&error];        NSInteger fileSize = [[fileInfo objectForKey:NSFileSize] integerValue];        if (fileSize >= 1024 * 1024 * 10) {            [NSObject showHudTipStr:@"文件较大,加载可能需要一段时间,请等待...."];        }    }        NSData *fileData = [NSData dataWithContentsOfFile:filePath];        //判断是UNICODE编码    NSString *isUNICODE = [[NSString alloc] initWithData:fileData encoding:NSUTF8StringEncoding];        //还是ANSI编码    NSString *isANSI = [[NSString alloc] initWithData:fileData encoding:-2147482062];        if (isUNICODE) {                NSString *retStr = [[NSString alloc]initWithCString:[isUNICODE UTF8String] encoding:NSUTF8StringEncoding];        NSData *data = [retStr dataUsingEncoding:NSUTF16StringEncoding];        NSError *error = nil;        [data writeToFile:filePath options:NSDataWritingAtomic error:&error];    }    else if(isANSI){                NSData *data = [isANSI dataUsingEncoding:NSUTF16StringEncoding];        NSError *error = nil;        [data writeToFile:filePath options:NSDataWritingAtomic error:&error];    }            NSURL *fileURL = [NSURL fileURLWithPath:filePath];    return fileURL;}


0 0
原创粉丝点击