Skip to main content

快速导航

顶层函数

当你需要从”文件级任务”快速开始(打开、合并、批量渲染)时,优先看这一节。

打开 PDF 文档

打开一个 PDF 文档,返回 Document 实例。 接口签名: sopdf.open(path, password, *, stream)
str | Path | None
默认值:"None"
PDF 文件的路径,与 stream 二选一。
str | None
默认值:"None"
加密 PDF 的密码,无需密码时传 None
bytes | None
默认值:"None"
从内存字节打开,与 path 二选一。
返回值: Document — 打开的文档对象。

合并多个 PDF 文件

将多个 PDF 文件按顺序合并为一个输出文件。 接口签名: sopdf.merge(inputs, output)
list[str | Path]
待合并的 PDF 文件路径列表,按列表顺序拼接。
str | Path
输出文件的目标路径。

批量渲染页面为图像字节

批量将一组页面渲染为图像字节。 接口签名: sopdf.render_pages(pages, *, dpi, format, alpha, parallel)
list[Page]
待渲染的页面对象列表,通常来自 doc.pages
int
默认值:"72"
渲染分辨率(每英寸点数)。常用值:72(屏幕预览)、150(高清)、300(印刷)。
str
默认值:"\"png\""
输出图像格式,"png""jpeg"
bool
默认值:"False"
是否包含透明通道(仅 PNG 有效)。
bool
默认值:"False"
是否使用多进程并行渲染。开启后可绕过 GIL,多核机器上大幅提速。
推荐参数组合 返回值: list[bytes] — 与 pages 一一对应的编码图像字节列表。

批量渲染页面并写入文件

批量渲染页面并将结果写入目录,文件名为 page_0.pngpage_1.png 等。 接口签名: sopdf.render_pages_to_files(pages, output_dir, *, dpi, format, alpha, parallel)
list[Page]
待渲染的页面对象列表。
str | Path
输出目录路径,不存在时自动创建。
int
默认值:"72"
渲染分辨率(每英寸点数)。
str
默认值:"\"png\""
输出图像格式,"png""jpeg"
bool
默认值:"False"
是否包含透明通道(仅 PNG 有效)。
bool
默认值:"False"
是否使用多进程并行渲染。
推荐参数组合
返回顶部

文档对象操作

当你已经拿到 Document 实例,想做页级管理、拆分、合并、保存时,重点看这一节。 Document 表示一个已打开的 PDF 文档。不应直接构造,始终通过 sopdf.open() 获取。

属性

总页数

成员: doc.page_countlen(doc)
文档的总页数(只读)。
len(doc) 等同于 doc.page_count

元数据

文档元数据,通过 Metadata 代理对象读写。

文档大纲

文档大纲(目录),以 Outline 树对象返回。文档无书签时返回 len == 0 的空大纲。读取使用 pypdfium2,无 pikepdf 开销。

加密状态

文档是否设有密码保护(只读)。即使提供了正确密码并成功打开,该属性仍返回 True

页面序列

所有页面的惰性序列(只读)。支持迭代和切片,常与 render_pages() 配合使用。

页面访问

按索引获取页面

接口签名: doc[index] / doc.load_page(index)
通过 0-based 索引获取页面。支持负数索引(doc[-1] 为最后一页)。

迭代

分割

按页拆分文档

接口签名: doc.split(pages, output)
从当前文档中提取指定页面,返回一个新的 Document 对象。
list[int]
待提取的页面 0-based 索引列表,顺序与列表顺序一致。
str | Path | None
默认值:"None"
若提供,则同时将新文档写入该路径;否则仅在内存中返回。
返回值: Document — 包含指定页面的新文档对象。

逐页拆分为文件

接口签名: doc.split_each(output_dir)
将文档的每一页分别保存为独立的 PDF 文件,文件名格式为 page_0.pdfpage_1.pdf 等。
str | Path
输出目录路径,不存在时自动创建。

合并

追加文档页面

接口签名: doc.append(other)
将另一个文档的所有页面追加到当前文档末尾。调用后文档被标记为”已修改”,需调用 save()to_bytes() 持久化。
Document
被追加的文档对象。

保存

保存到文件

接口签名: doc.save(path, *, compress, garbage, linearize)
将文档写入磁盘。
str | Path
目标文件路径。
bool
默认值:"True"
是否压缩内容流,可显著减小文件体积。
bool
默认值:"False"
是否生成对象流(object streams),进一步压缩结构数据。
bool
默认值:"False"
是否线性化 PDF,优化网络顺序读取(Fast Web View)。

导出为字节

接口签名: doc.to_bytes(*, compress)
将文档序列化为字节,不写入磁盘。适用于在内存中处理或通过网络传输 PDF。
bool
默认值:"True"
是否压缩内容流。
返回值: bytes — 完整的 PDF 文件字节内容。

生命周期

