You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python获取PDF中矢量图形的面积并计算其页面占比?

解决方案

1. 选用合适的库:PyMuPDF(fitz)

PyMuPDF支持直接读取PDF页面中的矢量路径(包括曲线段),能获取路径的样式属性(如描边颜色),还可自动计算路径面积,完全匹配需求。

2. 核心步骤实现

步骤1:安装依赖

pip install pymupdf

步骤2:脚本核心逻辑

import fitz

def calculate_path_area(path):
    # 自动处理直线、贝塞尔曲线构成的路径,计算围成面积
    return abs(fitz.Tools.path_area(path))

def process_pdf(pdf_path, target_stroke_color=None):
    doc = fitz.open(pdf_path)
    total_graph_area = 0.0
    total_page_area = 0.0

    for page in doc:
        # 计算当前页面面积
        page_rect = page.rect
        page_area = page_rect.width * page_rect.height
        total_page_area += page_area

        # 提取页面所有矢量图形
        drawings = page.get_drawings()
        for draw in drawings:
            # 按描边颜色筛选(颜色为归一化RGB元组,如(1,0,0)代表红色)
            if target_stroke_color and draw["color"] != target_stroke_color:
                continue
            # 累加符合条件的路径面积
            for path in draw["paths"]:
                total_graph_area += calculate_path_area(path)

    # 计算占比
    percentage = (total_graph_area / total_page_area) * 100 if total_page_area > 0 else 0
    print(f"符合条件图形总面积: {total_graph_area:.2f}")
    print(f"PDF总页面面积: {total_page_area:.2f}")
    print(f"图形占比: {percentage:.2f}%")

# 调用示例:筛选描边为红色的图形
if __name__ == "__main__":
    process_pdf("your_file.pdf", target_stroke_color=(1, 0, 0))

3. 关键说明

  • page.get_drawings():返回页面所有矢量图形数据,包含路径、描边颜色、填充颜色、线宽等属性
  • 若需按其他条件筛选(如填充颜色、线宽),可直接判断draw字典中的fill或width字段
  • PDF颜色为归一化RGB值(0-1区间),需根据目标图形的实际颜色调整参数

内容的提问来源于stack exchange,提问作者Onyx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:32:17