PDF 頁碼與實體書不一致?先檢查頁面標籤(Page Labels)
解決 PDF 導覽與印刷頁碼不符的問題。提供六個範例檔案,涵蓋羅馬數字前言、插入插頁以及從第 37 頁開始的節錄內容。

如果 PDF 閱讀器顯示第 4 頁,但頁面本身印的卻是第 1 頁,請先檢查檔案的 頁面標籤(Page Labels)。封面與羅馬數字編號的前言可能會改變實體位置,但這並不代表書籍內容有缺失。請在副本上修正導覽標籤,切勿一開始就在頁面上覆蓋新頁碼或刪除前言。
這種修復方式有其局限:標籤無法還原遺漏的掃描頁面、調整頁面順序,也無法辨識原本模糊不清的頁碼。請先確認實際存在的是哪一頁,接著讓導覽資訊如實對應。
我們製作了三組可下載的修改前後對照範例來說明這項差異:一本 7 頁的筆記本、插入未編號插頁的版本,以及從印刷第 37 頁開始的節錄本。在每一組範例中,標籤都經過修改,但渲染出的頁面像素完全保持一致。
動手修復前,先區分三種不同的「頁碼」
在本指南中, 檔案位置 是指 PDF 中的第一頁、第二頁、第三頁。 印刷頁碼 是指頁面上肉眼可見的編號。 頁面標籤 是指儲存於檔案中用於導覽的邏輯識別碼,例如 ii 或 A-1.
這些數值彼此不同是完全合法的。PDF Association 的 頁面標籤說明 詳細介紹了編號順序、前綴,以及頁面索引、頁碼與標籤之間的區別。一份檔案可以包含羅馬數字前言、重新開始編號的正文以及帶有前綴的附錄,而頁數依然完全正確。
以下是我們 7 頁教學範例檔案中的對應關係:
| 檔案位置 | 可見印刷頁碼 | 原始導覽標籤 | 修正後的標籤 |
|---|---|---|---|
| 1 | 無:封面 | 1 | 封面 |
| 2 | i | 2 | i |
| 3 | ii | 3 | ii |
| 4 | 1 | 4 | 1 |
| 5 | 2 | 5 | 2 |
| 6 | A-1 | 6 | A-1 |
| 7 | A-2 | 7 | A-2 |
Cover 是我們指定的描述性標籤,而不是印在封面上的數字。總頁數仍為七頁。閱讀器可能會同時顯示標籤與位置,例如 1 (4 of 7);兩者同時出現並不衝突。
下載 設定標籤前的七頁檔案 與 已設定標籤的版本。在兩者中分別打開正文第一頁,並將頁面本身與導覽控制項進行比對。

