如何在Python的FPDF中旋转单张图片以统一文档内图片方向?
使用FPDF单独旋转单张图片并统一显示方向
核心结论
可以单独旋转单张图片,无需旋转整个文档,同时完全支持保留图片原有方向。
实现步骤
- 判断图片方向:借助PIL库获取图片宽高,区分横向(宽>高)和纵向(高>宽)图片。
- 单独旋转目标图片:使用FPDF的旋转上下文管理器(fpdf2版本)或变换控制方法(旧版FPDF),仅对需要调整方向的图片应用旋转,不影响其他内容。
- 统一显示尺寸:旋转后调整图片的宽/高参数,保证所有图片显示大小一致。
完整代码示例(基于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
相关产品推荐
相关产品推荐

