vfrReader 2.8.6

vfrReader 2.8.6

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布时间最后发布2015年6月

Julius Oklamcak维护。



vfrReader 2.8.6

  • 作者:
  • Julius Oklamcak

针对 iOS 的 PDF 读取器核心

介绍

我为那些在将 PDF 文件放入 iOS 设备屏幕上遇到困难的 iOS 开发者编写了这款开源 PDF 读者代码。

此代码是通用的,并且不需要任何 XIBs(因为所有 UI 元素都是通过代码生成的,从而使灵活性最大化)。它可以在运行 iOS 6.0 及以上版本的 iPad、iPhone 和 iPod touch 上运行。还支持所有新设备的 Retina 显示屏,并且已经准备好进行完全国际化。想法是提供一个完整的项目模板,您可以从它开始构建,或者只需将所需的文件拉入现有项目,即可在您的应用程序中启用 PDF 读取/查看。

iPad Page

iPad Thumbs

iPod Page

iPod Thumbs

启动样例应用后,点击屏幕左侧返回上一页。点击右侧前往下一页。您还可以左右滑动页面。点击屏幕以淡入工具栏和页面滑块。用一只手指双击(或 pinch out)以缩放。用两根手指双击(或 pinch in)以缩小。

这种实现已经测试过大型的 PDF 文件(超过 250MB 的尺寸和超过 2800 页的长度),以及各种风格的 PDF 文件(从仅包含文本的文档到图形繁重的杂志)。它也在旧的设备上(如第四代 iPod touch 和 iPhone 3GS)表现良好,并利用新设备的双核处理器(通过 CATiledLayer 和多线程)。

要查看一个使用此代码作为其基础的示例开源 PDF 观看器应用程序,请查看以下 GitHub 上的项目存储库:https://github.com/vfr/Viewer

特色功能

多线程:UI 总是相当流畅和响应。

支持

  • 类似于 iBooks 的文档导航。
  • 设备旋转和所有方向。
  • 加密的(受密码保护的)PDF。
  • PDF 链接(URI 和跳转到页面)。
  • 旋转页面的 PDF。

注意

PDF 读取器代码的 2.x 版本最初是在 Xcode 3.2.6、LLVM 1.7 和 iOS 4 下开发和测试的,目前的开发和测试是在 Xcode 6.2、LLVM 6.0 和 iOS 8.2 下进行的。请注意,自 v2.6 版本以来,代码已经重构为使用 ARC。

整个PDF阅读器功能被封装在ReaderViewController类中。要用这个类展示文档,首先需要创建一个ReaderDocument对象,并传入PDF文档的文件路径,然后使用这个ReaderDocument对象初始化一个新的ReaderViewController。ReaderViewController类使用ReaderDocument对象来存储关于文档的信息,并跟踪文档属性(例如缩略图目录路径、书签和当前页码)。

初始化后的ReaderViewController可以被模态展示、推入一个UINavigationController堆栈、放置在UITabBarController的标签页中,或作为根视图控制器使用。请注意,由于ReaderViewController实现了自己的工具栏,在将其推入时需要隐藏UINavigationController的导航栏,并在弹出后重新显示导航栏。ReaderDemoController类展示了如何使用包含的PDF文件实现这一过程。

所需文件

以下文件是集成PDF阅读器到您项目中的必需品:

CGPDFDocument.h, CGPDFDocument.m
ReaderDocument.h, ReaderDocument.m
ReaderConstants.h, ReaderConstants.m
ReaderViewController.h, ReaderViewController.m
ReaderMainToolbar.h, ReaderMainToolbar.m
ReaderMainPagebar.h, ReaderMainPagebar.m
ReaderContentView.h, ReaderContentView.m
ReaderContentPage.h, ReaderContentPage.m
ReaderContentTile.h, ReaderContentTile.m
ReaderThumbCache.h, ReaderThumbCache.m
ReaderThumbRequest.h, ReaderThumbRequest.m
ReaderThumbQueue.h, ReaderThumbQueue.m
ReaderThumbFetch.h, ReaderThumbFetch.m
ReaderThumbRender.h, ReaderThumbRender.m
ReaderThumbView.h, ReaderThumbView.m
ReaderThumbsView.h, ReaderThumbsView.m
ThumbsViewController.h, ThumbsViewController.m
ThumbsMainToolbar.h, ThumbsMainToolbar.m
UIXToolbarView.h, UIXToolbarView.m

Reader-Button-H.png, [email protected]
Reader-Button-N.png, [email protected]
Reader-Email.png, [email protected]
Reader-Export.png, [email protected]
Reader-Mark-N.png, [email protected]
Reader-Mark-Y.png, [email protected]
Reader-Print.png, [email protected]
Reader-Thumbs.png, [email protected]

Localizable.strings (UTF-16 encoding)

所需iOS框架

要将PDF阅读器代码集成到您的项目中,以下所有的iOS框架都是必需的:

UIKit, Foundation, CoreGraphics, QuartzCore, ImageIO, MessageUI

编译时选项

在ReaderConstants.h中,以下#define选项可供使用:

READER_FLAT_UI - 如果为TRUE,则遵循扁平化UI的风格(扁平化UI)。

READER_SHOW_SHADOWS - 如果为TRUE,则显示版面周围和缩略图周围的阴影。

READER_ENABLE_THUMBS - 如果为TRUE,则在主工具栏中添加缩略图按钮,以启用页面缩略图文档导航。

READER_DISABLE_RETINA - 如果为TRUE,将CATiledLayer的内容缩放设置为1.0f。这有效地禁用了视网膜支持,并在视网膜显示设备上以损失视网膜显示质量为代价提高了非视网膜设备的渲染速度。

READER_ENABLE_PREVIEW - 如果为TRUE,则在CATiledLayer开始渲染PDF页面之前显示中等分辨率的页面缩略图。

READER_DISABLE_IDLE - 如果为TRUE,在查看文档时禁用iOS空闲定时器(请注意电池消耗)。

READER_STANDALONE - 如果为FALSE,将在工具栏中添加一个“完成”按钮,并当按下次时向dismissReaderViewController:代理方法传递消息。

READER_BOOKMARKS - 如果为TRUE,启用页面书签支持。

ReaderDocument归档

要更改ReaderDocument对象的属性列表存储位置(默认为~/Library/Application Support/),请查看ReaderDocument.m源文件中的+archiveFilePath:方法。对文档的ReaderDocument对象的归档和解档是强制性的,因为这是当前页码、书签和文档页面缩略图目录存储的地方。

联系方式

网站:http://www.vfr.org/

电子邮件:joklamcak(at)gmail(dot)com

Twitter:@joklamcak

如果您觉得这个代码很有用,或者希望资助进一步的开发,您可以通过PayPal为vfr-Reader项目捐款。

致谢

ReaderContentPage类中的PDF链接支持代码基于Sorin Nistor在http://ipdfdev.com/的链接导航代码。

许可协议

本代码已根据MIT许可证提供。