关闭文档

接口签名: doc.close()
关闭文档,释放所有文件句柄和内存资源。推荐使用 with 语句自动管理,避免手动调用。

上下文管理器

返回顶部

页面对象操作

当你要在单页维度做渲染、文本提取、文本检索时,使用这一节的方法。 Page 表示文档中的单个页面。通过 doc[i]doc.load_page(i) 获取,不应直接构造。

属性

页面序号

成员: page.number
页面的 0-based 索引(只读)。

页面尺寸

成员: page.rect
页面尺寸,单位为 PDF 点(1 pt = 1/72 英寸)(只读)。rect.widthrect.height 为页面的宽高。

页面旋转角度

成员: page.rotation
页面旋转角度,取值为 090180270 之一(可读写)。

渲染

渲染为图像字节

接口签名: page.render(*, dpi, format, alpha)
将页面渲染为图像字节。
int
默认值:"72"
渲染分辨率(每英寸点数)。72 适合屏幕预览,300 适合印刷质量。
str
默认值:"\"png\""
输出格式,"png""jpeg"
bool
默认值:"False"
是否包含透明通道(Alpha)。仅 PNG 格式有效;JPEG 不支持透明度。
推荐参数组合 返回值: bytes — 编码后的图像字节(PNG 或 JPEG)。

渲染并保存图像

接口签名: page.render_to_file(path, *, dpi, format, alpha)
渲染页面并将图像写入文件。参数含义与 render() 完全一致。
str | Path
输出文件路径(含扩展名)。
int
默认值:"72"
渲染分辨率(每英寸点数)。
str
默认值:"\"png\""
输出格式,"png""jpeg"
bool
默认值:"False"
是否包含透明通道(仅 PNG)。

文本提取

提取纯文本

接口签名: page.get_text(*, rect)
提取页面的纯文本内容。
Rect | None
默认值:"None"
仅提取该矩形区域内的文本;为 None 时提取整页。
返回值: str — 提取到的纯文本字符串。

提取文本块

接口签名: page.get_text_blocks(*, rect, format)
提取带边界框的结构化文本块。
Rect | None
默认值:"None"
仅提取该矩形区域内的文本块;为 None 时提取整页。
str
默认值:"\"list\""
返回格式:"list" 返回 TextBlock 对象列表;"dict" 返回字典列表,每项含 "text""rect" 键。
返回值: format="list"list[TextBlock]format="dict"list[dict],每项形如 {"text": "...", "rect": {"x0": ..., "y0": ..., "x1": ..., "y1": ...}}

文本搜索

搜索文本位置

接口签名: page.search(query, *, match_case)
在页面上搜索文本,返回所有命中位置的矩形区域列表。
str
要搜索的文本字符串。
bool
默认值:"False"
是否区分大小写,默认不区分。
返回值: list[Rect] — 每个命中位置的边界矩形列表,未找到时返回空列表。

搜索文本并返回上下文块

接口签名: page.search_text_blocks(query, *, match_case)
搜索文本,同时返回每处命中的精确矩形及其所在的完整文本块上下文。
str
要搜索的文本字符串。
bool
默认值:"False"
是否区分大小写。
返回值: list[dict],每个元素包含:
返回顶部

数据类型

当你需要理解返回值结构(如 RectTextBlockMetadata)或做二次处理时,参考这一节。

Rect

表示一个矩形区域,坐标单位为 PDF 点(pt,1 pt = 1/72 英寸)。坐标系以页面左上角为原点,x 向右增大,y 向下增大。
构造参数 核心属性(常用) 所有几何运算均返回新的 Rect 实例,原对象不可变。

TextBlock

表示页面上一个带边界框的文本块。

Metadata

PDF Document Info 字典的读/写代理。通过 doc.metadata 获取,不应直接构造。 读取路径(零 pikepdf 开销):每个属性调用 pypdfium2.get_metadata_dict() 并在自动同步后返回。 写入路径(懒加载 pikepdf):每个 setter 调用 _ensure_pike(),写入 pike_doc.docinfo 并将文档标记为脏,下次读取时自动同步。 核心字段(常用) PDF 日期格式: D:YYYYMMDDHHmmSSOHH'mm'(前缀 D: 和时区均可选)。

OutlineItem

文档大纲中的单个书签节点(不可变)。

Outline

只读大纲树管理器。通过 doc.outline 获取,不应直接构造。首次访问时一次性构建,使用 pypdfium2 的 TOC 数据,无需 pikepdf 初始化。
返回顶部

异常

当你要把 PDF 处理流程接入线上服务,做稳定性与错误恢复设计时,先看这一节。 所有异常均继承自 PDFError,后者继承自内置 RuntimeError
推荐捕获顺序: 先捕获具体异常(PasswordError / FileDataError / PageError),最后再捕获 PDFError 作为兜底。
返回顶部