请求协助:使用Python提取指定PDF中的饼图数据
提取PDF饼图数据的Python方案
针对你提到的戴尔PowerEdge M630碳足迹PDF中的饼图数据提取需求,结合你已经尝试过PyPDF2、PyMuPDF的情况,下面是更实用的方法和工具:
一、图像识别路线(应对位图格式饼图)
多数PDF里的饼图是位图图像,没法直接提取矢量数据,得先导出图像再做OCR和图形分析:
- 核心工具:PyMuPDF(提取图像) +
pytesseract(识别数值标签) +opencv-python(图像预处理) - 示例代码:
注意:需提前安装Tesseract OCR引擎,Windows/macOS用户要手动配置环境变量指向Tesseract的安装路径。import fitz import pytesseract from PIL import Image import io # 打开PDF并提取图像 doc = fitz.open("carbon-footprint-poweredge-m630.pdf") # 替换为饼图所在的页码(从0开始) target_page = doc.load_page(2) image_list = target_page.get_images(full=True) for idx, img_info in enumerate(image_list): xref = img_info[0] img_data = doc.extract_image(xref) img = Image.open(io.BytesIO(img_data["image"])) # 保存图像 img.save(f"pie_chart_{idx}.png") # 识别图像中的文字(饼图的百分比/数值标签) extracted_text = pytesseract.image_to_string(img, lang="eng") print(f"提取到的标签文本:\n{extracted_text}")
二、矢量PDF数据提取(应对矢量格式饼图)
如果PDF里的饼图是矢量图形(可右键复制图形元素),可以用以下工具提取路径信息,进而计算扇区占比:
pdfplumber:比PyMuPDF更擅长解析PDF的结构化矢量元素,能获取饼图扇形的路径坐标、角度等信息:import pdfplumber with pdfplumber.open("carbon-footprint-poweredge-m630.pdf") as pdf: page = pdf.pages[2] # 目标页码 # 获取页面所有矢量图形 for shape in page.shapes: # 筛选饼图的扇形路径(通常是curve类型) if shape["type"] == "curve": # 打印路径的坐标点,可用于计算角度/面积 print(f"路径坐标: {shape['points']}")进阶:通过计算每个扇形的角度占总圆周的比例,结合旁边的文本标签,匹配对应数值。
camelot-py:如果饼图旁边附带了对应的数据表格,优先用这个库提取表格数据,比直接识别饼图准确率高得多:import camelot # 提取表格,需调整参数匹配表格位置 tables = camelot.read_pdf("carbon-footprint-poweredge-m630.pdf", pages="2") # 输出表格数据 tables[0].df.to_csv("pie_chart_data.csv", index=False)
三、新手快速验证建议
- 先确认饼图类型:打开PDF,右键点击饼图,若能复制图形则是矢量图,否则是位图。
- 优先找饼图旁的表格:很多技术文档的饼图都会附带对应的数据表格,提取表格比识别图像效率高10倍。
- 若用OCR,先对图像做裁剪:只保留饼图和标签区域,能大幅提升识别准确率。
内容的提问来源于stack exchange,提问作者Santhosh Devadurga
相关产品推荐
相关产品推荐

