原文: 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的更多相关文章

  1. 使用 pdf.js 在网页中加载 pdf 文件

    在网页中加载并显示PDF文件是最常见的业务需求.例如以下应用场景:(1)在电商网站上购物之后,下载电子发票之前先预览发票.(2)电子商务管理系统中查看发布的公文,公文文件一般是PDF格式的文件. 目前 ...

  2. Android 如何本地加载pdf文件

    大部分app打开pdf文件是通过intent调起手机中能打开pdf文件的工具,来查看pdf文件,如果需求是,用户在app内下载好pdf文件后,不通过第三方的工具,本地打开. 这样的需求要怎么实现呢?上 ...

  3. iOS Interface Builder:在.xib文件中加载另一个.xib文件

    在开发中,经常会用到一个需要重复使用的模块,比如好友列表中每个用户的展示或每条动态,这些都是相同的模版,这样我们就可以把这个部分提取出来放到一个单独的.xib中.那么提取出的.xib如何在其他.xib ...

  4. Flexigrid从对象中加载数据

    (有问题,在找…………) Flexigrid是用来动态加载数据的一种比较好(老)的Jquery表插件,然后有些时候,我们需要其从本地或者jQuery对象中加载数据,比如有这么个需求,页面显示中有两个表 ...

  5. C#动态编译代码,执行一个代码片段,或者从指定文件中加载某个接口的实现类

    在项目进行中有时候会需要配置一些复杂的表达式,在程序运行的时候执行表达式,根据结果执行相应的操作,简单写了一个类Expression,利用.net的动态编译技术实现,代码如下: public clas ...

  6. 如何在HTML中加载Flash(2种实现方法)_HTML/Xhtml_网页制作

    点评:如何在HTML中加载Flash,为网页添加更多的色彩,普通的网页以无法满足用户的需求,接下来为大家介绍下2种在HTML中加载Flash的方法,感兴趣的各位可以适当参考下,希望对你有所帮助 第一种 ...

  7. 解决方案:带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载可能出现 COM 组件的80040154错误

      建议大家在微软的组件出现问题时,在GOOGLE上搜索解决方案,一般来说,总有结果:  带格式化文本控件( RichText)的模板如果在InfoPath的浏览器中加载,可能出现 COM 组件的80 ...

  8. Spring中加载xml配置文件的六种方式

    Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog  因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...

  9. Android中加载位图的方法

    Android中加载位图的关键的代码: AssetManager assets =context.getAssets(); //用一个AssetManager 对象来从应用程序包的已编译资源中为工程加 ...

随机推荐

  1. NET Core 以及与 .NET Framework

    简析.NET Core 以及与 .NET Framework的关系 简析.NET Core 以及与 .NET Framework的关系 一 .NET 的 Framework 们 二 .NET Core ...

  2. Jquery学习笔记:操作form表单元素之一(文本框和下拉框)

    一.概述 在web页面开发中,经常需要获取和设置表单元素的值(如文本框中的内容),特别是在ajax应用中,更是常态.本文系统的介绍下如何操作. 同操作其它html元素一样,操作的过程差不多. 第一步, ...

  3. (诊断)为GitHub添加SSH key时出现“Could not open a connection to your authentication agent”错误的应对方案(转)

    在为windows 环境下的github账户添加SSH key时,需要在Git Bash执行如下命令: 第一步:检查已有的SSH keys $ ls -al ~/.ssh 第二步:生成新的SSH ke ...

  4. 双卡双待支持双电池 夏新N808深度评测_夏新手机评测-泡泡网

    双卡双待支持双电池 夏新N808深度评测_夏新手机评测-泡泡网 双卡双待支持双电池 夏新N808深度评测

  5. android内存的一点优化

    android手机给应用分配的内存通常是8兆左右,如果处理内存处理不当很容易造成OutOfMemoryError,我们的产品出现最多的错误也是OutOfMemoryError的异常, 在解决这个异常时 ...

  6. wamp安装后打开默认网页显示dir,图标红点

    首先网页显示dir,是因为服务这些没启动,跟图标红点是一个原因,解决了图标红点,就能解决只显示dir的问题. 先测试是不是端口占用问题,如图: 如果是,那就继续往下走. 单击图标左键(记住是左键),然 ...

  7. Eclipse验证码

    package MyEclipse; import java.io.*;     public class MyEclipseGen {     private static final String ...

  8. PHP学习之-数据库操作

    PHP学习之-数据库操作 1.PHP支持那些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Sybase,Db2,Or ...

  9. uvc摄像头代码解析6

    10.扫描视频设备链和注册视频设备 10.1 uvc视频链 struct uvc_video_chain { //uvc视频链 struct uvc_device *dev; //uvc设备 stru ...

  10. Unity3D NGUI,uGUI总结

    跪求官方UI系统(2014年11月底已出,用原生的比用NGUI放心) uGUI注意点 1.要防止多个canvas叠加点击穿透,canvas里面的graphics raycaster调整到恰当选项 2. ...