使用小屏幕Kindle閱讀PDF文檔時,如果文檔不是專門為小屏幕閱讀器排版,就會經常出現顯示字體太小的情況,造成閱讀不便。而Kindle的屏幕刷新率又太低,頁面局部放大后再移動閱讀區域亦不現實。解決這一問題目前常用的方法有以下三種:
- 使用預處理軟件對PDF文檔進行裁剪頁邊,比如用裁邊軟件Briss去掉PDF文檔的頁邊空白,使可閱讀區域盡量大,再把生成的PDF文檔放到Kindle里閱讀。部分文檔經過裁剪之后可以獲得很好的閱讀效果,但是還有一部分文檔處理之后的頁面仍然過大。
- 使用OCR(光學字符識別)軟件把PDF中的文字提取導出為其他可重新排版的文檔格式,如TXT和MOBI等。由于OCR存在一定的識別錯誤率,也不能保留排版樣式(比如字體、字號和圖表公式),因此這種方法的應用范圍有限。
- 使用閱讀器提取出文檔中的字符和樣式,以適應屏幕寬度的方式重新排版(稱為文字回流,Text Reflow)。這種方法雖然可以保留字體樣式信息,但是對于圖表和公式的支持和方法二一樣不夠好;這種方法的另一個缺陷是不能重排掃描版的文檔,因為掃描版文檔中無法提取出字符和格式信息。
而本文要介紹的Kindle上的閱讀器Koreader/Kindlepdfviewer采用圖像分割再重排的方式處理PDF文檔,這樣不僅支持文字版PDF重排和數學公式的重排,還能對掃描版PDF和DJVU文檔進行重新排版。 Koreader/Kindlepdfviewer重排的原理后文有簡單介紹。
簡單介紹KOReader/Kindlepdfviewer
“Kindle的PDF閱讀外掛”
新版Kindlepdfviewer正式更名為Koreader。Koreader是在GPLv3協議下開放源代碼的Kindle閱讀器,支持PDF, DJVU, EPUB, MOBI, TXT, XPS, CBZ, FB2, HTML, RTF, CHM, DOC, ZIP等幾乎所有主流電子書文檔格式。Koreader默認運行在Kindle原生系統里,只需要在原生系統中打開Koreader程序就可以使用,關閉Koreader程序就回到了原生系統界面,切換很方便。目前Koreader可以運行在Kindle Touch和Kindle Paperwhite設備上。Koreader對非觸屏Kindle設備Kindle 2、Kindle DX(G)、Kindle 3、Kindle 4的支持會逐步加入,目前這些設備可使用老版本的Kindlepdfviewer或者Librerator。
重排功能的開發
Koreader的重排功能離不開另一個開源軟件項目K2pdfopt(GPLV3協議發布)。K2pdfopt也是為了解決PDF文檔在小屏幕Kindle上閱讀的排版問題而開發的。與其它PDF預處理軟件相比,它有很多獨一無二的特性,比如自動化程度很高,能夠自動識別多欄排版的文檔進行分欄,自動去除頁面白邊,自動對掃描文檔進行水平校正,以及最重要的基于圖像分割的重排版算法。K2pdfopt使用完全基于圖像處理的方法對文字重新排版,軟件處理時會把原始PDF/DJVU頁面放大再分割成以詞為單位的像素區域,把這些像素區域重新排列到目標寬度的頁面中(原理如下圖),所以理論上只要能夠讀取文檔的頁面像素就可以對其中的文字進行重新排版。這個算法的前提是頁面中的文字之間需要有一定的空隙,以提供分割像素區域的位點。更多K2pdfopt的處理效果請參考這篇文章用K2PDFopt重排版面,隨手解救掃描PDF 。

