為 PDF 加上頁碼:位置、起始號碼,以及旋轉頁面的陷阱
如何在線上為現有 PDF 加頁碼:選一個角落,設定如 101 的起始號碼,並避開儲存為旋轉狀態的頁面上出現的橫躺頁碼。
加入頁碼會在 PDF 的每一頁寫上一個普通的十進位數字。你可以選角落、字級和第一個號碼,其餘都是固定的。它不知道哪些頁面是以旋轉狀態儲存、哪些封面應該保持空白,也不知道頁面上是否已經印有頁碼,這些情況都需要你在上傳前先做決定。
這個工具寫了什麼
每個號碼都是黑色的 Helvetica 文字,加進頁面內容,所以會被列印,並且在任何檢視器裡都跟著檔案走。沒有字型或顏色的選項。它不是某些閱讀器在縮圖窗格顯示的頁面標籤設定,所以顯示「iii」或「A-1」標籤的檢視器,仍會繼續顯示它自己的標籤。
表單提供三個設定:
- 位置: 左上、中上、右上、左下、中下或右下。表單預設是中下。在 API 中,這些對應的值是 1、2、3、7、8 和 9;4、5 和 6 會把號碼放在垂直中間的左側、中央和右側。
- 起始號碼: 預設 1。第一頁取這個值,之後每頁加一。
- 字級: 預設 12,表單上的範圍是 6 到 200。API 不強制這個範圍,所以請自行維持在範圍內。
起始號碼必須是整數:abc 會被以 400 invalid_parameter 拒絕,而負值會被接受並照樣繪製(-2、-1、0、1,依此類推)。
號碼的錨點距離頁面邊緣 48 point(三分之二英寸),依頁面的 MediaBox 大小計算。數字從錨點往右寫,所以「中下」會讓數字的左緣落在中線上,三位數的號碼會結束在中央稍微偏右。「右下」從距右緣 48 point 處開始、往右緣延伸,所以 12 pt 的三位數號碼大約結束在距邊緣 28 point 處。在 12 pt 時,這個偏移很難察覺。
實例:合約第二冊
拿一份 6 頁的檔案 contract.pdf,它接續一份 100 頁的第一冊。把它上傳到加入頁碼,起始號碼設為 101,位置選右下,字級 12。在 2026-10-04 對本機建置跑的一次中,輸出是一份 6 頁的 PDF,擷取其文字可看到 101 到 106 的號碼,每頁一個,位於右下角、在內文下方。你的檢視器在細節上的呈現可能不同;順序和數值不會。
關於這個結果有兩件事要知道。輸出檔沿用輸入的檔名(contract.pdf),所以覆蓋原檔之前請先改名。另外,沒有帶 position 的 API 請求,把號碼放在右上(值 3),而不是表單預設的中下。在指令碼裡請明確送出 position。
整份文件的作業順序
這個工具會為你給它的檔案的每一頁編號。它無法跳過封面,也不能在中途重新開始。所以你作業的順序,決定了結果:
| 目標 | 做法 |
|---|---|
| 跨多個檔案使用同一個連續編號 | 先合併 PDF,再為合併後的檔案編號 |
| 每個部分保有各自的編號 | 先為每個檔案編號,再合併 |
| 封面不編號 | 先用分割 PDF把封面切出來,為其餘部分編號,再把封面合併回去 |
| 第二冊接續第一冊 | 把起始號碼設為下一頁,如上所述 |
如果頁面上已經印有頁碼,新的號碼會畫在它之外。對同一個檔案跑兩次,每頁就有兩個號碼:在測試中,第二次以相同位置執行,把新的「1」畫在既有的「101」上,兩者重疊。請保留未編號的原檔,並且一律從它開始。
如何乾淨地切掉封面或某個章節,以及被移除的頁面可能留下什麼,見只傳 PDF 的其中幾頁。
旋轉頁面的陷阱
掃描器和手機產生的頁面,常常是以旋轉旗標儲存,而不是重新繪製。號碼是依未旋轉的頁面來放置,所以在儲存為旋轉 90 度的頁面上,它會落在錯誤的邊緣,而且是橫躺的。在測試中,一頁標為旋轉 90 度、選「中下」編號的 Letter 頁面,顯示成一頁橫向頁面,左緣大約一半高的位置有一個小小的橫躺「1」,而不是沿著底部。
如果順序由你決定,請先編號,再用旋轉 PDF旋轉。旋轉作用於整頁,所以號碼會跟文字一起轉。如果檔案送到你手上時就已標為旋轉,這個工具無法補償,也沒有任何設定可以修正;編號之後請在檢視器裡檢查那些頁面。
列印前檢查
開啟第一頁、中間的一頁和最後一頁。留意數字是否落在打孔邊界、照片或已有文字的頁尾上。如果檔案末端有空白頁,請先用刪除頁面處理,再編號,這樣最後一個號碼才會對應最後一頁真正的內容。號碼現在已是頁面的一部分,所以之後用擷取頁面或重新排序,號碼會跟著原本的頁面走,序列就不再依序;順序改變時,請從未編號的檔案重新編號。
只為你有權更動的文件編號;當歸檔流程要求未經標記的來源時,請保留未編號的原檔。受密碼保護的檔案需要密碼:瀏覽器頁面會詢問,沒有密碼就呼叫 API 會得到 400 password_required(「This PDF is password-protected. Enter its password.」),所以請先解除檔案的密碼。呼叫這個工具不需要 API 金鑰。