這是我們製作的頁面預覽,標籤添加於圖像外側,並非特定 PDF 應用程式的螢幕截圖。
在工作副本上記錄各區段的分界
編輯前,請先保留一份未經修改的原始檔,並透過瀏覽頁面來找出轉換點:第一個編號的引言頁面、第一個正文頁面、任何插頁,以及每個附錄或重新編號的起始處。在可見的頁碼標記旁記錄對應的檔案位置。
不要只檢查正文第一頁。在上述範例中,「加三」可以找到正文第 1 頁,但無法對應羅馬數字引言或 A- 附錄。單一偏移量只是在連續區段內的暫時捷徑,無法可靠地對應整本書。
如果頁碼順序意外跳號——例如可見頁面從 38 頁直接跳到 40 頁——請檢查其間的圖像;若情況允許,請比對來源處的同一個版本。這可能是掃描缺頁、刻意加入的插頁、特殊的原始編號,或是其他排序問題。切勿只為了讓計數器看起來連續,就將「39」指派給無關的頁面。
對於已簽署或受保護的 PDF,請使用允許的原始工作流程,或向文件提供者索取修正後的閱讀版本。本文提供的測試指令碼並非用來保留或繞過這些保護機制。
變更導覽標籤,而非印刷內容
Adobe 官方文件記載的桌面端操作路徑
Adobe 目前的 Acrobat 頁面標籤說明 指向 所有工具 → 組織頁面 → 頁面標籤。選取頁面範圍、開始新的編號序列,然後選擇其編號樣式、起始值以及選填的前綴。針對不同章節重複此步驟;連續章節則可直接延續先前的序列。
以我們的範例而言,這代表引言使用羅馬數字編號,正文重新從 1 開始使用阿拉伯數字編號,而附錄則使用帶有 A- 前綴的阿拉伯數字編號。套用每項變更前,請務必確認實際選取的頁面,尤其是當現有標籤已與檔案位置不一致時。
Adobe 將這些導覽標籤與可見的頁首/頁尾編號區分開來。如果您只是想讓閱讀器的頁面控制項與書籍相符,新增可見的頁尾屬於另一項完全不同的操作。
上述步驟是根據官方文件整理而成。我們在撰寫本文時並未實際執行 Acrobat 修復,也沒有針對特定 Acrobat 介面進行測試。
我們實際使用 pypdf 測試的方法
我們的測試範本是由 ReportLab 產生、以 pypdf 6.10.0 複製,並在不修改頁面內容串流的情況下指派標籤。單就這個 7 頁的範例而言,核心操作如下:
from pypdf import PdfReader, PdfWriter
from pypdf.constants import PageLabelStyle
reader = PdfReader("seven-page-before.pdf")
writer = PdfWriter(clone_from=reader)
writer.set_page_label(0, 0, prefix="Cover")
writer.set_page_label(1, 2, style=PageLabelStyle.LOWERCASE_ROMAN, start=1)
writer.set_page_label(3, 4, style=PageLabelStyle.DECIMAL, start=1)
writer.set_page_label(5, 6, style=PageLabelStyle.DECIMAL, prefix="A-", start=1)
with open("seven-page-labeled-copy.pdf", "xb") as output:
writer.write(output)
assert PdfReader("seven-page-labeled-copy.pdf").page_labels == [
"Cover", "i", "ii", "1", "2", "A-1", "A-2"
]
此 API 採用 以零為基底的索引(Zero-based index):檔案中的第 4 頁對應索引 3。上述範圍包含兩個端點。排他輸出模式 xb不會覆寫現有檔案。如需確切的實作方式,請參閱特定版本的 pypdf 頁面標籤 API 與我們的 完整產生器程式碼 。
請勿將這些範圍直接貼到無關的書籍中。請先建立該書籍的章節結構圖。我們測試過的指令碼不接受任何客戶或來源 PDF:它僅會產生內部定義的原始範例。
固定位移量失效的兩種情況
未編號的插圖會改變正文的位移量
在第二個測試範例中,我們在印刷正文頁碼 1 和 2 之間插入了一張圖版插頁。該圖版沒有印刷頁碼。我們為其指派了描述性標籤 Plate-A ,並將下一頁正文恢復為第 2 頁。
| 檔案位置 | 可見頁面識別碼 | 標籤 |
|---|---|---|
| 4 | 1 | 1 |
| 5 | 未編號插圖 | 圖版 A |
| 6 | 2 | 2 |
在插入插頁之前,印刷第 1 頁位於檔案位置 4:位移量為 3。插入之後,印刷第 2 頁位於檔案位置 6:位移量變為 4。如果重複使用第一個位移量,將會直接導向插圖。
比較 加上標籤前的 8 頁版本 與 加上標籤後的版本。修復作業會在插入處新增一個標籤區段,並在其後重新開始正文編號序列。這不會將插圖轉為有編號的來源頁,也不會將其從檔案中移除。
節錄內容可能從印刷頁碼第 37 頁開始
我們的第三個測試範例包含三頁,可見頁碼分別為 37、38 和 39。它們在檔案中的位置是 1、2 和 3。適當的標籤應從 37 開始,而非 1。
此 處理前檔案 與 處理後檔案 都恰好包含這三頁。將第一頁加上標籤 37 並不代表該 PDF 必須包含前面的 36 頁。
針對實際摘錄的內容,請使用能在來源上驗證的頁碼。如果第一個可見頁碼遺失或被裁切,在指定頁碼之前請先取得佐證資料。憑直覺隨意猜測的頁碼順序,往往比純粹的檔案位置計數更容易造成誤導。
請驗證儲存後的檔案,而非只看編輯對話框
針對這三組檔案,我們重新開啟了全部六份 PDF 並檢查了每一個標籤。Poppler 26.08.0 以 144 dpi 渲染了這兩個版本。 所有 18 組對應頁面都具有完全相同的像素,且所有 18 個頁面內容串流均逐位元組完全相符。在本次測試中,頁面內容並未被蓋上任何印記或刪除任何元素。
各 單頁測試結果 包含檔案雜湊值、頁面標籤及像素比對結果。 可下載的頁面對照表 記錄了檔案位置、以零為起始的索引以及可見頁碼。 重現步驟說明 詳細解釋了相依套件版本,以及如何在全新目錄中重新產生這些範例。
這能驗證我們的檔案本身,但無法保證每款閱讀軟體的處理方式都完全相同。PDF Association 記錄了不同應用程式之間對標籤支援度的差異;其發布的閱讀器調查報告來自 2024 年,並非我們今天重複進行的測試。請務必在你實際會使用的閱讀器中進行檢查:
- 重新開啟儲存後的副本,確認總頁數未發生變化。
- 檢查每個編號區段的第一頁與最後一頁。
- 嘗試跳轉至
ii,1與A-1,或是文件中的對應頁面。 - 確認每次跳轉都確實停在目標可見頁面上,而非僅僅停留在看似相符的計數器上。
- 如果閱讀器忽略了這些標籤,請保留明確的位置至頁碼對照表,或改用支援標籤的閱讀器。切勿為了迎合不支援該功能的介面,而反覆修改原本正確的標籤。
渲染畫面相符並不代表具備無障礙存取能力、有效簽章、正常運作的連結或正確擷取的文字。如果頁面外觀正確但複製出來的文字有誤,請參考獨立的 PDF 文字層診斷。這類問題無法透過頁面標籤來修復。
若日後需要翻譯文件,請保留原始對照表
如果精確導覽是唯一的困擾,到這裡就可以結束了。重新命名頁籤並不需要進行 OCR 或翻譯。
若語言仍是閱讀上的阻礙,在參考 掃描版 PDF 翻譯工作流程 或 PDF 翻譯與排版指南之前,請務必先保留原始檔案與頁碼對照。若需進行更全面的輸出品質檢查,請參閱 PDF 翻譯 QA 檢查清單.
選擇使用 BookTranslator 的 PDF 翻譯器 的讀者,請不要預設原始頁籤會在重新產生的輸出檔案中保留下來。OCR 模式可能會變更原始版面、字型及字型大小。若輸出內容發生重排,請務必對照原始檔案確認重要段落;直接將舊的頁碼對照套用到新的分頁上,並無法維持內容的對應關係。
目標並非讓每個數字完全相同,而是要消除每個數字的歧義:讓讀者清楚知道頁面在該檔案中的實體位置、來源檔案如何標記它,以及如何順暢翻至該頁。