K2pdfopt被移植到Koreader/Kindlepdfviewer以后就可以在閱讀時讓PDF重新排版。實時重排可以省去電腦上處理PDF的步驟,并且可以在kindle上交互式地微調排版參數,盡可能地生成滿意的排版。使用Koreader的重排模式閱讀時,軟件會自動把當前頁和下一頁重排版成適應屏幕的尺寸。
軟件重排效果
以下是Kindlepdfviewer重排功能在Kindle 3上的使用效果截屏,包括重排前的原始頁面與重排后的頁面對比圖。
多欄排版頁面的重排
下圖是Koreader/Kindlepdfviewer對多欄排版的PDF頁面帶圖和帶樣式的重排效果:
帶圖的分欄頁面重排
左側為重排前的原始頁面,其中圖像占據兩欄的寬度,而重排之后圖像仍然完整地顯示,文字部分被重排為一欄顯示。
數學公式的重排
對PDF頁面中的數學公式重排支持是Koreader/Kindlepdfviewer的關鍵特性,因為使用文字提取的重排版方式對公式這種復雜排版樣式的支持并不好,而Koreader/Kindlepdfviewer獨特的排版算法卻可以獲得非常好的重排效果:
帶數學公式的頁面重排
左側為重排前的原始頁面,右側是重排后的頁面,字體放大了1.5倍仍然保持了公式的完整。
掃描版PDF的重排
Koreader/Kindlepdfviewer支持實體書掃描的PDF文檔重排,重排效果如下:
掃描版PDF頁面的重排
左側為重排前的掃描PDF頁面,右側是重排后的頁面。
中文文檔的重排
經過測試Koreader/Kindlepdfviewer對大部分英文文檔都可以獲得很好的重排效果。而中文文檔因為字間距太小,沒有西文詞之間的空格所以重排時應該選擇較小的詞間距。理論上只要中文字之間的間隔足夠大,對中文文檔也能獲得很好的重排效果。這是對中文文檔的重排測試(使用《紅樓夢》脂評匯校本PDF文檔):
中文PDF文檔的重排
左側為重排前的PDF頁面,右側是重排后的頁面。重排效果是字體樣式全部保留,只增加了字體大小。
對中文豎排文檔的重排(使用中華書局《點校本二十四史》掃描版PDF):
中文豎排版的重排
左上為重排前的原始頁面,右上是重排使用的參數,使用了較小的字號、較小的詞間距和90度旋轉屏幕。下圖是重排后的顯示效果。
軟件安裝
Kindle 2、Kindle 3和Kindle DX(G):
-
Kindle越獄
到MobileRead論壇的這個帖子里下載越獄文件kindle-jailbreak-x.xx.x.zip (x.xx.x對應版本號)。把下載的ZIP文件解壓縮之后選擇對應設備固件的升級文件,比如Kindle 3 WIFI 固件版本3.4的設備應該選擇update_jailbreak_0.11.N_k3w_install.bin或者更新版文件,將其拷貝到Kindle的根目錄中。斷開Kindle和電腦的連接,通過Menu> Settings> Menu> Update Your Kindle升級。當出現升級成功的提示表示越獄成功。將Kindle連接到電腦上,在Kindle的根目錄中會多出一個linkjail的目錄。如果越獄不成功,很可能是因為設備已經越獄過,請忽略此步,直接嘗試下一步。
-
安裝launchpad
安裝前請先確認設備已經越獄。Launchpad是Kindle上的快捷鍵管理軟件,用于啟動Kindlepdfviewer程序。到MobileRead論壇的這個帖子 里下載launchpad的安裝文件lpad-pkg-xxxx.zip (xxxx對應版本號)。 把下載的文件解壓縮之后選擇設備對應的安裝文件,以Kindle 3 WIFI為例,應該選擇 update_launchpad_0.0.1c_k3w_install.bin或者更新版文件,將其拷貝到Kindle的根目錄中。斷開Kindle和電腦的連接,通過Menu> Settings> Menu> Update Your Kindle升級。當出現升級成功的提示表示安裝成功。將Kindle連接到電腦上,在Kindle的根目錄中會多出一個launchpad的目錄。
-
安裝Kindlepdfviewer或Librerator
穩定版1KPV下載地址:https://kindlepdfviewer-package./files/kindlepdfviewer-v2013.1.zip ,最新開發版KPV下載地址:https://code.google.com/p/kindlepdfviewer-package/downloads。在Kindle的根目錄下創建customupdates目錄(注意大小寫),把下載的ZIP安裝包拷貝到customupdates目錄下,安裝包不需要解壓縮。斷開Kindle和電腦的連接,在Kindle上按Shift-Shift-I安裝Kindlepdfviewer,注意按鍵間隔不要超過0.7秒,如果按鍵生效屏幕左下角會出現^[Shift I]字樣,等待安裝程序完成屏幕左下角會出現Success提示。之后在Kindle上按Shift-Shift-空格三個鍵,會更新launchpad的快捷鍵列表把Kindlepdfviewer的快捷鍵添加進去。如果以上操作步驟都順利完成,那么恭喜你已經安裝成功??梢允褂肧hift-P-D按鍵序列打開Kindlepdfviewer。退出Kindlepdfviewer切換到原生系統請在文件管理器界面按Home鍵,查看更多使用說明請打開Kindlepdfviewer后按“H”鍵。
Librerator是KPV的一個修改版,安裝方法與KPV相同。軟件介紹和安裝包下載地址: http://www./forums/showthread.php?t=198742 。Librerator和KPV使用的啟動快捷鍵序列不同所以二者可以互不影響地使用。
Kindle 4 NT和Kindle 4 Black:
-
Kindle越獄
到MobileRead論壇的這個帖子里下載越獄文件kindle-jailbreak-k4-x.x.x.zip (x.x.x對應版本號)。把下載的ZIP文件解壓縮之后,將data.tar.gz和ENABLE_DIAGS兩個文件拷貝到Kindle磁盤的根目錄中。斷開Kindle和電腦的連接,通過Menu > Settings > Menu > Restart重啟機器進入診斷模式。使用五向鍵依次選擇“D) Exit, Reboot or Disable Diags” 、”R) Reboot System”、”Q) To continue”。重啟后主頁會出現一本名為”You are Jailbroken”的書,說明越獄成功。
-
安裝kite
到Hi-pda論壇的這個帖子下載安裝文件update_kite_0.0.1_install-k4.bin,并將其拷貝到Kindle的根目錄中。斷開Kindle和電腦的連接,通過Menu> Settings> Menu> Update Your Kindle升級安裝。
-
安裝Librerator
到MobileRead論壇的這個帖子下載最新版Librerator。把下載的ZIP文件解壓縮到Kindle磁盤根目錄。
Kindle Touch和Kindle Paperwhite:
-
Kindle越獄
Kindle Touch的越獄方法參考:http://www./forums/showthread.php?p=2169819 Kindle Paperwhite的越獄方法參考:http://www./forums/showthread.php?t=198446
-
安裝KPVBooklet
KPVBooklet支持5.1.2及以上的Kindle固件(建議越獄后升級到5.3以上固件再安裝),下載地址:https://code.google.com/p/kpvbooklet-package/downloads 。將下載的zip文件解壓縮,把update_kpvbooklet_x.x.x_install.bin文件拷貝到Kindle的磁盤根目錄下,斷開USB連接。通過Menu> Settings> Menu> Update Your Kindle升級安裝2,3,注意不要通過restart來安裝。
-
安裝Koreader
下載最新的Koreader安裝包,下載地址:https://code.google.com/p/koreader-package/downloads 。將下載的zip文件解壓縮后得到的三個目錄(extensions, koreader和launchpad)拷貝到Kindle磁盤根目錄即可。
-
關于原生系統固件升級
開啟WIFI的情況下原生系統可能會在后臺自動升級固件。不管手動固件升級還是自動固件升級都會擦除KPVBooklet啟動器造成Koreader無法啟動,解決這個問題只需要升級完成后重新安裝KPVBooklet即可,Koreader無需重新安裝。
注1:穩定版會積累一定的特性和bug修復后不定期發布;開發版使用項目最新代碼每天自動編譯,適合喜歡嘗試新特性的朋友。 注2:升級安裝KPVBooklet只需下載最新KPVBooklet安裝包,使用安裝bin文件升級。 注3:Update Your Kindle顯示為灰色可能是因為安裝了特定版本的多看,可在Kindle磁盤根目錄下創建一個名為DUOKAN_DISABLE的文件,然后重啟機器再安裝。
軟件使用
鍵盤版
使用Kindlepdfviewer打開PDF文檔時會出現選擇閱讀器的提示對話框,如下圖所示:
選擇PDF閱讀器
如果需要PDF重排請選擇PDFReflow閱讀器。在當前對話框中快捷鍵”T”可以關聯選擇的閱讀器到所有PDF文檔,下次打開PDF時將不再出現此對話框;快捷鍵”F”會關聯選擇的閱讀器到此文檔。如果需要清除閱讀器關聯,請用PDFReflow閱讀器打開一個PDF文檔后按ALT+C,清除此文檔的閱讀器關聯;按SHIFT+C清除對此文檔格式的關聯。
觸屏版
Koreader可以通過KPVBooklet與原生系統集成,在原生系統主界面即可顯示EPUB、DjVu等文檔。默認使用Koreader打開PDF、EPUB、DjVu、FB2、CHM和DOC文檔,使用原生系統自帶閱讀器打開MOBI、AZW和TXT文檔。也可以長按PDF文檔在彈出窗口中選擇GOTO來使用原生閱讀器打開PDF文檔。

