IOS实现doc、pdf等文档读取

IOS实现tex、doc、pdf等文档读取

    • iCould相关配置
        • AppID配置
        • 工程配置
    • 代码调用
        • 获取选取本地文件路径
        • 读取文件

iCould相关配置

AppID配置

打开iCloud 开关,并配置一个iCloud容器。IOS实现doc、pdf等文档读取_第1张图片
IOS实现doc、pdf等文档读取_第2张图片

工程配置

这里有个坑,xcode 必须要登录开发者账号,否则iCloud Document 选项选择会报错。
IOS实现doc、pdf等文档读取_第3张图片

代码调用

获取选取本地文件路径
//获取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方式,不过在这之前,要获取文件的类型。

你可能感兴趣的:(IOS,doc文件,文件上传,文件读取,iCloud)