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

如何在Python的FPDF中旋转单张图片以统一文档内图片方向?

使用FPDF单独旋转单张图片并统一显示方向

核心结论

可以单独旋转单张图片,无需旋转整个文档,同时完全支持保留图片原有方向。

实现步骤

  1. 判断图片方向:借助PIL库获取图片宽高,区分横向(宽>高)和纵向(高>宽)图片。
  2. 单独旋转目标图片:使用FPDF的旋转上下文管理器(fpdf2版本)或变换控制方法(旧版FPDF),仅对需要调整方向的图片应用旋转,不影响其他内容。
  3. 统一显示尺寸:旋转后调整图片的宽/高参数,保证所有图片显示大小一致。

完整代码示例(基于fpdf2)

先安装依赖:

pip install fpdf2 pillow

处理代码:

from fpdf import FPDF
from PIL import Image

pdf = FPDF()

# 替换为你的图片路径列表
imagelist = ["img1.jpg", "img2.png", "img3.jpeg"]

for image_path in imagelist:
    # 获取图片原始尺寸
    with Image.open(image_path) as img:
        img_w, img_h = img.size
        # 判断是否为横向图片
        is_landscape = img_w > img_h
    
    pdf.add_page()
    
    if is_landscape:
        # 仅对横向图片旋转90度,旋转中心设为图片左上角
        with pdf.rotate(90, x=0, y=0):
            # 旋转后宽高互换,设置高度为100以匹配纵向图片的显示宽度
            pdf.image(image_path, 0, 0, h=100)
    else:
        # 纵向图片直接添加,保持原有方向
        pdf.image(image_path, 0, 0, w=100)

pdf.output("unified_orientation.pdf", "F")

旧版FPDF兼容写法

如果使用的是旧版FPDF(非fpdf2),用变换开始/结束实现:

from fpdf import FPDF
from PIL import Image

pdf = FPDF()

for image_path in imagelist:
    with Image.open(image_path) as img:
        img_w, img_h = img.size
        is_landscape = img_w > img_h
    
    pdf.add_page()
    
    if is_landscape:
        pdf.start_transform()
        # 旋转90度,中心在(0,0)
        pdf.rotate(90, x=0, y=0)
        pdf.image(image_path, 0, 0, h=100)
        pdf.end_transform()
    else:
        pdf.image(image_path, 0, 0, w=100)

pdf.output("unified_orientation.pdf", "F")

关于保留原有方向

若不需要统一方向,直接去掉旋转逻辑即可保留所有图片原始显示方向:

from fpdf import FPDF

pdf = FPDF()
for image in imagelist:
    pdf.add_page()
    pdf.image(image, 0, 0, w=100)  # 所有图片按原始方向添加
pdf.output("original_orientation.pdf", "F")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:20:46