阅读文本 / Reading text
本文使用合成样本演示处理方法。代码已通过隔离环境中的示例检查;这不代表对所有真实文件或产品效果的保证。处理重要文件前,请保留原件,并按文中的边界与验收项复核。
这篇先解决哪一个问题
页码标签规则使用 firstpagenum,而不是 start。封面只有前缀时,回读的规则字典可能省略 style;更有意义的验收是检查各物理页 get_label 的结果。显示标签不是唯一页面身份。
自包含的合成示例
依赖见导入列表。代码在内存中构造输入;运行记录单独提供,不代表对所有真实文件的保证。
import pymupdf
with pymupdf.open() as source:
for _ in range(4):
source.new_page()
source.set_page_labels([
{"startpage": 0, "prefix": "Cover", "style": "", "firstpagenum": 1},
{"startpage": 1, "prefix": "", "style": "r", "firstpagenum": 1},
{"startpage": 3, "prefix": "", "style": "D", "firstpagenum": 1},
])
raw = source.tobytes()
with pymupdf.open(stream=raw, filetype="pdf") as doc:
assert [page.get_label() for page in doc] == ["Cover", "i", "ii", "1"]
assert len(doc.get_page_labels()) == 3
assert doc.get_page_labels()[0].get("style", "") == ""
assert doc.page_count == 4
合成示例:构建带标签的测试PDF并验证边界
此代码在隔离环境中已执行通过。若你的环境断言失败,请检查PyMuPDF版本或确认是否误用了
firstpagenum
等废弃字段。
验收标准与人工审查阈值
此表仅适用于结构化PDF的代码级验收。端到端效果还需结合渲染验证:某些阅读器会忽略非法标签规则,导致显示与程序解析结果不一致。此时应以PDF规范为准,而非阅读器行为。
参考资料与下一步
PyMuPDF Document.get_page_labels(): https://pymupdf.readthedocs.io/en/latest/document.html#Document.get_page_labels
PDF 1.7 Specification, Section 8.3.1 (Page Labels): https://opensource.adobe.com/dc-acrobat-sdk-docs/pdflsdk/PDFReference1.7.pdf
具体异常的处理决定
观察
应做什么
不应推断
封面前缀
读取 get_label
不要索引可能缺失的 style
重复标签
同时保存物理页索引
显示标签不当主键
混合编号
逐页对照标签
不要把罗马数字当物理页号
将这份检查清单用于文档翻译
先把页面顺序、来源位置与文本完整性检查清楚,再把同一份脱敏样本交给翻译流程。译后仍要检查标题、正文和图注是否正确对应,不能只看文字是否通顺。
OmniDoc(产品入口)
提供多格式文档翻译入口,官网介绍了 OCR、术语表与双语对照功能。对希望直接从文件开始处理的团队,这是一条值得用实际样本评估的路径。请使用有权上传的脱敏文件,并用本篇的检查项复核结果;这里不声称 OmniDoc 使用了本文的开源库或内部算法,也不以示例代替产品性能测试。
- 1 -
更新于 2026-10-08