ios-文件预览-QLPreViewController

         最近在做的项目中有相关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;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值