我覺得既然做電子書,卻還有著跟實體書一樣的限制,甚至更不方便,那就失去了電子書的意義了。 下面的程式碼利用擷取螢幕的方式將書籍拍下來。
- 先選轉螢幕方向及調整適合的縮放比例。
- 執行PowerShell小程式,如果無法用系統管理員身分執行PowerShell(才能執行儲存後的ps1檔),就直接開啟PowerShell ISE,並把程式碼貼上並修改執行(這個腳本檔不要存檔)。
- 有時候換頁太快頁面來不及讀取會模糊掉。或是有時候udn讀書館本身讀取就有問題,就是某頁會模糊,等多久都還是模糊的,這時候要重新讀取整本電子書來解決。有時候瀏覽器的記憶體會用光,導致頁面無法讀取,建議分批擷取,也就是一次擷取一百頁就好。
- 檢查擷取下來的圖檔,哪些頁面是模糊的,再獨立擷取該頁面。(一樣用剛剛的PowerShell腳本檔,改$total跟$pages再執行就好。)
- 將擷取下來的圖檔合併成PDF檔,如果沒有Adobe Acrobat或是無法合併的話,頁數少的話可以用線上的jpg轉pdf並合併的工具,頁數多的話可以用這個PowerShell的腳本轉存成bmp(路徑要改,將其中的兩個png改成bmp),使用這個腳本的時候要注意,不同位數的圖檔要分開放,否則命名會錯亂,也就是說,1~9,10~99,100~999要分開放。(如果有些頁面是黑底白字,可以用小畫家的顏色反轉將文字顏色換過來。
- 最後,用Adobe Acrobat切割頁面。
$total = 1 # 儲存圖檔計數器 $pages = 100 # 要擷取的頁數 # 讓系統取得title叫做[Chrome]的視窗 # 並讓該視窗變成當前視窗 $wshell = New-Object -ComObject wscript.shell; $wshell.AppActivate('Chrome') Sleep 1 for($r=1; $r -le $pages; ++$r) { # 擷取畫面 [Reflection.Assembly]::LoadWithPartialName("System.Drawing") function screenshot([Drawing.Rectangle]$bounds, $path) { $bmp = New-Object Drawing.Bitmap $bounds.width, $bounds.height $graphics = [Drawing.Graphics]::FromImage($bmp) $graphics.CopyFromScreen($bounds.Location, [Drawing.Point]::Empty, $bounds.size) $bmp.Save($path) $graphics.Dispose() $bmp.Dispose() } # 擷取範圍,建議可以設大一點,之後再用Acrobat Adobe裁切頁面多餘的部分 $bounds = [Drawing.Rectangle]::FromLTRB(0, 0, 1060, 1750) # 將擷取的畫面存檔。 # 請將存檔路徑設在桌面或是下載資料夾, # C槽或是其他系統資料夾存檔時需要詢問權限,會造成存檔失敗。 # 注意到會覆蓋原本同名的檔案(不會警告)。 screenshot $bounds "C:\Users\math2\Downloads\$total.jpg" ++$total Sleep 1 # 下一頁,秒數越多,給網頁讀取的時間越充裕,當然速度越慢,但模糊頁面的機會越少 $wshell.SendKeys('{RIGHT}'); Sleep 10 }
No comments:
Post a Comment