# PDF 合併 — 還能拆分和重排頁面

挪動頁面，不用往伺服器跑一趟。

> 把多個 PDF 合到一起，把一個拆成好幾個，把頁面拖成你要的順序，全都在你自己的瀏覽器裡完成。什麼都不上傳，不用註冊，成品檔案在交給你之前還會被重新開啟、重新數一遍頁數。

本頁是一個完全在你的瀏覽器裡執行的互動式工具，地址是 https://abox.tools/zh-TW/merge-pdf/。你交給它的任何內容都不會被上傳。下面是這個頁面用文字對該工具的全部說明；要使用它，請開啟這個地址。

## 你的文件**不會上傳**。這裡根本沒有伺服器。

你選中的每一份文件，都是由這個地址提供的程式碼，在這臺機器的記憶體裡開啟、拆開、再寫回去的。這裡沒有任何東西能發起上傳，頁面的另一端也沒有伺服器來接。

- ✗ 不上傳
- ✗ 不註冊
- ✓ 斷網可用
- ✓ 開源
- ✓ 檔案不出這臺機器

## PDF 合併、拆分或重排的步驟

1. **選好你的 PDF。** 拖到選擇框裡，或者自己找出來，之後還能再加：每個檔案的頁面都會接在當前順序的末尾，正因如此，兩個資料夾可以分兩次合。瀏覽器直接從你的磁碟上讀。
2. **把頁面排成你要的順序。** 抓住把手拖動一頁，或者用箭頭一格格挪。把掃歪了的那頁轉正，把某頁刪掉，或者在框裡敲 `1-3, 8, 12-`，一次性保留、刪除或旋轉一整串。編號會隨著你的操作重新編排，所以你看到的永遠就是成品的樣子。
3. **說清楚出來的是一份文件還是好幾份。** 一份是常見答案。其餘都是切法：每隔多少頁切一次、在你指定的頁碼處切、一頁一個檔案，或者切回它們原本所屬的檔案。多於一份的時候會打包成一個 ZIP 交給你，這樣只儲存一次，而不是五十次。
4. **產生它，然後讀那行「已核對」的說明。** 文件寫完之後，頁面上同一個讀取器會把每一份重新開啟，數一遍頁數。要是數出來和你要的對不上，這次操作會被報為失敗，也不會給你下載。

## 說得更細的版本

