2017年夏天,在蘋(píng)果全球開(kāi)發(fā)者大會(huì)(WWDC)上,蘋(píng)果公司終于推出了針對(duì)于 iOS 的 PDFKit 支持。PDFKit 自從 MacOS 10.4 以來(lái)一直在 AppKit for MacOS 中。但 UIKit 卻遲遲得不到支持,盡管蘋(píng)果公司之前在 iBooks 和 Mail 中使用過(guò) PDFKit , 但是該框架并未向開(kāi)發(fā)人員開(kāi)房。
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:空間域名、虛擬空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、武定網(wǎng)站維護(hù)、網(wǎng)站推廣。
PDFKit 包含了大量關(guān)于 PDF 相關(guān)的功能,例如,打開(kāi),修改,繪圖和保存 PDF ,也包含了搜索文本。在 iOS 11 后,蘋(píng)果終于開(kāi)放了 PDFKit 。目前(雖然離 PDFKit 發(fā)布已經(jīng)過(guò)了一年多),但是目前中文資料和 Demo 確實(shí)比較少,下面筆者就帶著大家簡(jiǎn)單的了解一下 PDFKit。
主要核心功能如下:
PDFView
PDFDocument
PDFPage
PDFAnnotation
讓我看到你們的雙手, put your hands up!
引入 #import PDFKit/PDFKit.h ,創(chuàng)建 PDFView ,創(chuàng)建之前,首先要?jiǎng)?chuàng)建 PDFDocument ,這里通過(guò)文件路徑 URl 進(jìn)行創(chuàng)建。
創(chuàng)建 PDFView ,將 PDFDucument 對(duì)象賦給 PDFView。
至此,就實(shí)現(xiàn)了 PDF 的讀取及顯示。
首先獲取 PDFDocument 的屬性 PDFPage :
通過(guò) PDFPage 的對(duì)象方法,可以獲取 PDF 的縮略圖,這里需傳入圖片的 size:
創(chuàng)建 collectionViewCell ,通過(guò) collectionView 就可以實(shí)現(xiàn)一個(gè)大致的功能。
點(diǎn)擊跳轉(zhuǎn)
獲取 cell 的點(diǎn)擊事件,取出所點(diǎn)擊的 PDFPage 對(duì)象,用下述方法進(jìn)行跳轉(zhuǎn):
PDFOutline 是一個(gè)層級(jí)關(guān)系的對(duì)象,他表示 PDF 的大綱(也就是我們常用的書(shū)簽)。每個(gè) PDFOutline 對(duì)象都可通過(guò) childAtIndex: 方法獲取出他的孩子對(duì)象, 注意 ,這里需要先判斷 numberOfChildren ,以確定該 outline 對(duì)象存在多少個(gè)孩子節(jié)點(diǎn),避免下標(biāo)超界引發(fā)的崩潰。
實(shí)現(xiàn)大綱功能
從 PDFDocument 中獲取 PDFOutline
遍歷 outline 孩子節(jié)點(diǎn)(默認(rèn)只遍歷一層)
當(dāng)點(diǎn)擊節(jié)點(diǎn)時(shí),判斷有無(wú)孩子節(jié)點(diǎn),進(jìn)行當(dāng)前數(shù)組的新增或刪除。
這里搜索功能主要靠下述方法實(shí)現(xiàn)
調(diào)用此方法之前,首先需將 PDFDocument 設(shè)置代理,通過(guò) PDFDocument 的代理進(jìn)行回調(diào)。獲取 PDFSelection 對(duì)象,
再根據(jù) selection 對(duì)象顯示搜索內(nèi)容。
調(diào)用下述方法即可對(duì) PDFView 進(jìn)行縮放,
實(shí)現(xiàn)雙擊縮放或還原:
這里通過(guò)設(shè)置 pdfView 的 scaleFactor 屬性即可實(shí)現(xiàn), 注意 : scaleFactorForSizeToFit 屬性是當(dāng)前 PDF 充滿屏幕的比例。
GitHub :
本文原地址:
[img]前段時(shí)間公司項(xiàng)目加了許多關(guān)于PDF文件操作的需求,其中包括 PDF文檔的預(yù)覽 、 PDF文件格式轉(zhuǎn)換 、 從其他App獲取文件 、 PDF文檔的批注與修改 。這篇文章我會(huì)先記錄下PDF文檔的幾種預(yù)覽方式。
先看效果:
蘋(píng)果的webView組件可以預(yù)覽各種格式的文件,支持在線預(yù)覽和本地預(yù)覽,相比于安卓的webView控件簡(jiǎn)直就是一大神器,UIWebview使用起來(lái)也非常簡(jiǎn)單
QLPreviewController 是系統(tǒng)自帶的文件預(yù)覽控制器,QL全稱 quick look 快速查看的意思,要使用QLPreviewController先得在文件中導(dǎo)入頭文件 #import QuickLook/QuickLook.h ,并且實(shí)現(xiàn)其代理方法 QLPreviewControllerDelegate
使用UIDocumentInteractionController預(yù)覽文件也得遵循 UIDocumentInteractionControllerDelegate 代理方法,UIDocumentInteractionController本身并不是一個(gè)控制器類,它直接繼承 NSObject ,所以就不能直接push或者模態(tài)跳轉(zhuǎn)了,所以需要使用它類方法提供的模態(tài)跳轉(zhuǎn)函數(shù)
利用 CGContexDrawPDFPage 和 UIPageViewController 實(shí)現(xiàn)翻頁(yè)瀏覽功能,這種方法只能加載本地的PDF文件,但是顯示效果比其他幾種炫酷很多。具體使用方法參考 iOS開(kāi)發(fā)筆記——PDF的顯示和瀏覽 這篇博客。也可以參考本文的 Demo
關(guān)于PDF文檔的預(yù)覽其實(shí)不止上文介紹的幾種方法,還可以通過(guò)第三方SDK來(lái)加載并對(duì)PDF文檔進(jìn)行批注與修改,等有時(shí)間我會(huì)放在后面一起介紹。
在iOS4.0系統(tǒng)中,官方SDK提供了一個(gè)QLPreviewController,使用它就可以讓我們的App在iPhone/iPad中直接預(yù)覽各個(gè)文件了。官方的開(kāi)發(fā)文檔中說(shuō)明其支持的文件類型有:
iWork文檔
微軟Office97以上版本的文檔
RTF文檔
PDF文件
圖片文件
文本文件和CSV文件
使用方法也很簡(jiǎn)單,直接alloc出一個(gè)QLPreviewController對(duì)象,用presentModalViewController方法把它調(diào)出來(lái)即可。要指定QLPreviewController預(yù)覽那個(gè)文件,只要直接實(shí)現(xiàn)它的代理方法previewItemAtIndex,返回一個(gè)NSURL對(duì)象即可:
- (id)previewController:(QLPreviewController *)previewController previewItemAtIndex:(NSInteger)idx
{
return [NSURL fileURLWithPath:[NSString stringWithFormat:@“%@/Documents/files/%@”, NSHomeDirectory(), [fileList objectAtIndex:currentIndex]]];
}
對(duì)以上文件格式的瀏覽效果,還是不錯(cuò)的。