提取pdf目錄,並且分級

redufa發表於2024-11-03

import fitz  # PyMuPDF
import pandas as pd

# 開啟PDF檔案
pdf_path = '控制之美.pdf'  # 請確保替換為正確的檔案路徑
document = fitz.open(pdf_path)

# 初始化一個列表來儲存目錄資訊
toc_list = []

# 提取目錄資訊的函式
def extract_toc(toc, level=0):
    for item in toc:
        # 確保目錄項至少包含標題
        if len(item) > 1 and item[1]:
            title = item[1]
            # 檢查標題的首字元
            if title[0].isdigit():
                title_level = 2
            else:
                title_level = 1
            # 確保頁碼是數字型別
            page = item[2] if len(item) > 2 and isinstance(item[2], int) else None
            if page is not None:
                # 新增條目到列表
                toc_list.append({
                    'Title': title,
                    'Page': page,
                    'Level': level + title_level
                })
            # 如果有子條目,遞迴提取
            if len(item) > 3 and item[3]:  # 子條目在索引3
                extract_toc(item[3], level)

# 獲取PDF的目錄
toc = document.get_toc(simple=False)

# 提取目錄資訊
extract_toc(toc)

# 關閉PDF檔案
document.close()

# 將列表轉換為DataFrame
toc_df = pd.DataFrame(toc_list)

# 將DataFrame輸出到CSV檔案
toc_df.to_csv('output.csv', index=False, encoding='utf-8')

相關文章