阅读文本 / Reading text
本文使用合成样本演示处理方法。代码已通过隔离环境中的示例检查;这不代表对所有真实文件或产品效果的保证。处理重要文件前,请保留原件,并按文中的边界与验收项复核。
这篇先解决哪一个问题
下面仅检查内容流的无损压缩:压缩前后解码字节与提取文本应相同。不承诺每份 PDF 都会变小,也不把无损流压缩与 JPEG 有损重编码混为一谈。
自包含的合成示例
依赖见导入列表。代码在内存中构造输入;运行记录单独提供,不代表对所有真实文件的保证。
from io import BytesIO
import pymupdf
from pypdf import PdfReader, PdfWriter
with pymupdf.open() as source:
page = source.new_page()
page.insert_text((50, 50), "Compression sample")
raw = source.tobytes()
writer = PdfWriter(clone_from=BytesIO(raw))
before = writer.pages[0].get_contents().get_data()
writer.pages[0].compress_content_streams()
out = BytesIO()
writer.write(out)
out.seek(0)
reader = PdfReader(out)
assert reader.pages[0].get_contents().get_data() == before
assert "Compression sample" in reader.pages[0].extract_text()
assert len(reader.pages) == 1
关键点在于:无论怎么压缩内容流,文字矢量路径、字体嵌入和图像原始像素数据都不会被修改。这意味着你可以安全地在翻译预处理阶段执行此步骤,作为标准化流程的一部分,而不必担心破坏原文可读性。但务必注意,
compress_content_streams
不接受压缩级别参数,其内部使用 zlib 默认配置。
图像替换是有损操作且不可逆
此外,
remove_images()
是彻底删除而非压缩。除非你明确知道目标场景不需要图像(如纯文本提取),否则不应在翻译准备阶段使用它。很多用户误以为“压缩图像”等于“智能优化”,实际上 pypdf 只做机械的重编码,没有感知内容语义的能力。
合成示例演示两种压缩路径的差异
以下代码构造一个包含重复图像和多页内容的 PDF,分别展示无损结构压缩与有损图像处理的效果。
注意:此为已通过合成样本检查的教学代码,仅用于说明 API 行为边界,实际使用前请在本地环境验证。
参考资料与下一步
具体异常的处理决定
观察
应做什么
不应推断
解码流变化
判为不满足本例无损要求
保留原件
体积未变小
如实记录
不保证所有 PDF 压缩成功
文本回读一致
完成一项检查
复杂渲染仍需对照
将这份检查清单用于文档翻译
文件拆合、加密或附件处理属于交付准备,翻译不能替代这些检查。保留原件和处理清单,再评估译稿的页序、链接与内容完整性。
OmniDoc(产品入口)
提供多格式文档翻译入口,官网介绍了 OCR、术语表与双语对照功能。对希望直接从文件开始处理的团队,这是一条值得用实际样本评估的路径。请使用有权上传的脱敏文件,并用本篇的检查项复核结果;这里不声称 OmniDoc 使用了本文的开源库或内部算法,也不以示例代替产品性能测试。
原厂接口依据:
pypdf 文档
。
- 1 -
更新于 2026-10-08