热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS-打开word、ppt、pdf、execl文档方式

这里面包括下载和打开文档的操作:需要先导入《AFNetworking》的框架第一步:创建一个显示文档的view:ReadViewController(1).h的代码如下:@in

这里面包括下载和打开文档的操作:需要先导入《AFNetworking》的框架

 

第一步:创建一个显示文档的view:ReadViewController

(1).h的代码如下:

@interface ReadViewController : UIViewController
-(void)loadOfficeData:(NSString *)officePath;
@end

 (2).m的代码如下:

@interface ReadViewController ()
{
    UIWebView * _dataView;
    NSString* _urlStr;
}
@end

@implementation ReadViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    if ([self respondsToSelector:@selector(setAutomaticallyAdjustsScrollViewInsets:)])
    {
        self.automaticallyAdjustsScrollViewInsets = NO;
        self.modalPresentatiOnCapturesStatusBarAppearance= NO;
    }
    
    if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    {    self.edgesForExtendedLayout = UIRectEdgeNone;   }
    
    self.navigationItem.leftBarButtOnItem= [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:self action:@selector(back)];
}

- (void)back {
    [self dismissViewControllerAnimated:YES completion:nil];
}
//仍然下载上面的。m里面

-(void)loadOfficeData:(NSString *)officePath{
    _urlStr=officePath;
    
    if (!_dataView) {
        _dataView=[[UIWebView alloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width, self.view.frame.size.height)];
        [self.view addSubview:_dataView];
        
    }
    _dataView.autoresizingMask=UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth;
    
    NSURL *url = [[NSURL alloc] initWithString:_urlStr];
    _dataView.scalesPageToFit = YES;
    NSURLRequest *requestDoc = [NSURLRequest requestWithURL:url];
    [_dataView loadRequest:requestDoc];
    
    
}

 

 

第二步:创建一个下载和打开文档的工具类:YZFileDownloadAndReadTool

(1)YZFileDownloadAndReadTool.h的代码如下:

@interface YZFileDownloadAndReadTool : NSObject

/* 打开文档 */
- (void)openDocument:(NSString *)documentPath;

//设置单利
+ (YZFileDownloadAndReadTool *)shareManager;

@end

 (2)YZFileDownloadAndReadTool.m的代码如下:

#import "YZFileDownloadAndReadTool.h"

#import "ReaderViewController.h"
#import "AFNetworking.h"
#import "ReadViewController.h"

#define GetFileInAppData(file) [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"/Documents/%@",file]]

@interface YZFileDownloadAndReadTool ()

@end

@implementation YZFileDownloadAndReadTool

+ (YZFileDownloadAndReadTool *)shareManager {
    static YZFileDownloadAndReadTool *shareManagerInstance = nil;
    static dispatch_once_t predicate; dispatch_once(&predicate, ^{
        shareManagerInstance = [[self alloc] init];
    });
    return shareManagerInstance;
}

/**
 *  @author Jakey
 *
 *  @brief  下载文件
 *
 *  @param paramDic   附加post参数
 *  @param requestURL 请求地址
 *  @param savedPath  保存 在磁盘的位置
 *  @param success    下载成功回调
 *  @param failure    下载失败回调
 *  @param progress   实时下载进度回调
 */
- (void)downloadFileWithOption:(NSDictionary *)paramDic
                 withInferface:(NSString*)requestURL
                     savedPath:(NSString*)savedPath
               downloadSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
               downloadFailure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
                      progress:(void (^)(float progress))progress

{
    
    //沙盒路径    //NSString *savedPath = [NSHomeDirectory() stringByAppendingString:@"/Documents/xxx.zip"];
    AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
    NSMutableURLRequest *request =[serializer requestWithMethod:@"POST" URLString:requestURL parameters:nil error:nil];
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request];
    [operation setOutputStream:[NSOutputStream outputStreamToFileAtPath:savedPath append:NO]];
    [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
        float p = (float)totalBytesRead / totalBytesExpectedToRead;
        progress(p);
        NSLog(@"download:%f", (float)totalBytesRead / totalBytesExpectedToRead);
        
    }];
    
    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
        success(operation,responseObject);
        NSLog(@"下载成功");
        
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        success(operation,error);
        
        NSLog(@"下载失败");
        
    }];
    
    [operation start];
}

