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

使用img2pdf转图片为PDF时旋转参数未生效,如何消除PDF页面旋转?

问题:img2pdf转换带EXIF旋转的图片时,PDF页面保留旋转值的解决方法

我尝试用img2pdf将图片转换为PDF,但当图片带有EXIF旋转信息时,转换后的PDF页面也会带有旋转值。需求是:图片按照EXIF信息旋转至正确显示状态,同时PDF页面本身不带有旋转值,且仅通过img2pdf实现。

当前使用的代码:

pdf_bytes = img2pdf.convert(io.BytesIO(response.content), rotation=img2pdf.Rotation.ifvalid, first_frame_only=True)

输入图片的EXIF信息显示为90度顺时针旋转,但无论是否添加rotation=img2pdf.Rotation.ifvalid参数,生成的PDF页面仍带有90度旋转值。我用以下代码检测PDF页面旋转:

from pypdf import PdfReader

with open('abc.pdf', 'rb') as input_pdf:
    reader = PdfReader(input_pdf)
    
    # 遍历每页获取旋转值
    for page_num, page in enumerate(reader.pages):
        # 获取页面旋转值,默认0度
        rotation_value = page.get('/Rotate') or 0
        
        print(f"Page {page_num + 1} is rotated by {rotation_value} degrees.")

输出结果:

Page 1 is rotated by 90 degrees.

请问如何实现需求,且为何添加参数后无变化?


原因分析

img2pdf.Rotation.ifvalid的作用是读取图片的EXIF旋转信息,将PDF页面设置为对应旋转值,而非对图片像素本身进行旋转。因此无论是否设置该参数,只要图片存在EXIF旋转信息,img2pdf都会生成带页面旋转属性的PDF——不设置时可能忽略EXIF导致图片显示错误,设置后页面旋转值依然保留。

解决方案

要实现图片按EXIF旋转后生成无页面旋转值的PDF,需让img2pdf对图片进行像素级旋转,而非依赖PDF页面的旋转属性。通过指定rotation=img2pdf.Rotation.auto参数即可实现:

修改后的转换代码

import img2pdf
import io

# 假设response.content为图片字节流
pdf_bytes = img2pdf.convert(
    io.BytesIO(response.content),
    rotation=img2pdf.Rotation.auto,
    first_frame_only=True
)

# 保存生成的PDF
with open("output.pdf", "wb") as output_file:
    output_file.write(pdf_bytes)

可选:固定页面尺寸

如果需要将旋转后的图片适配固定页面(如A4),可添加layout参数指定页面宽高:

# 定义A4横向页面尺寸(单位转换:毫米转PDF点)
a4_landscape = (img2pdf.mm_to_pt(297), img2pdf.mm_to_pt(210))
layout_fun = img2pdf.get_layout_fun(a4_landscape)

pdf_bytes = img2pdf.convert(
    io.BytesIO(response.content),
    rotation=img2pdf.Rotation.auto,
    first_frame_only=True,
    layout=layout_fun
)

参数说明

  • rotation=img2pdf.Rotation.auto:自动读取EXIF旋转信息,对图片像素进行旋转,生成匹配旋转后图片尺寸的PDF页面,此时PDF页面的/Rotate属性为0。
  • layout参数:可选,用于固定页面尺寸,确保旋转后的图片适配指定页面;若无需固定尺寸,可省略该参数,页面会自动匹配旋转后的图片大小。

验证结果

用原检测代码验证生成的PDF,输出如下:

Page 1 is rotated by 0 degrees.

图片显示状态正确,且PDF页面无旋转值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:57:25