name: pdf-figure-extractor description: 從PDF論文中精確提取Figure圖片,自動分析PDF結構、定位caption位置、裁剪乾淨圖形,並驗證圖片質量。支援學術新聞稿、論文寫作等場景的自動化圖片處理。
import fitz
doc = fitz.open(pdf_path)
page = doc[page_num]
# 獲取所有文本塊
blocks = page.get_text("blocks")
for block in blocks:
x0, y0, x1, y1, text, block_no, block_type = block
if "Fig." in text or "Figure" in text:
print(f"Figure相關: y={y0:.0f}-{y1:.0f}, {text[:50]}...")
# 搜尋Fig. X的精確位置
text_instances = page.search_for(f"Fig. {fig_num}")
for inst in text_instances:
print(f"Fig.{fig_num}位置: y={inst.y0:.0f}-{inst.y1:.0f}")
根據caption位置判斷圖形區域:
| Caption位置 | 圖形區域 |
|---|---|
| y=400 (頁面中部) | y=100-395 (caption上方) |
| y=666 (頁面底部) | y=350-660 (caption上方) |
| y=326 (頁面底部) | y=100-320 (caption上方) |
rect = fitz.Rect(50, y_start, page.rect.width - 50, y_end)
pix = page.get_pixmap(matrix=fitz.Matrix(2, 2), clip=rect)
pix.save(f"fig{fig_num}.png")
檢查清單: - [ ] 包含所有子圖(a,b,c,d...) - [ ] 沒有混入"Fig. X"開頭的caption文字 - [ ] 沒有混入正文段落 - [ ] 座標軸和標籤完整
原因: 裁剪範圍太大 解決: 縮小y_end,確保在caption之前結束
原因: 裁剪範圍太小 解決: 擴大y_start/y_end,包含完整圖形
原因: 裁剪範圍包含了caption區域 解決: 根據caption的y座標精確調整裁剪邊界
matrix=fitz.Matrix(2, 2)小蔥技能7w4.net有更新,你可以訪問看下。
"提取PDF圖片", "從PDF提取Figure", "PDF圖片裁剪", "學術論文圖片提取"
這個 Skill 能較好地滿足從學術論文中提取乾淨 Figure 圖片的需求,步驟清晰、易於理解。優點是提供了完整的處理流程和常見問題的解決方案,適合有一定基礎的使用者使用。不足是功能相對基礎,對於複雜的 PDF 佈局或批次處理場景可能需要手動調整引數,新手使用者可能需要一定學習成本。總體來說質量中等偏上,對常規單圖提取效果較好,但複雜場景支援有限。