在iPhoneApp中加载PDF
原文: http://ios.biomsoft.com/2012/02/17/load-a-pdf-file-in-the-iphone-app-smoothly/
本节将学习如何从服务器加载 pdf 文件到 iOS程序中。
这需要使用 QuickLook Framework 中的 QLPreviewController类。使用这个类,你可以查看如下文档:
a) iWork 文档
b) Microsoft Office 文档
c) RTF 文档
d) PDF 文档
e) 图片
f) Text 文件
g) CSV (逗号分隔文件)
在本教程中,我将显示 pdf 文件,这个文件可能放在任何地方:服务器或者应用程序束。但为了更好地演示,我将从服务器获取这个文件。
步骤1: 打开 Xcode 创建如下所示界面:

步骤 2: 加入Quick Look framework 到项目中,并在 view controller 的.h文件中import 相应的头文件:#import <QuickLook/QuickLook.h>。在 table view 的 didSelectRowAtIndex 方法中创建QLPreviewController 实例,然后指定它的dataSource 和 delegate 。
-(void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{
//用不同 URL 字符串初始化 fileURL 对象
switch (indexPath.row) {
:
fileURL = [NSURL URLWithString:kStringURLViewControllerPDF];
break;
:
fileURL = [NSURL URLWithString:kStringURLQLPreviewControllerPDF];
break;
:
fileURL = [NSURL URLWithString:kStringURLUIDocumentInteractionControllerPDF];
break;
}
//创建 QLPreviewController 实例
QLPreviewController *previewController =[[QLPreviewControlleralloc] init];
//设置 datasource 属性为 self
previewController.dataSource = self;
//将 QLPreviewController 压入 NavigationController 堆栈中显示
[[self navigationController] pushViewController:previewController animated:YES];
[previewControllerrelease];
}
代码说明:
主要的代码都已加上了注释。我们初始化了filURL对象,这个对象是一个NSURL,将会被作为 QLPreviewController 的datasource ,以便加载 pdf 文件。
步骤 3: 实现QLPreviewController datasource 方法。在这个方法中完成 PDF的显示。
#pragma markQLPreviewControllerDataSource
// 返回preview controller要预览的数目
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController*)previewController
{
return30;
}
// 返回preview controller 即将预览的内容
returns the item thatthe preview controller should preview
- (id)previewController:(QLPreviewController*)previewControllerpreviewItemAtIndex:(NSInteger)idx
{
return fileURL;
}
代码说明:
numberOfPreviewItemsInPreviewController: 方法通知Quick Look preview controller 在预览导航窗口中有多少项内容(必须实现)。
previewItemAtIndex: 方法根据索引返回指定条目(必须实现)。
步骤 4: 将视图添加到 navigation controller,然后将 navigation controller 添加到 window。当然你也可以不使用navigation controller 。
步骤 5: 运行程序,查看 PDF's

可以缩放和打印PDF。
你还可以使用 UIDocumentInteractionController,但它有点复杂,我觉得 Quick Look 更简单一些。
源代码下载地址:here.
在iPhoneApp中加载PDF的更多相关文章
- 使用 pdf.js 在网页中加载 pdf 文件
在网页中加载并显示PDF文件是最常见的业务需求.例如以下应用场景:(1)在电商网站上购物之后,下载电子发票之前先预览发票.(2)电子商务管理系统中查看发布的公文,公文文件一般是PDF格式的文件. 目前 ...
- Android 如何本地加载pdf文件
大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是,用户在app内下载好pdf文件后,不通过第三方的工具,本地打开. 这样的需求要怎么实现呢?上 ...
- iOS Interface Builder:在.xib文件中加载另一个.xib文件
在开发中,经常会用到一个需要重复使用的模块,比如好友列表中每个用户的展示或每条动态,这些都是相同的模版,这样我们就可以把这个部分提取出来放到一个单独的.xib中.那么提取出的.xib如何在其他.xib ...
- Flexigrid从对象中加载数据
(有问题,在找…………) Flexigrid是用来动态加载数据的一种比较好(老)的Jquery表插件,然后有些时候,我们需要其从本地或者jQuery对象中加载数据,比如有这么个需求,页面显示中有两个表 ...
- C#动态编译代码,执行一个代码片段,或者从指定文件中加载某个接口的实现类
在项目进行中有时候会需要配置一些复杂的表达式,在程序运行的时候执行表达式,根据结果执行相应的操作,简单写了一个类Expression,利用.net的动态编译技术实现,代码如下: public clas ...
- 如何在HTML中加载Flash(2种实现方法)_HTML/Xhtml_网页制作
点评:如何在HTML中加载Flash,为网页添加更多的色彩,普通的网页以无法满足用户的需求,接下来为大家介绍下2种在HTML中加载Flash的方法,感兴趣的各位可以适当参考下,希望对你有所帮助 第一种 ...
- 解决方案:带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载可能出现 COM 组件的80040154错误
建议大家在微软的组件出现问题时,在GOOGLE上搜索解决方案,一般来说,总有结果: 带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载,可能出现 COM 组件的80 ...
- Spring中加载xml配置文件的六种方式
Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog 因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...
- Android中加载位图的方法
Android中加载位图的关键的代码: AssetManager assets =context.getAssets(); //用一个AssetManager 对象来从应用程序包的已编译资源中为工程加 ...
随机推荐
- python验证码识别
关于利用python进行验证码识别的一些想法 用python加“验证码”为关键词在baidu里搜一下,可以找到很多关于验证码识别的文章.我大体看了一下,主要方法有几类:一类是通过对图片进行处 理,然后 ...
- 理解js的prototype原型对象
我们创建的每一个函数都有一个prototype(原型)属性.这个属性是一个指针,指向一个对象,而这个对象的用途是包括能够由特定类型的全部实例共享的属性和方法.假设依照字面意思来理解,那么prototy ...
- WinForm中嵌入WebBrowser,并且支持C#和JS方法的相互调用
纯粹WinForm界面不够友好,实现数据复杂度高的处理有些力不从心,所以看了看api以后决定用html来做. 我的wlw的代码插件不是很好用,大家凑合看吧 类前说明引用和权限 1: [Permissi ...
- 基于visual Studio2013解决面试题之1102合并字符串
题目
- Jquery Mobile转场特效之slide | 小小iPhone开发
Jquery Mobile转场特效之slide | 小小iPhone开发 2012 Jquery Mobile转场特效之slide 作者:小小 发布:2012-12-12 14:03 分类:j ...
- android ble蓝牙开发略解
Android 蓝牙4.0开发 1. 权限和相关属性 “android:required="true"表示apk只有在具有bluetooth_le属性的系统里运行,这个4.3之前 ...
- 自己用h5写的转盘。写贴上来吧。
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- DEBUG模式下, 内存中的变量地址分析
测试函数的模板实现 /// @file my_template.h /// @brief 测试数据类型用的模板实现 #ifndef MY_TEMPLATE_H_2016_0123_1226 #defi ...
- cocos2d学习笔录1
CCDirector的主要作用: 1.访问和改变场景: 2.访问cocos2d-x的配置细节 3.访问视图(OPENGL,UIVIEW,UIWINDOW): 4.暂停,恢复和结束游戏: 5.在UIKi ...
- HDU 3480 DP+斜率优化
题意:给你n个数字,然后叫你从这些数字中选出m堆,使得每一堆的总和最小,一堆的总和就是这一堆中最大值减去最小值的平方,最后要使得所有堆加起来的总和最小. 思路:对这些数字排序之后,很容易想到DP解法, ...