在PDF閱讀頁面之后,點擊屏幕頂部可打開文檔菜單對話框,點擊屏幕左側可上翻頁,點擊屏幕右側可下翻頁,點擊屏幕底部可打開設置對話框。

排版參數微調
在Kindlepdfviewer的PDF閱讀界面按“Aa”鍵可以調出重排參數調整界面進行排版微調。目前可調參數包括:字體大小、頁邊距、行間距、分詞間距、對齊方式、最大欄數、水平較正、字體黑度、屏幕旋轉等。如下圖所示:
重排參數調整界面
以下是各參數的使用方法(使用2012.11穩定版):
- 換行重排(Reflow)開啟時,選擇不同的字號可以放大和縮小頁面字體。注意實際顯示的字體大小不一定與選擇的大小完全相同。
- 軟件支持先切邊后重排。切邊(Trim Page)選擇自動模式(auto)時,軟件會自己選擇切除頁面白邊,使內容區域最大化;也可以選擇手動切邊(manual),具體使用方法請看下節視頻演示。
- 軟件能夠自動識別并去除掃描PDF/DJVU頁面上的污點(Defect),可選污點大小,默認使用中等(medium)大小。
- 重排生成頁面的頁邊距(Page Margin)有三檔可調,默認使用中等(medium)頁邊距。
- 重排生成頁面的行間距(Line Spacing)有三檔可調,默認使用中等(medium)行間距。
- 重排過程中斷詞閾值使用詞間距(Word Spacing/Word Gap)參數,建議中文文檔選擇較小(small)詞間距,英文文檔選擇中等(medium)或較大(large)詞間距。
- 重排頁面的渲染質量(Render Quality)有三檔可調,選擇高質量(high)時顯示效果最好但是重排時間也最長,選擇低質量(low)時重排時間可以大大縮短。默認使用高質量渲染。
- 重排掃描PDF頁面時可以對頁面文字進行水平較正(Auto Straighten),數字表示最大校正角度,默認此選項關閉(最大校正角度為0),開啟之后重排時間會大大增加,文字版PDF請勿打開。
- 重排頁面的對齊方式(Justification),有自動(auto)、左對齊(left)、居中(center)、右對齊(right)和兩端對齊(full)可供選擇。
- 重排多欄排版的文檔時可指定分欄數(Columns)。
- 重排頁面的字體黑度(Contrast)有5級可調,注意默認(default)字體黑度時重排速度最快。
- 支持0°、90°、180°和270°屏幕旋轉,可使用90°旋轉重排豎排版的文檔。
手動切邊(視頻演示)
(測試使用商務印書館《漢譯世界學術名著》叢書PDF文檔)
如果遇到視頻無法播放的情況請使用較新的Chrome或者Firefox瀏覽器重新打開本網頁。
如果原始頁面正文四周有污點或者旁注,會影響程序判斷正文的縮進方式,自動重排經常會出現大段空白和斷行。手動切邊把正文四周切掉之后再重排可以避免這種情況出現,讓重排后的文檔排版更整潔。使用方法見視屏演示,按“Aa”鍵調出重排參數調整對話框,在切邊(Trim Page)選項中選擇手動切邊(manual),使用五向鍵的確認鍵打開原始頁面視圖,首先通過五向鍵調整切邊的左上角,確認左上角之后再調整切邊右下角。確認之后重排即使用切邊以后的頁面。對于大部分文檔,一般不需要每一頁都做手動切邊,如果當前頁碼是奇數頁,之后遇到奇數頁就會自動使用當前頁面的切邊信息。
關于翻頁延遲
重排處理需要很多CPU計算,再加上Kindle的CPU頻率不是很高,所以重排一頁大約需要3到5秒鐘時間,具體視頁面大小而定。但是閱讀時軟件可以預先重排處理下一頁,這樣讀完一頁再翻下一頁就沒有延遲了。最新版加入了多線程(Multi-threads)緩存機制,開啟多線程之后可以顯著改善翻頁體驗。
軟件升級
下載最新版Koreader/Kindlepdfviewer軟件包,把ZIP文件包解壓縮到Kindle磁盤根目錄,即可升級安裝Koreader/Kindlepdfviewer。
軟件卸載
需要卸載軟件請直接刪除Kindle下的koreader/kindlepdfviewer目錄, 把安裝過的對應軟件的uninstall文件逐一拷貝到Kindle磁盤根目錄,點“Update Your Kindle”即可卸載相應軟件。
Bug報告
大家使用軟件時,歡迎把無法生成可讀排版的情況作為bug報告給我,方便在后續的版本中進行修復。Bug報告請提供原始PDF文檔或出現問題的頁面,重排使用的參數截屏,并發送到我的郵箱:chrox@網易126郵箱,或者回復帖子KOReader/Kindlepdfviewer更新日志,功能建議和Bug反饋。軟件的完善離不開用戶的bug報告,在此先行道謝。
更多內容和討論
更多關于Koreader/Kindlepdfviewer的資源和討論請關注:
- KOReader/Kindlepdfviewer更新日志,功能建議和Bug反饋
- KOReader項目Wiki的用戶手冊
- Kindlepdfviewer項目Wiki的中文指南
- Kindlepdfviewer – document reader for Kindle, based on muPDF/djvulibre/CREngine, GPLv3
- KOReader: a document reader for PDF, DJVU, EPUB, FB2, HTML, … (GPLv3)
- Librerator – multi-format e-reader, fork of KindlePDFViewer
|