DTCoreText


背景:使用DTCoreText實現epub閱讀器的內容排版

基礎准備:coretext,HTML+CSS渲染機制,epub文件格式

一:ios端epub實現:主要是兩種,coretext,webview,二者的對比不再贅述,簡單點說就是,coretext需要自己去解析html和對應的css樣式,並合並起來使用coretext展示,但是效率高。webview可以直接loadURL,可以自己指定樣式,但是效率低。

二、epub的文件格式:

  • epub解壓后,封面是一個XHTML,里面嵌有封面cover.jpeg,每一章節是一個HTML,里面包含着鏈接着相關的CSS樣式,具體epub的文件結構可以參考這個:http://www.lai18.com/content/10588059.html,主要用到的就是:解壓后提取每一章節,通過ncx ,opf這些文件,提取出來每一章的HTML以及對應的title,頁碼等,封裝成一個chapterModel,一章對應一個chapterModel

四、HTML+css的渲染機制:參考一個簡答的實現:http://www.jianshu.com/p/c375ac056149,可見webview在加載的時候,是自動將相關聯的css樣式渲染到HTML文本里的,關鍵就是css的解析以及和HTML的合並

五:coretext:

  • 可以參考這個http://www.jianshu.com/p/ad4796df3dd6,簡單來講,在OS/OSX中用於描述富文本的類是NSAttributedString,顧名思義,它比NSString多了Attribute的概念,它可以包含很多屬性,粗體,斜體,下划線,顏色,背景色等等,每個屬性都有對應的字符區域。在OSX上我們只需解析完畢相應的數據,轉為NSAttributedString即可,底層的繪制完全可以交給相應的控件完成。

七、DTCoreText:

  • github地址:https://github.com/Cocoanetics/DTCoreText,這是一個封裝友好的,用原話來講就是:Methods to allow using HTML code with CoreText,主要功能就是能夠將我們輸入的HTML文件進行解析,並自動關聯相對應的css樣式(也幫我們解析好了),我們需要做的就是輸入一個HTML文件,他就會給我們輸出帶有排版樣式的NSAttributedString,然后我們直接使用coretext進行畫這個NSAttributedString就可以啦!導入庫的時候,建議使用cocoapods,並且在buildsettings—>lingking->other link flags,第一個填上$(inherited)
  • 關於DTCoreText的使用,我主要參考這篇博文以及工程,http://blog.smartlogic.io/2013/04/02/ios-app-development-dtattributedtextview-instead-of-uiwebview。簡單明了的一個demo。

六、清楚了上述所列,因此我們的目標就是講提取到的每一章節的HTML文件,轉化成NSAttributedString,並且這個NSAttributedString不是簡單的字符串,而是帶有排版樣式的string,借助於DTCoreText,就可以完成上述功能的實現了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM