在IOS中实现导入&导出文档

导入&导出文档时IOS开发者经常面临的开发需求。例如你开发一个文档阅读器允许用户导入他的文档到你的应用中以便离线阅读。又如,你的阅读器可以导出文档以便其他应用使用。

这篇文章,将介绍各种IOS开发中使用的文档导入&导出技术。

1.创建应用

像通常那样,我将用一个例子来说明。打开Xcode,创建一个View-based Application(iPhone)工程,并且命名为“OfflineReader”

双击OfflineReaderViewController.xib打开它,利用以下的views布局:

* UIWebView

* Round Rect Button

选择UIWebView,打开其属性标签页面,确保选上“Scales Page to Fit”项。

在OfflineReaderViewController.xib,添加以下代码:

#import <UIKit/UIKit.h>

@interface OfflineReaderViewController : UIViewController<UIDocumentInteractionControllerDelegate> {

IBOutlet UIWebView *webView;

}

-(void)openDocumentIn;

-(void)handleDocumentOpenURL:(NSURL *)url;

-(void)displayAlert:(NSString *) str;

-(void)loadFileFromDocumentsFolder:(NSString *) filename;

-(void)listFilesFromDocumentsFolder;

-(IBAction) btnDisplayFiles;

@end

回到Interface Builder,连接IBOutlet和IBAction到UIWebView和UIButton。在File‘s Owner上右击后,会显示出现如下连接信息:

往工程里面拖进两个文件(如下图):一个PDF文件“Courses for Q2 2011.pdf”和一个icon.jpg图片文件。

打开OfflineReader-Info.plist文件,设“Icon file”键为“icon.jpg”

现在,你已经搭建了一个带图标的iPhone应用。而且,还有一个PDF文档在资源文件夹中。

2.导出文档

你首先学到的如何导入文档到你的应用当中。例如,在iPhone的邮件应用中,当你收到一个PDF文件,为了查看它,你可以点击上面的图标(如下图),或者点住不动。

如果你点住图标不动,会弹出一个action sheet(如下图)。你点击“Open in...”按钮就可以看到一个应用的列表,它表示你可以将文档导出的外部应用。

在我的iPhone上,它会显示如下:

那么,让我们现在修改我们的应用以便能导入在我们的资源文件夹中的PDF文档到外部应用。

首先,在OfflineReaderViewController.m中声明一个UIDocumentInteractionController类型的变量:

#import "OfflineReaderViewController.h"

@implementation OfflineReaderViewController

UIDocumentInteractionController *documentController;

UIDocumentInteractionController类提供了应用内用户文件交互的支持。在这个例子中,你会使用它来导出文档。

第二,实现以下方法:

-(void)openDocumentIn {

NSString * filePath = [[NSBundle mainBundle] pathForResource:@"Courses for Q2 2011" ofType:@"pdf"];

documentController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];

documentController.delegate = self;

[documentController retain];

documentController.UTI = @"com.adobe.pdf";

[documentController presentOpenInMenuFromRect:CGRectZero inView:self.view animated:YES];

}

-(void)documentInteractionController:(UIDocumentInteractionController *)controller willBeginSendingToApplication:(NSString *)application {

}

-(void)documentInteractionController:(UIDocumentInteractionController *)controller didEndSendingToApplication:(NSString *)application {

}

-(void)documentInteractionControllerDidDismissOpenInMenu:(UIDocumentInteractionController *)controller {

}

openDocumentIn方法基本上用来创建一个指向PDF文档的路径(你将要导出的文档),通过它来关联documentController对象。你需要设置UTI(Uniform Type Identifiers,唯一类型标识)以便能让系统找到合适的应用来打开你的文档。在这个例子中,设置为“com.adobe.pdf”,表示PDF文档。其他的常用UTI有如“com.apple.quicktimemovie”(QuickTime movies),“public.html”(HTML文档),和“public.jpeg”(JPEG文件)。

可以查阅Apple官方文档得到已公开的UTI:System-Declared Uniform Type

其他三个方法定义在UIDocumentInteractionControllerDelegate protocol中。当documentController对象被调用是,它们会被回调。在该例中,你可以不实现这三个方法。

最后,在viewDidLoad方法中,添加如下代码:

- (void)viewDidLoad {

[super viewDidLoad]; [self openDocumentIn];

} 在真机上测试程序。当界面加载时,你会看见action sheet显示了一个应用列表(如下),你可以往列表中的应用导出你的文档。

如果你选择了iBooks,PDF文档显示如下:

2.文件分享

上一节展示了如何导出文档到外部应用。那么有什么方法可以导入文档。在IOS中,一般有两种方法:

* 通过iTunes

* 应用间的文件交换

现在讨论第一种方式。第一种方式用一种相当简单和直接的方式让用户传入或传出一些较大的文件到应用中。在OfflineReader-Info.plist中,添加键“UIFileSharingEnabled”如下:

现在运行程序。然后打开iTune

,选择你的设备(如下),再选择“Apps”标签,最后会看见你的OfflineReader应用显示着File Sharing:

为了向应用传入一个文件,只要把它拖进OfflineReader Documents的框框中(如下)。所以传入的文档都会放置在应用的Documents文件夹中。

如果要传出应用中的文件,你只要点击“Save to...”按钮即可。

现在,为了证明文件已经被传入到应用中,添加如下代码到OfflineReaderViewController.m中:

-(void) displayAlert:(NSString *) str {

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"

message:str

delegate:self

cancelButtonTitle:@"OK"                                                                                         otherButtonTitles:nil];

[alert show];

[alert release];

}

- (void)handleDocumentOpenURL:(NSURL *)url {

NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

[webView setUserInteractionEnabled:YES];

[webView loadRequest:requestObj];

}

-(void)loadFileFromDocumentsFolder:(NSString *) filename {

//---get the path of the Documents folder---

NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:filename];

NSURL *fileUrl = [NSURL fileURLWithPath:filePath];

[self handleDocumentOpenURL:fileUrl];

}

-(void)listFilesFromDocumentsFolder {

//---get the path of the Documents folder---

NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

NSFileManager *manager = [NSFileManager defaultManager];

NSArray *fileList = [manager contentsOfDirectoryAtPath:documentsDirectory error:nil];

NSMutableString *filesStr = [NSMutableString stringWithString:@"Files in Documents folder \n"];

for (NSString *s in fileList){

[filesStr appendFormat:@"%@ \n", s];

}

[self displayAlert:filesStr];

[self loadFileFromDocumentsFolder:@"0470918020.pdf"];

}

- (IBAction) btnDisplayFiles {

[self listFilesFromDocumentsFolder];

}

运行应用,点击“Display files in Documents”按钮,WebView会显示出文件名和文件内容到(如下),证实了文件确实被成功传入了应用中。

3.文档导入

第二种传递文档的方法是通过其他应用(如第一节所说的)。在本文开头,你已经看到如何将PDF文档传到iBooks中并打开浏览。现在,你将学到如何将文档传入你的应用为你所用。

首先,你要使你的应用接受PDF文档。你需要做的是让IOS知道你的应用能接受PDF文档(注册应用)。打开OfflineReader-Info.plist,并如下修改,添加CFBundleDocumentTypes键:

解释如下:

* CFBundleDocumentTypes键:Array类型,它包含一个dictionary数组,这个dictionary表示你的应用可以支持的文档类型

* Item0类型为Dictionary

* CFBundleTypeName:文档类型名

* LSHandleRank:应用的所有者(以上声明的这种文件类型的创建者),有Alternate(这种文件类型的另外一个浏览者)、None或Default

* CFBundleTypeRole:应用通过什么方式处理这种文件:Editor、Viewer、Shell或None

* LSItemContentTpyes:Array类型,它包含表示这种文件类型的UTI数组

通过以上设置就可以向IOS注册你的应用,以便可以处理PDF文档。

当一个PDF文档传到应用中后,应用就会自动调用方法:application:openURL:sourceApplication:annotation: 该方法必须在application delegate中实现。

因此,添加如下代码:

#import "OfflineReaderAppDelegate.h"

#import "OfflineReaderViewController.h"

@implementation OfflineReaderAppDelegate

@synthesize window;

@synthesize viewController;

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {

if (url != nil && [url isFileURL]) {

[self.viewController handleDocumentOpenURL:url];

}

return YES;

}

当文档传入到应用中时,它会被复制到Document文件夹下的“Inbox”目录中。以上方法url参数表示Inbox目录的路径。一旦文档被传入,你将调用OfflineReaderViewController类的handleDocumentOpenURL:方法,以便加载文档到WebView。

为了看看该文档的URL,添加如下代码(handleDocumentOpenURL:方法):

- (void)handleDocumentOpenURL:(NSURL *)url {

[self displayAlert:[url absoluteString]];

NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

[webView setUserInteractionEnabled:YES];

[webView loadRequest:requestObj];

} 运行程序。这时,同样在email中浏览包含PDF的附件一样,点击图标不放,你将发现有个可以通过OfflineReader(你的应用)打开该文档的选项:

当文档通过你的应用中打开,你将看到如下:

4.导入自定义文档

上一节显示了如何导入司空见惯的文档,如PDF。如果到导入你自己定义的文档呢?例如一种从未见过的,只有你的应用可以打开的.sdk后缀的文档。

为了确保你的应用能处理.sdk文档,你要在OfflineReader-Info.plist中添加必要的键:

如上,在CFBundleDocumentTypes键的数组中添加多了一项。你设置了LSItemContentTypes一个唯一的值(自己定义)。因为这是你自定义的content-type,你必须用UTExportedTypeDeclaratios键来定义它(这种类型)。

备注:更多关于UTI的资料,请查阅Apple官方文档“Introduction to Uniform Identifiers Overview”

再次运行程序。这时,如果你的email包含了.sdk文件,你将看到IOS允许使用你的应用打开.sdk文件。

时间: 2024-10-25 23:05:16

在IOS中实现导入&导出文档的相关文章