- (void)downloadDocumentOperation:(NSString *)fileName {
    NSString *filePath = GetFileInAppData(fileName);
    NSString *tempFileName = [NSString stringWithFormat:@"%@.bak",fileName];
    NSString *tempFilePath = GetFileInAppData(tempFileName);
    
    NSLog(@"----savePath----%@", filePath);
    
#warning url 需要修改
    
    [self downloadFileWithOption:nil
                   withInferface:@"http://223.202.51.70/FileServer/DownloadFile/17adc036-24ac-4df8-8a49-90c312c0f300.pdf"
                       savedPath:filePath
                 downloadSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
                     [[NSFileManager defaultManager] moveItemAtPath:tempFilePath toPath:filePath error:nil];
//                     [self openDocument:filePath];
                     [self openHadDownloadDocument:fileName];
                 } downloadFailure:^(AFHTTPRequestOperation *operation, NSError *error) {
                     
                 } progress:^(float progress) {
                     
                 }];
}

/* 打开文档 */
- (void)openDocument:(NSString *)documentPath{
 
    UIWindow *window = [[[UIApplication sharedApplication] delegate] window];
    NSString *filePath = GetFileInAppData(documentPath);
    NSString *documentName = [filePath lastPathComponent];
    
    
    if (![[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        [self downloadDocumentOperation:documentPath];
        return;
    }
    
        ReadViewController * readView=[[ReadViewController alloc] init];
        UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:readView];
        [window.rootViewController presentViewController:nav animated:YES completion:nil];
        
        readView.navigationItem.title=documentPath;
        NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
        
        NSString* _urlStr=[NSString stringWithFormat:@"%@/%@",documentsDirectory,[documentPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
        
        [readView loadOfficeData:_urlStr];
    
}

 

第三步:在需要的点击,倒入 YZFileDownloadAndReadTool.h,接着实现

#pragma mark - 点击界面下载pdf
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

//    YZFileDownloadAndReadTool *tools = [YZFileDownloadAndReadTool shareManager];
//    [tools openDocument:@"01-传感器.pptx"];
    
    [[YZFileDownloadAndReadTool shareManager] openDocument:@"01-传感器.pptx"];
//    [tools openDocument:@"button圆角的设置和边框的设置.docx"];
//    [tools openDocument:@"沃迪康工作计划安排.xlsx"];
//    [tools openDocument:@"ArcGIS for iOS 2.3开发教程-基础版.pdf"];
}

 


推荐阅读
  • 深入解析 Android 中 EditText 的 getLayoutParams 方法及其代码应用实例 ... [详细]
  • 本文探讨了在PHP中实现MySQL分页查询功能的优化方法与实际应用。通过详细分析分页查询的常见问题,提出了多种优化策略,包括使用索引、减少查询字段、合理设置缓存等。文章还提供了一个具体的示例,展示了如何通过优化模型加载和分页参数设置,显著提升查询性能和用户体验。 ... [详细]
  • 【问题】在Android开发中,当为EditText添加TextWatcher并实现onTextChanged方法时,会遇到一个问题:即使只对EditText进行一次修改(例如使用删除键删除一个字符),该方法也会被频繁触发。这不仅影响性能,还可能导致逻辑错误。本文将探讨这一问题的原因,并提供有效的解决方案,包括使用Handler或计时器来限制方法的调用频率,以及通过自定义TextWatcher来优化事件处理,从而提高应用的稳定性和用户体验。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • 本指南介绍了 `requests` 库的基本使用方法,详细解释了其七个主要函数。其中,`requests.request()` 是构建请求的基础方法,支持其他高级功能的实现。此外,我们还重点介绍了如何使用 `requests.get()` 方法来获取 HTML 网页内容,这是进行网页数据抓取和解析的重要步骤。通过这些基础方法,读者可以轻松上手并掌握网页数据抓取的核心技巧。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 在近期的项目开发过程中,ORM层采用了MyBatis,并且需要连接多个数据库,这带来了多数据源配置的挑战。为了解决这一问题,我们可以通过巧妙运用注解来实现优雅的数据源切换,确保系统的灵活性和可维护性。这种方法不仅简化了配置,还提高了代码的可读性和扩展性。 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
author-avatar
000冷000
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有