当前Python/PyPDF2版本下缩放PDF页面出现空白页问题求助
问题:PyPDF2调用page.scale_by()后输出空白页面
使用当前版本Python与PyPDF2时,按官方文档编写代码,内容缩放(Transformation.scale)功能正常,但调用page.scale_by(0.7)后输出0x0mm的空白页面。原本理解该操作应同时缩放内容与页面尺寸,且旧版本中可正常使用,求解决思路。
附代码:
from PyPDF2 import PdfReader, PdfWriter, Transformation # Read the input reader = PdfReader("pdffile.pdf") page = reader.pages[0] # Scaling the content - works op = Transformation().scale(sx=0.7, sy=0.7) page.add_transformation(op) # Scaling page - returns empty page page.scale_by(0.7) # Write the result to a file writer = PdfWriter() writer.add_page(page) writer.write("out-pg-transform.pdf")
解决思路
- 避免重复缩放冲突:你已经通过
Transformation().scale()对内容做了一次缩放,再调用page.scale_by()会触发两次缩放叠加,部分新版本PyPDF2中这种叠加会导致页面尺寸计算异常,生成空白页。去掉其中一个缩放操作即可。 - 单独使用page.scale_by()实现完整缩放:若需同时缩放内容和页面尺寸,直接调用
page.scale_by(0.7)即可,无需额外添加Transformation缩放。该方法本身会同步处理页面媒体框(MediaBox)和内容的缩放,旧版本行为正常,新版本需避免重复操作。 - 版本兼容性检查:部分新版本PyPDF2的
scale_by实现有变更,若必须保留两次缩放逻辑,可尝试降级至之前能正常工作的版本(如2.10.x系列),或查看官方最新文档确认方法参数是否调整。 - 手动调整页面尺寸(备选):如果必须分开处理内容缩放和页面尺寸,完成
Transformation缩放后可手动修改页面mediabox属性:
这样既能缩放内容,也能同步调整页面大小,避免# 在add_transformation之后手动调整页面尺寸 page.mediabox = page.mediabox.scale(0.7, 0.7)scale_by引发的异常。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

