PDF 分割

依頁碼範圍取出 PDF 頁面,全程在瀏覽器完成

PDF 分割從一份文件裡挑出你要的頁面,另存成一個新檔。選頁有兩條路:在輸入框打 1-3,5,8- 這樣的範圍字串,或直接點下方的頁面縮圖,兩邊即時同步。縮圖是用 pdf.js 在你的裝置上逐頁畫出來的,取頁則由 pdf-lib 完成,沒有任何一個位元組被送出去。要先知道的是:輸出永遠是「一個」檔案,而且頁序一律遞增——這個工具是用來取出頁面的,不是用來重排頁面的。

使用步驟

  1. 把單一 PDF 拖進上方虛線框或點開檔案選擇器。這裡一次只收一個檔案,框上寫的是「選擇 PDF 檔案」而非可多選版本。
  2. 等「載入預覽中...」跑完。程式會先讀出總頁數並顯示成「N 頁」,接著才一頁一頁把縮圖畫出來,所以頁數會比縮圖早出現——趁縮圖還在生成時就先打範圍是可以的。
  3. 在「頁碼範圍」欄位輸入要取出的頁。逗號分隔多段,支援單頁 5、連續 1-3、以及開放尾端 8-(第 8 頁到最後一頁)。欄位下方那行提示寫著「點選下方頁面縮圖,或直接輸入範圍」,兩種操作可以混用。
  4. 或者直接點縮圖。被選中的頁會亮起邊框,同時輸入框會自動改寫成壓縮過的等價寫法——選了第 1、2、3、5 頁,框裡就變成 1-3,5。注意這個改寫會把 8- 這種開放寫法展開成具體頁碼。
  5. 確認按鈕旁邊的「已選 N 頁」數字對得上,再按「取出頁面」。一頁都沒選到的時候按鈕是停用的。
  6. 完成後出現「下載」連結,檔名固定為 extracted.pdf。改了範圍或重選檔案,這個連結會立刻失效,需要重新按一次。

什麼時候用得上

只把要簽的那幾頁寄給對方

一份 80 頁的合約,對方只需要用印的第 12 頁與附件的第 45 到 48 頁。輸入 12,45-48 取出四頁寄出,既省得對方翻找,也避免把不必談的商業條款一起送出去。取出的頁面保有原本的文字層,對方仍然可以搜尋與複製條文內容。

從掃描的整本存摺或帳單裡取出報帳要的那幾頁

會計只要三月與四月那兩頁,但你手上是一次掃完的 60 頁 PDF。點縮圖挑頁比打頁碼直覺得多,因為你是用看的認出哪一頁是哪個月。黑白掃描件的縮圖也看得到內容,CCITT 與 JBIG2 這類雙色壓縮都在支援範圍內。

把講義的其中一章單獨發給學生

兩百頁的課程講義只想放第三章。翻到章節起訖頁後輸入 78-125,得到一份 48 頁、體積小很多的檔案,學生用手機下載不會卡。要注意原講義的目錄書籤不會跟著過來,章節內的頁碼也還是原本的 78 起跳,不會重新編號。

砍掉文件尾端不需要的空白頁或廣告頁

很多系統匯出的報表最後會多出幾頁空白或宣傳頁。刪頁的做法在這裡是反過來的:不是選要刪的,而是選要留的。一份 30 頁、末兩頁不要的檔案,輸入 1-28 即可。若要刪的是中間某一頁,例如刪掉第 13 頁,就輸入 1-12,14-。

