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

使用Python Fitz库修改PDF矩形填充颜色失败求助

解决PyMuPDF修改PDF矩形填充色不生效的问题

你遇到的问题核心是:page.get_drawings()返回的是当前页面绘图元素的副本,修改这些副本的属性不会直接同步到原PDF页面上。必须把修改后的绘图重新绘制回页面,才能让变更生效。

问题分析

原代码仅修改了绘图对象的fill属性,但没有将修改后的内容重新渲染到页面,因此保存后的PDF完全没有变化。另外注意你代码里设置的填充色是白色(1,1,1),但打印提示说改成红色,这里如果要红色应该用(1,0,0)(PyMuPDF用RGB浮点数,范围0-1)。

修正后的代码

import fitz

# PDF文件路径
pdf_path = "rectangulos.pdf"

# 打开PDF文档
pdf_document = fitz.open(pdf_path)

# 遍历每一页
for page_number in range(len(pdf_document)):
    page = pdf_document[page_number]
    # 获取当前页面的所有绘图元素
    page_drawings = page.get_drawings()
    
    # 清除原页面的绘图内容(避免新旧内容重叠)
    page.clean_contents()
    
    # 遍历并修改绘图元素
    for drawing in page_drawings:
        # 判断是否为矩形('re'代表rectangle)
        if drawing['items'][0][0] == 're':
            # 设置填充色为红色(RGB浮点数:红,绿,蓝,范围0-1)
            drawing['fill'] = (1, 0, 0)
    
    # 将修改后的绘图重新绘制到页面
    page.draw_drawings(page_drawings)

# 保存修改后的PDF
output_pdf_path = "rectangulos_modificados.pdf"
pdf_document.save(output_pdf_path)
pdf_document.close()  # 记得关闭文档释放资源

print("已将PDF中所有矩形的填充色修改为红色,保存至新文件!")

关键说明

  • page.clean_contents():清除页面原有的绘图和内容流,确保重新绘制的内容不会和原内容重叠。
  • page.draw_drawings(page_drawings):将修改后的绘图列表重新渲染到页面上,这一步是让修改生效的核心。
  • RGB颜色值:PyMuPDF使用0到1之间的浮点数表示RGB分量,比如(1,0,0)是纯红,(1,1,1)是白色,(0,0,0)是黑色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:30:32