由於越來越多的電子出版物都有專用 app,而且大多使用掃版 PDF 的形式銷售,所以在閱讀上給付費用戶帶來了很大不便,也不利於付費用戶的個人收藏。個人是一個願意爲自己喜歡的內容付費、卻非常討厭版權保護的人。爲了防止成爲正版的受害者,我購買的所有作品,最終都希望能擺脫特定 app、特定設備的限制,以最便利的方式使用。

  

  對於加密的掃版 PDF 文件,最簡單的獲取方式自然就是截圖。大多數掃版 PDF 的掃描精度不超過 300 PPI,如果按 172 * 240 mm 的出版物來看,則需要 2032 個像素。不幸的是,目前能達到該分辨率的移動設備不多,桌面設備也需要 4k 分辨率的輸出才能做到。最便捷的選擇可能是 iPad Pro 12.9 和 3840 * 2160 分辨率的筆記本。當然如果只要求 200 PPI,則很多設備都可以達到,比如 9.7/10.5/11 寸的 iPad 和 1440p 的智能手機。下面以 2K Android 旗艦機爲例,討論如何快速製作 200 PPI+ 的掃版 PDF。

  1. 在購買書目的 app 中,按順序截圖,不要覺得麻煩。畢竟紙書打印、掃描,也是一頁頁進行的,假裝自己買了一本紙書就好。此外,每頁剛好截圖一整頁即可,不要害怕字小。上面計算過 2K 分辨率對應的 PPI,雖然手機小看不清,但是放大了就看清了,PPI 夠高就不會模糊。這是儘量使用高分辨率設備的根本原因。

  2. 手機截圖的內容會自動存儲在特定文件夾中,並按時間命名並排序。iOS 是 PNG 格式,Android 是 jpg 格式。將所有需要製作成書的截圖放在同一個文件夾中,如 dir,然後我們需要剪裁這些截圖。Android 的話會有上面的標題欄和下面的導航欄,iOS 會有上面的標題欄和下面的手勢條。當然這些都不是重點,重點在於手機和平板的比例往往都不是書籍本身的大約 $1:\sqrt{2}$,所以需要裁掉周圍沒用的部分。

  3. 從這一步開始,iOS/iPadOS 應該就沒有什麼辦法了,畢竟只是個功能系統,除非有人願意用 app 手工一頁頁裁剪。後續步驟在 Android 本地就可以完成,iOS 的話找一臺桌面電腦運行相同程序即可。或者如果有人是 iPad + Android 的組合,也可以將更高分辨率的 iPad 截圖直接通過 USB-C 數據線傳輸到 Android 手機中,進行後續操作。

  4. 在 Android 手機上安裝 Termux,之後在 Termux 中運行

    1
    termux-setup-storage

    Termux 就獲得了讀取手機存儲的權限,可以 cd 到存儲着所有截圖的文件夾,即之前提到的 dir。接着就需要安裝剪裁和拼接所需要的軟件 imagemagick

    1
    pkg install imagemagick

    安裝之後,如果提示缺少 libz,就繼續安裝 libzip-dev,當然也可能缺別的,反正缺啥就按名字搜索,然後安裝結尾帶 dev 的軟件包就行

    1
    2
    pkg search libz
    pkg install libzip-dev
  5. 準備完成後,就可以使用如下程序 (make.py) 將所有截圖合成一個 PDF 了。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    import os
    path = os.getcwd()
    files = os.listdir(path)
    files.sort()
    page = 0
    pages = ' '
    os.chdir(path)
    for file in files:
    # if file[-3:] != "PNG":
    # continue
    # iOS 默認保存爲大寫的 PNG 文件
    if file[-3:] != "jpg":
    continue
    # Android 默認保存爲小寫的 jpg 文件
    # os.system( "convert " + file + " -crop 1500x2180+84+44 " + str(page) + ".png" )
    # 爲 iPad 10.5 計算的數值
    os.system( "convert " + file + " -crop 1400x2000+20+480 " + str(page) + ".png" )
    # 爲 1440p 的 Android 手機計算的數值
    # AxB+X+Y 的含義是以左上爲 (0,0),從 (X,Y) 開始向右下截取 A*B 區域內的像素。
    pages += str(page) + ".png "
    page += 1
    #os.system( "convert -page 1500x2180" + pages + "make.pdf" )
    os.system( "convert -page 1400x2000" + pages + "make.pdf" )
    os.system( "rm -f" + pages )
    os.system( "ps2pdf make.pdf final.pdf" )
    # 通過轉換成 ps 格式來壓縮 pdf 文件
    os.system( "rm -f make.pdf" )

    使用方法是在 cddir 後,在文件夾中保存上面的 python 文件,然後運行

    1
    python3 make.py

    即可得到最終的成品 final.pdf,中間產生的臨時文件會自動刪除。

  6. 對於 Mac 用戶,homebrew 提供了該組件

    1
    brew install imagemagick

    對於 Windows 用戶,開啓 Windows Subsystem for Linux 之後 apt-get, yum, zypper, pacman 安裝即可。對於 Linux 用戶,請不要噴我寫這麼弱智的教程,我猜很多人確實不會。

  

  在我個人的測試中,絕大多數出版物,使用 1440p 手機或 1500p 以上的 iPad 截圖,都可以達到至少清晰可讀的水平。因爲現在的 1440p 手機,幾乎都是全面屏,所以任何 app 選擇單頁顯示後,寬度會用滿、重點裁剪高度即可。3:2 的 iPad 同理,但 4:3 的 iPad 因爲小於 $\sqrt{2}:1$,所以寬度反而會不夠,需要重點裁剪寬度。總之,經過簡單裁剪之後,可以得到一本足夠清晰、每頁大小完全一樣的優質電子書。而除了一頁頁截屏比較費勁【其實並不比一頁頁掃描或複印更費勁】,剩下的就僅僅是運行固定的程序了。經我使用 iPad Pro 10.5 和 Note9 測試,一本 200 頁的書,一般十分鐘之內肯定可以搞定。如果使用華爲等具有截屏手勢的手機,相信速度會更快。

  

  我現在已經有點老了。年輕的時候家裏沒什麼錢。讀書是很艱難的事。需要地壇啊、台湖啊、燦然啊,跑很多地方淘換打折書。最後還是需要少吃兩頓飯、用每天的飯費來購買。雜誌在中學的時候主要看『讀書』和『文史知識』,還得找別人借,自己能省一點是一點。所以我始終覺得分享一本書,給沒那麼多錢、或者根本沒有地方買到的年輕人,是一件我願意花點時間做的事。尤其當人們有一部 Android 手機的時候,坐在地鐵上用別人玩手遊的時間,就可以完成上面所有的操作了,並不會真的浪費額外的生命。因爲我們生命的大部分時間,本來就是被浪費掉的。