Python获取PDF页数与元信息 标题作者教程
用Python读取PDF总页数、标题、作者、创建时间、修改时间等元数据,批量整理文件夹下PDF档案信息。
场景痛点
整理PDF档案时,经常需要知道每份文件多少页、谁创建的、什么时候生成的。手动打开属性面板一份份看,几百个文件要看半天。用Python脚本批量遍历文件夹,把页数、标题、作者、主题、创建时间一次性读出来汇成Excel,做档案台账再合适不过。
用到的库
pip install PyPDF2 pandas
完整代码
# -*- coding: utf-8 -*-
"""
批量获取 PDF 页数与元信息
"""
import os
from PyPDF2 import PdfReader
import pandas as pd
def get_pdf_info(pdf_path: str) -> dict:
"""
读取单个 PDF 的页数和元信息
"""
reader = PdfReader(pdf_path)
total_pages = len(reader.pages)
# metadata 是 DocumentInformation 对象,可能为 None
meta = reader.metadata or {}
return {
"文件名": os.path.basename(pdf_path),
"路径": pdf_path,
"页数": total_pages,
"标题": getattr(meta, "title", None),
"作者": getattr(meta, "author", None),
"主题": getattr(meta, "subject", None),
"创建者": getattr(meta, "creator", None),
"生成工具": getattr(meta, "producer", None),
"创建时间": str(getattr(meta, "creation_date", None)),
"修改时间": str(getattr(meta, "modification_date", None)),
"是否加密": reader.is_encrypted,
}
def batch_scan(folder: str, out_excel: str = "pdf_info.xlsx") -> None:
"""
遍历文件夹下所有 PDF,导出信息清单
"""
rows = []
for root, dirs, files in os.walk(folder):
for name in files:
if not name.lower().endswith(".pdf"):
continue
path = os.path.join(root, name)
try:
info = get_pdf_info(path)
rows.append(info)
print(f"OK: {name} ({info['页数']}页)")
except Exception as e:
print(f"FAIL: {name} -> {e}")
rows.append({"文件名": name, "路径": path, "页数": None})
df = pd.DataFrame(rows)
df.to_excel(out_excel, index=False)
print(f"\n共 {len(rows)} 份 PDF,已导出: {out_excel}")
if __name__ == "__main__":
batch_scan("./档案")
代码讲解
len(reader.pages)直接拿到总页数,比肉眼翻页快得多。reader.metadata返回DocumentInformation对象,包含 title/author/subject/creator/producer/creation_date/modification_date 等字段。- 用
getattr(..., None)兜底,老PDF可能没有某字段,返回 None 而不是报错。 reader.is_encrypted标识文件是否加密,方便筛出需要先解密的文件。os.walk()递归遍历,try/except 保证单个损坏文件不影响整批。- pandas 一次性把列表字典导出成 Excel,列名就是字典的 key。
运行结果
控制台逐个打印文件名和页数,最后生成 pdf_info.xlsx。Excel 里一行一份PDF,包含页数、标题、作者、时间、加密状态等字段,可直接按页数排序、按作者筛选。
注意事项
- 元信息是PDF写入时由生成工具填的,很多PDF这几个字段是空的,不要把它当成可靠数据源。
creation_date是datetime对象,已用str()转成字符串写入Excel。- 加密PDF在不解密的情况下也能读到页数和部分元信息,PyPDF2会自动处理。
- 想按页数筛选"超过100页的文件",直接
df[df['页数'] > 100]。

更新时间:2026-09-14 21:37:38