IOS实现doc、pdf等文档读取

iCould相关配置

AppID配置

打开iCloud 开关,并配置一个iCloud容器。在这里插入图片描述
在这里插入图片描述

工程配置

这里有个坑,xcode 必须要登录开发者账号,否则iCloud Document 选项选择会报错。
在这里插入图片描述

代码调用

获取选取本地文件路径
//获取UIDocumentPickerViewController对象,设置代理
- (UIDocumentPickerViewController *)getDocumentPickerVC {
    if(self._curSelectView == nil)
    {
        NSArray *types = @[@"public.content",@"public.text",@"public.source-code",@"public.audiovisual-content",@"com.adobe.pdf",@"com.microsoft.word.doc"];
        self._curSelectView = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:types inMode:UIDocumentPickerModeOpen];
            //设置代理
        self._curSelectView.delegate = self;
            //设置模态弹出方式
        self._curSelectView.modalPresentationStyle = UIModalPresentationFormSheet;
    }
    return self._curSelectView;
}
//实现选取文件代理接口
- (void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls {
    //获取授权
    BOOL fileUrlAuthozied = [urls.firstObject startAccessingSecurityScopedResource];
    if (fileUrlAuthozied) {
        NSFileCoordinator *fileCoordinator = [[NSFileCoordinator alloc] init];
        NSError *error;
        [fileCoordinator coordinateReadingItemAtURL:urls.firstObject options:0 error:&error byAccessor:^(NSURL *newURL) {
            [self loadDocContent:newURL];
            UIViewController *presentingVc = self._curSelectView;
            while (presentingVc.presentingViewController) {
                presentingVc = presentingVc.presentingViewController;
            }
            if(presentingVc){
                [presentingVc dismissViewControllerAnimated:YES completion:nil];
            }
        }];
        [urls.firstObject stopAccessingSecurityScopedResource];
    } else {
        //授权失败
    }
}


//实现代理

读取文件

UIDocumentPickerViewController 类没有直接读取文档类型文件的接口,虽然有很多方式可以预览文件,但这里我希望的是能拿到文件的数据。头疼了一会,突然看到有个关于读取webview内容的博客,然后就就忽然明白了。webview能加载不同类型的文件,我们可以通过webview加载文件,加载完成后,通过webview的js接口就能拿到我们想要的内容了。

//加载文件
-(void)loadDocContent:(NSURL*) url
{
    NSData *data = [NSData dataWithContentsOfURL:url];
    NSString* sType = [self getDocType:url];
    [self._docContentView loadData:data MIMEType:sType textEncodingName:@"UTF-8" baseURL:nil];
    
    //[self._docContentView loadRequest:[NSURLRequest requestWithURL:url]];
    
}
//获取文件类型
-(NSString *)getDocType:(NSURL *)url{
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSURLResponse *response = nil;
    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    return response.MIMEType;
}

//需要设置webview代理
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
    NSString *tempStr = [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerText"];
    NSLog(@"%@",tempStr);
    if (tempStr)
    {
		//拿到的数据要执行的操作
    }
    
}

这里有一个坑的,loadRequest加载的文件必须要添加到工程里,否则会报文件找不到的错误,需要换用loadData方式,不过在这之前,要获取文件的类型。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王富贵9527

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值