在iOS創(chuàng)建PDF文件中簡(jiǎn)單介紹了如何生成pdf文件。現(xiàn)在有需求要顯示PDF文檔。看了一下Apple的API,大概有兩種方法:
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),銅鼓企業(yè)網(wǎng)站建設(shè),銅鼓品牌網(wǎng)站建設(shè),網(wǎng)站定制,銅鼓網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,銅鼓網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
使用WebView,可以直接讀取PDF,這個(gè)比較簡(jiǎn)單,可參見(jiàn):最簡(jiǎn)單的WebView應(yīng)用,缺點(diǎn)是自定義的能力較弱,優(yōu)點(diǎn)是簡(jiǎn)單,像讀取網(wǎng)頁(yè)一樣;
使用自定義的UIView,需要繼承UIView,自定義效果很好,問(wèn)題是需要了解和使用的API較多。
本文只說(shuō)明自定義UIView的方法。實(shí)現(xiàn)的在iPad模擬器上的效果:
本文方法參考了:官方文檔。見(jiàn)A function that draw a PDF page的代碼部分:
void MyDisplayPDFPage (CGContextRef myContext,
size_t pageNumber,
const char *filename)
{
CGPDFDocumentRef document;
CGPDFPageRef page;
CGRect box;
document = MyGetPDFDocumentRef (filename);// 1
page = CGPDFDocumentGetPage (document, pageNumber);// 2
CGContextDrawPDFPage (myContext, page);// 3
CGPDFDocumentRelease (document);// 4
}
- (NSURL *)convertTxtEncoding:(NSURL *)fileUrl
{
if ([FileManagementAPI getFileSize:[fileUrl path]] 1024*1024.0f)
{
return fileUrl;
}
NSString *tmpFilePath = [NSString stringWithFormat:@"%@/tmp/%@", NSHomeDirectory(), [fileUrl lastPathComponent]];
NSLog(@"tmpFilePath=%@", tmpFilePath);
NSURL *tmpFileUrl = [NSURL fileURLWithPath:tmpFilePath];
NSStringEncoding encode;
NSString *contentStr = [NSString stringWithContentsOfURL:fileUrl usedEncoding:encode error:NULL];
if (contentStr)
{
[contentStr writeToURL:tmpFileUrl atomically:YES encoding:NSUTF16StringEncoding error:NULL];
return tmpFileUrl;
}
else
{
NSStringEncoding convertEncoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000);
contentStr = [NSString stringWithContentsOfURL:fileUrl encoding:convertEncoding error:NULL];
if (contentStr)
{
[contentStr writeToURL:tmpFileUrl atomically:YES encoding:NSUTF16StringEncoding error:NULL];
return tmpFileUrl;
}
else
{
return fileUrl;
}
}
}
//顯示的時(shí)候調(diào)用這個(gè)
NSURL *url = [self.documentURLArray objectAtIndex:index];
if ([url pathExtension] ([[[url pathExtension] lowercaseString] isEqualToString:@"txt"] || [[[url pathExtension] lowercaseString] isEqualToString:@"text"]))
{
return [self convertTxtEncoding:url];
}
else
{
return url;
}
前段時(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ì)放在后面一起介紹。
《高性能iOS應(yīng)用開(kāi)發(fā)》([美] Gaurav Vaish)電子書(shū)網(wǎng)盤(pán)下載免費(fèi)在線閱讀
資源鏈接:
鏈接:
提取碼:iuk2?? ?
書(shū)名:高性能iOS應(yīng)用開(kāi)發(fā)
作者:[美] Gaurav Vaish
譯者:梁士興
豆瓣評(píng)分:7.8
出版社:人民郵電出版社
出版年份:2017-4
頁(yè)數(shù):384
內(nèi)容簡(jiǎn)介:性能對(duì)用戶體驗(yàn)有著至關(guān)重要的影響。本書(shū)將介紹對(duì)用戶體驗(yàn)產(chǎn)生負(fù)面影響的各個(gè)方面,并概述如何優(yōu)化iOS應(yīng)用的性能。全書(shū)共5個(gè)部分,主要從性能的衡量標(biāo)準(zhǔn)、對(duì)應(yīng)用至關(guān)重要的核心優(yōu)化點(diǎn)、iOS應(yīng)用開(kāi)發(fā)特有的性能優(yōu)化技術(shù)以及性能的非代碼方面,講解了應(yīng)用性能的優(yōu)化問(wèn)題。本書(shū)的主要目的是展示如何從工程學(xué)的角度編寫(xiě)最優(yōu)代碼。本書(shū)適合已經(jīng)具有Objective-C和iOS實(shí)踐經(jīng)驗(yàn)的開(kāi)發(fā)人員閱讀。
作者簡(jiǎn)介:作者簡(jiǎn)介:
Gaurav Vaish? 就職于雅虎公司的移動(dòng)和新興產(chǎn)品團(tuán)隊(duì),為每月有數(shù)億人使用的移動(dòng)應(yīng)用創(chuàng)建優(yōu)雅的可重用方案。他曾是IIT全球指導(dǎo)計(jì)劃的成員,還在印度班加羅爾創(chuàng)立了InColeg Learning及Edujini Labs有限公司。
譯者簡(jiǎn)介:
梁士興? 畢業(yè)于北京航空航天大學(xué),現(xiàn)任職美團(tuán)-大眾點(diǎn)評(píng)iOS高級(jí)技術(shù)專家。有多年的一線iOS開(kāi)發(fā)經(jīng)驗(yàn),對(duì)于iOS應(yīng)用性能有深入研究和獨(dú)到見(jiàn)解。對(duì)iOS前沿技術(shù)、移動(dòng)應(yīng)用架構(gòu)模式非常感興趣。
郝田田? 畢業(yè)于西安電子科技大學(xué),現(xiàn)任職美團(tuán)-大眾點(diǎn)評(píng)iOS研發(fā)工程師,具有豐富的iOS軟件開(kāi)發(fā)經(jīng)驗(yàn),長(zhǎng)期關(guān)注iOS領(lǐng)域前沿技術(shù),曾參與數(shù)本iOS技術(shù)類書(shū)籍翻譯工作。
陳作君? 畢業(yè)于北京理工大學(xué),現(xiàn)任職滴滴出行iOS研發(fā)工程師,多年大型移動(dòng)端應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn),熱衷于開(kāi)源項(xiàng)目建設(shè),是一名技術(shù)書(shū)籍翻譯的愛(ài)好者。
《ios動(dòng)畫(huà):核心技術(shù)與案例實(shí)戰(zhàn)》百度網(wǎng)盤(pán)pdf最新全集下載:
鏈接:
?pwd=tzgh 提取碼: tzgh
簡(jiǎn)介:《iOS動(dòng)畫(huà)——核心技術(shù)與案例實(shí)戰(zhàn)》以“iOS核心動(dòng)畫(huà)架構(gòu)+實(shí)戰(zhàn)代碼”的形式闡述如何根據(jù)不同的應(yīng)用場(chǎng)景設(shè)計(jì)高效、可靠、復(fù)雜的動(dòng)畫(huà)效果,為讀者帶來(lái)了豐富的實(shí)戰(zhàn)動(dòng)畫(huà)案例,更從動(dòng)畫(huà)系統(tǒng)架構(gòu)的角度闡釋動(dòng)畫(huà)的原理,因此《iOS動(dòng)畫(huà)——核心技術(shù)與案例實(shí)戰(zhàn)》不僅面向讀者“授之以魚(yú)”更加“授之以漁”。 ?
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)房。
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 :
本文原地址:
文章題目:ios核心開(kāi)發(fā)pdf,資深ios開(kāi)發(fā)
文章源于:http://chinadenli.net/article38/dsdcjpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、自適應(yīng)網(wǎng)站、全網(wǎng)營(yíng)銷推廣、Google、云服務(wù)器、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)