CSDN-markdown编辑器之导入导出文档功能

CSDN-markdown编辑器支持从线上和本地导入Markdown文件.导出Markdown文件和HTML文件的功能.在工具栏上有三个按钮来实现这些功能.这三个按钮分别是:从线上导入MD文件.从本机导入MD文件.导出到本地. CSDN-markdown编辑器的导入功能让我们很方便的基于已有的Markdown文件进行重新编辑修改,然后发表博文. CSDN-markdown编辑器的导出功能让我们很容易的将在CSDN上发表的博文进行本地存档备份,或者你导出到本地后,再上传到CSDN CODE上进行在

eclipse中自动生成javadoc文档的方法

?这篇文章主要介绍了eclipse中自动生成javadoc文档的方法,是实用eclipse开发Java程序时非常实用的技巧,对于进行Java项目开发具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例讲述了eclipse中自动生成javadoc文档的方法.分享给大家供大家参考.具体方法如下: 使用eclipse生成文档(javadoc)主要有三种方法: 1. 在项目列表中按右键,选择Export(导出),然后在Export(导出)对话框中选择java下的javadoc,提交到下一步. 在Jav

iOS UIKit 框架 346 篇文档分类整理 - 预告

太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. 当前正在进行的是 "iOS Foundation 框架 224 篇相关文档分类整理",量很大,但会根据实际开发中的使用频繁程序

ASP.NET 导入EXCEl文档

鉴于教务一般都是手动输入学生信息,在未了解本校数据库的客观情况之下,我们准备设计一个导入excel文档中学生信息如数据库的功能.结合网上各类大牛的综合版本出炉.. 首先具体的实现思想如下: 1.先使用FileUpload控件fuload将Excel文件上传到服务器上得某一个文件夹. 2.使用OleDb将已经上传到服务器上的Excel文件读出来,这里将Excel文件当做一个数据库来读.在联系数据库语句中,Data Source就是该文件在服务器上得物理路径 3.将第二步中读出的数据以DataTab

IOS 预览pdf,word文档的集中方式

在iPhone中可以很方便的预览文档文件,如:pdf.word等等,这篇文章将以PDF为例.介绍三种预览PDF的方式,又分别从本地pdf文档和网络上的pdf文档进行对比. 预览本地PDF文档: 1.使用UIWebView控件 UIWebView是iPhone开发中最常用的控件之一,类似.net中的webBrowser控件.使用它预览PDF文件相当的方便和简单. 在UIWebView中预览PDF文档的关键代码如下: 效果: 2.使用CLPreviewController CLPreviewCont

基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)

前言 在上一篇导出文档番外篇中,我们已经熟悉了怎样根据json数据导出word的文档,生成接口文档,而在这一篇,将对上一篇进行完善补充,增加多种导出方式,实现更加完善的导出功能. 回顾 1. 获取Swagger接口文档的Json文件 2. 解析Json文件数据填充到Html的表格中 3.根据生成的html转work文档 功能 开始 根据生成的html转work文档 /// <summary> /// 静态页面转文件 /// </summary> /// <param name

BCP是SQL Server中负责导入导出数据的一个命令行工具

BCP是SQL Server中负责导入导出数据的一个命令行工具,它是基于DB-Library的,并且能以并行的方式高效地导入导出大批量的数据.BCP可以将数据库的表或视图直接导出,也能通过SELECT FROM语句对表或视图进行过滤后导出.在导入导出数据时,可以使用默认值或是使用一个格式文件将文件中的数据导入到数据库或将数据库中的数据导出到文件中. 下面将详细讨论如何利用BCP导入导出数据. 1. BCP的主要参数介绍 BCP共有四个动作可以选择. (1) 导入. 这个动作使用in命令完成,后面

如何在ASP.NET Core 中快速构建PDF文档

比如我们需要ASP.NET Core 中需要通过PDF来进行某些简单的报表开发,随着这并不难,但还是会手忙脚乱的去搜索一些资料,那么恭喜您,这篇帖子会帮助到您,我们就不会再去浪费一些宝贵的时间. 在本文中我们将要使用DinkToPDF来处理我们在.NET Core Web 程序中进行构建PDF文档!就现在我们不多说,直接开始有趣的部分. 前言 您可以通过创建PDF文档在我的仓库中,获取源代码,欢迎给个免费的Star... 现在我们创建一个.NET Core 3.0 项目,至于是mvc.Api.这

PHP实例:使用PHPExcel导入Excel2003文档和Excel2007文档到MySQL数据库中

如果要使用phpExcelReader将Excel 数据导入到mysql 数据库,请读者点击这个文章查看. 使用phpExcelReader将Excel 数据导入到mysql 数据库. 下面我们介绍另一种方法来实现导入Excel到MySQL数据库. 1.到官网http://phpexcel.codeplex.com/下载PHPExcel类库,我目前使用的是1.7.9版本.如图: 2.直接上代码. (1).conn.php文件(这个不用介绍,你懂得): PHP Code复制内容到剪贴板 $mysq