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

当前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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:30:37