限制與注意事項

  • 範圍字串打錯時不會跳出錯誤訊息,「取出頁面」按鈕會直接變灰。程式在你打字的過程中持續解析,解析失敗就當成「目前一頁都沒選」——這是為了避免你才打到一半就被紅字打斷,代價是打錯字與頁碼越界都只表現為按鈕沒反應。看到按鈕變灰、旁邊寫「已選 0 頁」,請回頭檢查:是不是打了全形逗號、是不是輸入了超過總頁數的數字(例如 10 頁的文件打 999),或是把 - 打成了別的符號。
  • 取出的頁面永遠依原始順序遞增排列,而且重複的頁碼會被合併掉。輸入 3-4,1 得到的是第 1、3、4 頁,輸入 2,2,2 得到的只有一頁。底層的取頁函式其實支援任意順序與重複,但畫面上這條路徑先做了排序去重,所以在這裡辦不到重排或複製頁面。
  • 輸出只有一個檔案。沒有「每頁存成一個檔」的模式,也不會打包成 ZIP。要拆成多份就得多做幾次:改範圍、按一次、下載一次,而且每次存出來都叫 extracted.pdf,瀏覽器會自動加上 (1)、(2),記得自己重新命名。
  • 縮圖是逐頁渲染的,一頁畫完才畫下一頁,而且每畫一頁都會把整份檔案重新解析一次。這對十來頁的文件無感,對三百頁的掃描件就是明顯的等待,記憶體占用也會一路往上爬。好消息是頁數在縮圖開始前就顯示了,你可以不等縮圖直接輸入範圍按下去。
  • 總頁數超過 500 的文件連預覽都進不去,會直接顯示「頁數超過 500 頁限制」,因為讀頁數的那一步就把上限擋在前面。單檔同樣受 50 MB 限制。
  • 縮圖是重新渲染出來的,取出頁面則是複製原始資料流 —— 兩條路徑完全不同。這代表縮圖只是挑頁用的參考:即使某一頁的預覽因為特殊影像或字型而顯示不完整,下載回來的 extracted.pdf 仍是原始位元組的複製,打開必定正常。(黑白掃描常用的 CCITT Group 4、JBIG2、JPEG 2000 與預定義 CJK 編碼都已支援,預覽正常顯示。)
  • 輸出的是一份新建的文件,來源檔的目錄書籤、標題與作者等文件資訊、以及表單欄位都不會保留,文件屬性裡的製作程式會顯示成 pdf-lib。頁面上的連結註解本身會被複製過去,但指向文件內其他頁的內部連結(例如目錄裡的跳頁)在新文件裡不保證還跳得到正確位置,尤其是目標頁沒有被一起取出的時候。
  • 設有密碼的檔案會在讀取頁數的階段就被拒絕,畫面顯示「此 PDF 已加密,請先解除保護後再上傳」,取頁與預覽都不會開始。
  • 這個工具不做的事:把頁面重新排序、旋轉、刪除頁面上的特定內容、依書籤或每 N 頁自動切分成多個檔案、以及萃取頁面上的圖片或純文字。

常見問題

我明明輸入了範圍,「取出頁面」卻一直是灰的。

這代表你打的字串沒有被成功解析成任何一頁。最常見的四個原因:用了全形逗號或全形減號(從網頁或通訊軟體貼過來時很容易發生);頁碼超過文件總頁數,例如 10 頁的檔案打 999;起始頁大於結束頁,像 8-3;或者夾雜了非數字的字元。解析器對整串字採全有全無的態度,只要其中一段壞掉,整個選取就會歸零,所以多段輸入時請一段一段檢查。程式裡有「頁碼範圍格式有誤」與「頁碼超出範圍」兩則訊息,但在這個畫面上它們不會被顯示出來。

可以把每一頁都存成獨立的檔案嗎?

不行,一次操作只會產出一個 PDF。如果真的需要一頁一檔,就得重複「改範圍、按取出、下載」的循環,一份 20 頁的文件等於 20 輪,而且每次下載的檔名都一樣,得靠瀏覽器自動加編號再自行整理。換個角度想,多數要「一頁一檔」的情境其實是想把單頁貼進別的地方,那用 PDF 轉圖片工具一次輸出全部頁面反而更順手。

縮圖顯示不出某一頁的內容,取出的檔案會不會也壞掉?

不會。這兩件事走的是完全不同的程式路徑:縮圖是把該頁重新渲染成圖片,取出頁面則是把原始的資料流原封不動複製到新檔案裡,中間不經過任何渲染。所以即使預覽顯示不完整,下載回來的檔案在閱讀器裡打開仍與原檔一致。真的遇到某頁預覽不理想時,改用頁碼輸入挑頁即可。

中文 PDF 的縮圖會正常顯示嗎?

會。用預定義中日韓編碼、又沒有把字型內嵌進檔案的 PDF(繁中公文常見這種),pdf.js 需要一份額外的編碼對照表才能把字碼對到字形,那份表由本站提供,所以預覽看得到字。而且即使預覽有任何閃失,取出頁面完全不經過渲染,字型物件是連同頁面一起搬走的,下載後在任何閱讀器裡都跟原檔一模一樣。

我想把第 5 頁移到最前面,可以在這裡做嗎?

不行。即使你輸入 5,1-4,輸出仍然是第 1 到第 5 頁的原始順序,因為畫面這一層在送進取頁函式之前已經先排序並去重了。要換頁序,可行的迂迴是:先取出第 5 頁存成一個檔,再取出第 1 到 4 頁存成另一個檔,然後到 PDF 合併工具把兩者依你要的順序接起來。

`8-` 這種寫法會包含第 8 頁本身嗎?

會。8- 表示「從第 8 頁到最後一頁」,起訖都包含在內,1-3 同樣是包含第 1 頁與第 3 頁的三頁。如果你在打完 8- 之後又去點了任何一張縮圖,輸入框會被改寫成展開後的具體頁碼(例如 8-20),這時它就不再是「跟著文件長度自動延伸」的寫法了,不過對單次操作沒有影響。

取出後的頁碼會重新從 1 開始編嗎?

文件內部的頁次當然是從 1 開始的——閱讀器會顯示「第 1 頁,共 4 頁」。但印在版面上的頁碼是原始文件排版時畫上去的內容,屬於頁面的一部分,所以取出第 78 到 125 頁,紙面上印的仍然是 78、79、80。這個工具不會重新編號,也沒有加頁碼的功能。