[怎麼合併、拆分和重排 PDF 頁面](https://abox.tools/zh-TW/guides/merge-and-split-pdf-files/): 把幾個 PDF 合到一起、把一個切成好幾個、把頁面挪來挪去：重排之後什麼留得下、什麼是任何工具都帶不過去的，以及為什麼這些事都不必把你的檔案傳到別處。

## 工具箱裡還有

- [PDF 壓縮](https://abox.tools/zh-TW/compress-pdf/): 文件變小，不用送去任何地方。
- [PDF 解鎖](https://abox.tools/zh-TW/unlock-pdf/): 大多數「加了密」的 PDF 其實根本不用密碼。這一頁會先告訴你手上是哪一種，再動它。
- [PDF 塗黑](https://abox.tools/zh-TW/redact-pdf/): 字從檔案裡刪掉，然後再搜一遍這個檔案來證明。
- [PDF 轉 CSV](https://abox.tools/zh-TW/pdf-to-csv/): 把 PDF 裡的每一張表都找出來，變成表格軟體打得開的一行一行。

## 常見問題

### 我的 PDF 會被傳到哪裡去嗎？

不會。它們由你自己的瀏覽器在你自己的硬體上讀取、複製和寫出。這個工具沒有服務端，頁面的 `Content-Security-Policy` 裡寫著它允許聯絡的每一個地址，沒有一個屬於本站。這個工具連可選的網路功能都完全沒有。

### 能合併多少個檔案，檔案能有多大？

工具裡沒寫任何上限。上限是你自己的機器：文件在處理期間是放在記憶體裡的，所以一臺筆記本合個幾百 MB 不會有意見，再往上就開始吃力。這裡不收費、不限速、不加水印、不排隊，因為另一端根本沒人來做這些事。

### 合併或拆分會掉畫質嗎？

不會。頁面上的任何東西都不會被重新編碼、重新渲染或重新壓縮。每一頁的內容流，以及它引用的每種字型、每張圖片、每個向量圖形，都是逐位元組複製過去的，所以文字照樣能選能搜，照片還是那張照片。變的只有頁面的順序，以及它們外面那層結構。

### 書籤和連結會怎樣？

兩者都是重新搭好，而不是直接丟掉。目標頁還在結果裡的書籤，會指向那一頁新的位置；目標頁被你刪掉的書籤會消失，除非它下面還有活著的條目，那它就作為一個標題留下來。合併多個檔案時，每個檔案的書籤會歸到一個以它命名的標題下面。頁面之間的連結用同樣的辦法跟過去，包括 Word 和 LaTeX 寫的具名目標；目標沒有跟過來的連結會被留成什麼都不做，而不是把讀者送到錯的地方。指向網址的連結原樣保留。

### 有什麼是不會帶過去的？

四樣，而且工具會在結果裡說明，而不是寫在小字裡。螢幕閱讀器用的帶標籤閱讀順序樹、頁面標籤（「iii、iv、1、2」那套編號）、內嵌的附件，以及任何既不是「跳到某一頁」也不是「開啟某個網址」的動作，包括文件裡的 JavaScript。前兩樣描述的是頁面一挪就不復存在的順序；最後一樣，你並沒有要求把它帶進新檔案。要是文件的無障礙標籤對你重要，那就把原件也留著。

### 填好的表單還在嗎？

在。表單欄位和裡面填的內容會跟著頁面一起過來，新文件也會被登記成表單，閱讀器就會按表單來對待它。合併時有一點要知道：在任何閱讀器看來，同名的兩個欄位就是同一個欄位，所以如果你把同一張表單的兩份合在一起，在其中一頁填一個框，另一頁那個也會跟著填上。工具會發現這種情況並說明。

### 能開啟帶密碼的 PDF 嗎？

不能，而且是故意的。加密的文件會被拒收，並附上說明，哪怕密碼是空的也一樣，而不少掃描器和影印機正是那樣儲存的。給檔案解除保護，和挪動它的頁面是兩碼事，一個悄悄這麼做的工具，就是在做你沒要求它做的事。

### 為什麼沒有頁面縮略預覽？

因為要把一頁畫出來，就得有一個完整的 PDF 渲染器：字型、漸變、透明組、混合模式，那是超過 1 MB 的引擎，為了幾張縮圖要下載並跑起來。方塊上顯示的，是重排真正會用到的東西：頁碼、紙張的形狀和尺寸、寫出時會帶的旋轉，以及它出自哪個檔案。一疊直式頁面裡混進一張橫式掃描，照樣一眼就看得出來。

### 做好的檔案到哪裡都能開啟嗎？

能。輸出寫成 PDF 1.5，或者寫成你給的這些檔案裡所需的最高版本，而 1.5 自 2003 年以來出廠的每一個閱讀器都懂。工具還會在你自己的機器上把這一點做實：它會把每個成品檔案重新開啟，沿著頁面樹數一遍頁數，然後才把它給你。

### 它免費嗎，需要註冊嗎？

免費，沒有帳號，不用登入，沒有試用期，除了你自己機器的記憶體之外也沒有檔案大小限制。本站帶廣告，經費就是從那裡來的，廣告拿不到任何關於你文件的資訊。

### 斷網能用嗎？

能。頁面載入一次之後斷開網路，它照樣運作。這也是證明「什麼都沒上傳」最省事的辦法，真要把你的文件送出去合併，拔線那一刻就停了。

## 這條隱私承諾怎麼核實

- **你的文件沒有出去的路。** Content-Security-Policy 裡寫著這個頁面允許聯絡的每一個地址，沒有一個屬於本站。這個工具沒往那份名單裡加任何東西，因為它連一項自己的網路功能都沒有，連可選的都沒有。這裡沒有任何可以收走你檔案的接收端，就算有，程式碼裡也沒有把檔案送過去的東西。
- **合併恰恰是最不該上傳的那類活。** 人們要拼在一起的文件，往往正是從別處來的那些：合同和它的簽字頁、護照掃描檔和銀行流水、診斷書和理賠表。一個線上合併服務因此拿到了全部，放在一處，還已經排好了序。這個工具只有你瀏覽器裡的一個頁面，沒有另外那一半。
- **整個格式都在這個儲存庫裡。** 一份 PDF 就是一串物件，加上一張記錄每個物件從哪裡開始的表。`src/objects.js` 讀這套語法，`src/reader.js` 順著那張表走，`src/assemble.js` 在文件之間複製頁面，`src/writer.js` 寫出結果。這四個裡沒有一個引入了能發出請求的東西。不會去取任何庫，也沒有什麼是在伺服器上渲染的。
- **加密的檔案會被擋下，而不是被開啟。** 帶密碼的 PDF 一律拒收，包括掃描器用空密碼產生、技術上其實打得開的那種。給文件解除保護，和挪動它的頁面是兩碼事，一聲不吭地替你做了，對一個工具來說太越界了。
- **成品檔案不會說自己是在哪裡做的。** 沒有產生器一行，沒有建立日期，沒有工具名字。它也不帶走排版軟體留下的 XMP 資料包和私有塊，那些屬於此前存在過的那份文件，而不屬於你剛做出來的這一份。頁面裡的內容會被原樣複製：這個工具挪的是頁，不改頁面上寫著什麼。
- **不是「跳到某一頁」的動作不會被複制。** PDF 裡可以放開啟時就執行的指令：播放這個、把這張表單提交到那個地址、執行這段 JavaScript。經過這個工具的頁面，會保留通向其他頁面和網址的連結，其餘的都丟掉。你要重排別人的頁面，不構成把人家文件的指令碼一起帶進你新檔案的理由。
- **Google 載入了什麼，又拿不到什麼。** 廣告指令碼和統計指令碼來自 Google。關於你文件的資訊，一條也沒有交給它們，檔案、某一頁、名字、大小、頁數都沒有。讀取、複製、寫出 PDF 的每一行程式碼都由這個源提供，也都擺在儲存庫裡。
- **捐助按鈕載入了什麼，又拿不到什麼。** 頁首那個「Buy me a coffee」按鈕由 cdnjs.buymeacoffee.com 的指令碼畫出來，字型取自 Google Fonts。它不過是個連結，不上報訪問，也拿不到關於你或你文件的任何東西。不點它就什麼都不會發生，點下去到的是別人的站。
- **斷網也照樣能用。** 斷開網路，這個頁面上的一切照常工作。這是最省事的一條證明，真要把你的文件送出去合併，那時候就停了。

**你可以自己核對。**上面這些不用你信。這個頁面是儲存庫裡的模板和配置產生出來的，構建指令碼你能讀，也能自己跑一遍，跑出來的結果就提交在 `dist` 分支上。拿實際發給你的內容，跟你自己從原始碼構建出來的結果對一遍就知道了： https://github.com/A-Box-of-Tools/website

最值得先讀的幾個檔案：`config/site.toml` 裡是 Content-Security-Policy，以及負責全部複製工作的 `src/assemble.js`：一頁是怎麼從一份文件裡抽出來、放進另一份的，又有什麼是有意留下不帶走的。它夠不著網路，旁邊的讀取器和寫入器同樣夠不著。
