首页 > 编程问答 >使用Python进行PDF旋转

使用Python进行PDF旋转

时间:2024-07-27 06:44:38浏览次数:15  
标签:python pdf rotation

使用 python 旋转扫描的 pdf 后,它工作得很好,但将 pdf 发送给第三方后,第三方仍然将 pdf 检测为 90 度 pdf 有什么办法可以解决旋转和这个问题

import PyPDF2
with open('input.pdf', 'rb') as file:
    # Create a PDF reader object
    reader = PyPDF2.PdfReader(file)

    # Create a PDF writer object
    writer = PyPDF2.PdfWriter()

    # Rotate each page by 90 degrees and add it to the writer object
    for page_num in range(len(reader.pages)):
        page = reader.pages[page_num]
        page.rotate(90)  # Rotate clockwise with negative angle
        writer.add_metadata({
            '/Rotate': '0'  # Set the desired rotation value (adjust as needed)
        })
        writer.add_page(page)

    # Write the rotated pages to a new PDF file
    with open('offffutput.pdf', 'wb') as output_file:
        writer.write(output_file)


代码的问题在于你正在为 每个页面 设置元数据,而不是为 文档 设置。

试试这个修改后的代码:

import PyPDF2

with open('input.pdf', 'rb') as file:
    # Create a PDF reader object
    reader = PyPDF2.PdfReader(file)

    # Create a PDF writer object
    writer = PyPDF2.PdfWriter()

    # Rotate each page by 90 degrees and add it to the writer object
    for page_num in range(len(reader.pages)):
        page = reader.pages[page_num]
        page.rotate(90)  # Rotate clockwise 
        writer.add_page(page)

    # Set the /Rotate metadata for the entire document AFTER adding pages
    writer.metadata['/Rotate'] = '0' 

    # Write the rotated pages to a new PDF file
    with open('output.pdf', 'wb') as output_file:
        writer.write(output_file)

说明:

  1. 旋转页面: 代码使用 page.rotate(90) 旋转每个页面。
  2. 添加页面到writer: 旋转后的页面被添加到 writer 对象。
  3. 设置文档元数据: 关键区别在于我们现在在 所有页面都被添加到 writer 之后 使用 writer.metadata['/Rotate'] = '0' 来设置 /Rotate 元数据。 这确保元数据应用于整个文档,而不仅仅是最后一页。
  4. 写入文件: 最后,旋转后的页面和更新的元数据被写入输出 PDF 文件。

这个修改应该可以解决第三方应用程序无法正确检测旋转的问题。

标签:python,pdf,rotation
From: 76647578

相关文章

  • Python win32serviceutil QueryServiceStatus:返回值是什么意思?
    我正在学习使用pywin32,并尝试在64位Python3.6.4上使用win32serviceutil模块以下代码:importwin32serviceutilasserviceserviceStatus=service.QueryServiceStatus("WinDefend")print(serviceStatus)返回以下元组:(16,4,197,0,0,0,0)我对wind......
  • Python request-html 未下载 Chromium
    importrequestsfrombs4importBeautifulSoupfromrequests_htmlimportHTMLSessionurl="https://dmarket.com/ingame-items/item-list/csgo-skins?title=recoil%20case"sesion=HTMLSession()response=sesion.get(url)response.html.render()soup=B......
  • VS Code 不改变 python 环境
    我正在使用VS-Code和anaconda环境作为python解释器。我通过ctrl+shift+`选择准确的anaconda基础环境,它也反映在vscode的下侧面板中。但是,当我检查python版本时,它显示我系统的默认python环境3.7.9如果您看到下面的截图,anaconda环境是3.......
  • 使用 Python 打开保存为 Parquet 文件中元数据的 R data.table
    使用R,我创建了一个Parquet文件,其中包含一个data.table作为主要数据,另一个data.table作为元数据。library(data.table)library(arrow)dt=data.table(x=c(1,2,3),y=c("a","b","c"))dt2=data.table(a=22222,b=45555)attr(dt,&......
  • Python 需要 Windows 长路径
    我尝试运行此安装:pip3installmsgraph-sdk它给了我这个错误:它说我需要使用此链接启用Windows长路径:https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry#enable-long-paths-in-windows-10-versi......
  • Python griddata() 和 Matlab griddata():某些网格点的结果不同
    在将一些(相当大的物理)Matlab代码转换为Python时,我偶然发现了这种情况。当对相同的二维离散数据进行插值时,Python/Scipy的griddata()函数给出的结果与Matlab的对应函数不同。griddata()Matlab示例代码:Python示例代码:%Samplepoints(x,y):7x5=3......
  • Ebay Python SDK 仅在特定项目类别上返回错误
    我在一个项目中使用ebaySDK一段时间了。最近我尝试导入一些商品,例如手表、手机壳等...并且我使用了eBay自己通过eBay返回的英国商店页面上的类别ID他们的“get_category_suggestions”API端点,但eBay似乎有选择地决定拒绝某些项目并引发服务器错误!为了测试,我做了......
  • 使用特定的Python版本(MacOS)制作virtualenv
    我安装了brew,python3(默认和最新版本)和pip3,pyenv。TensorFlow现在不支持python3.7,所以我听说我应该制作一个独立运行3.6或更低版本的virtualenv。我安装了python3.6.7bypyenvinstall3.6.7但无法制作virtualenv-p3.6.7(mydir)因为3.6.7不在P......
  • 使用Python去除图像中的线条
    我正在尝试使用Python和cv2、numpy、skimage等从黑白图像中删除“阴影线”(如果图像中存在“阴影线”)。本质上,我的图像可以有1或2条曲线,如下例所示。但每条线都有一条1-5像素外的阴影线,需要删除。我怎样才能在Python中做到这一点?原始......
  • Python 和 OpenCV:如何裁剪半成形边界框
    我有一个为无网格表创建网格线的脚本:脚本之前:脚本之后:是否有一种简单的方法,使用OpenCV来裁剪“脚本之后”图像,使其仅包含四边边界框?示例输出:编辑:我目前正在研究一种解决方案,该解决方案可以找到垂直/水平方向的第一条/最后一条......