PyMuPDF(fitz)双PDF页面50%透明度叠加失效问题求助
问题解决:PyMuPDF实现PDF页面半透明叠加
你的代码里show_pdf_page的alpha参数没生效,原因是直接插入原PDF页面后,叠加操作的上下文不对。换个思路:创建空白页,分别把两个PDF的页面渲染到这个空白页上,第二个页面设置50%不透明度。
修改后的代码如下:
import fitz # PyMuPDF # 打开输入PDF pdf1 = fitz.open("file1.pdf") pdf2 = fitz.open("file2.pdf") output_pdf = fitz.open() # 遍历每一页(兼容两个PDF页数不一致的情况) for i in range(min(pdf1.page_count, pdf2.page_count)): page1 = pdf1.load_page(i) page2 = pdf2.load_page(i) page_rect = page1.rect # 获取页面尺寸 # 创建新的空白页,尺寸和原页面一致 new_page = output_pdf.new_page(width=page_rect.width, height=page_rect.height) # 先渲染第一个页面(100%不透明度) new_page.show_pdf_page(page_rect, pdf1, pno=i, alpha=1.0) # 再渲染第二个页面,50%不透明度叠加在上面 new_page.show_pdf_page(page_rect, pdf2, pno=i, alpha=0.5) # 保存输出并关闭文件 output_pdf.save("output.pdf") pdf1.close() pdf2.close() output_pdf.close()
关键改动说明
- 不再使用临时PDF,直接在输出PDF里创建空白页,避免页面插入带来的上下文干扰
- 分两步渲染页面:先铺底第一个全透明页面,再叠加半透明的第二个页面,确保透明度参数生效
- 加入
min(pdf1.page_count, pdf2.page_count)处理两个PDF页数不一致的场景,防止索引越界报错
内容的提问来源于stack exchange,提问作者Glooring
相关产品推荐
相关产品推荐

