PyMuPDF`库实现PDF旋转功能

news2024/12/28 20:54:08

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。主要用于csdn网站中导出的博客pdf是横向的,看起来不是很方便,才想到用python编制一个将pdf从横向转为纵向的功能。

功能

该PDF转换工具具有以下功能:

  1. 选择PDF文件:通过点击“选择文件”按钮,用户可以选择要转换的PDF文件。
  2. 转换PDF:点击“转换PDF”按钮后,工具将打开所选的PDF文件,并对每个页面进行处理。
    • 如果页面的朝向是正常方向(0度),工具将将页面旋转90度。
    • 如果页面已经顺时针旋转90度(90度),工具将跳过该页面。
    • 其他朝向角度的页面将被忽略。
  3. 保存转换后的PDF:转换完成后,工具将保存转换后的PDF文件,并在原始文件名后面添加"_converted"。
  4. 提示消息:工具会显示转换完成的提示消息,以向用户确认转换已成功完成。
    C:\pythoncode\blog\pdfconvertoriginal.py
    在这里插入图片描述
    在这里插入图片描述

安装依赖库

在运行该工具之前,需要安装以下依赖库:

  • wxPython:用于创建GUI界面。
  • PyMuPDF:用于处理PDF文件。

可以使用以下命令使用pip安装这两个库:

pip install wxPython PyMuPDF

代码实现

下面是完整的Python代码实现:

运行工具

保存上述代码为pdf_convert_tool.py文件,然后运行该文件。将会打开一个窗口,窗口中有"选择文件"和"转换PDF"两个按钮。

  1. 点击"选择文件"按钮,选择要转换的PDF文件。
  2. 点击"转换PDF"按钮,工具将打开所选的PDF文件,并将页面旋转90度。
  3. 转换后的PDF文件将保存在原始文件名后面添加"_converted"的形式。

总结

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。通过使用`wx很抱歉,Markdown格式在当前聊天界面无法显示。我将为您提供纯文本格式的博客内容,您可以将其复制到Markdown编辑器中进行格式化。

PDF转换工具

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。该工具使用了wxPython和PyMuPDF库。

功能

该PDF转换工具具有以下功能:

1. 选择PDF文件:通过点击“选择文件”按钮,用户可以选择要转换的PDF文件。
2. 转换PDF:点击“转换PDF”按钮后,工具将打开所选的PDF文件,并对每个页面进行处理。
   - 如果页面的朝向是正常方向(0度),工具将将页面旋转90度。
   - 如果页面已经顺时针旋转90度(90度),工具将跳过该页面。
   - 其他朝向角度的页面将被忽略。
3. 保存转换后的PDF:转换完成后,工具将保存转换后的PDF文件,并在原始文件名后面添加"_converted"。
4. 提示消息:工具会显示转换完成的提示消息,以向用户确认转换已成功完成。

安装依赖库

在运行该工具之前,需要安装以下依赖库:

- wxPython:用于创建GUI界面。
- PyMuPDF:用于处理PDF文件。

可以使用以下命令使用pip安装这两个库:

pip install wxPython PyMuPDF

代码实现

下面是完整的Python代码实现:

```python
import wx
import fitz

class MainFrame(wx.Frame):
    def __init__(self, parent, title):
        super(MainFrame, self).__init__(parent, title=title, size=(400, 200))
        self.panel = wx.Panel(self)
        self.file_path = None

        self.select_file_btn = wx.Button(self.panel, label="选择文件", pos=(20, 20))
        self.select_file_btn.Bind(wx.EVT_BUTTON, self.on_select_file)

        self.convert_btn = wx.Button(self.panel, label="转换PDF", pos=(20, 60))
        self.convert_btn.Bind(wx.EVT_BUTTON, self.on_convert)

    def on_select_file(self, event):
        dlg = wx.FileDialog(self, "选择文件", wildcard="PDF files (*.pdf)|*.pdf", style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST)
        if dlg.ShowModal() == wx.ID_OK:
            self.file_path = dlg.GetPath()
        dlg.Destroy()

    def on_convert(self, event):
        if self.file_path is None:
            wx.MessageBox("请先选择文件!", "错误", wx.OK | wx.ICON_ERROR)
            return

        self.convert_pdf(self.file_path)

        wx.MessageBox("转换完成!", "提示", wx.OK | wx.ICON_INFORMATION)
    
    # def convert_pdf(self, pdf_path):
    #     doc = fitz.open(pdf_path)
    #     for page in doc:
    #         pix = page.get_pixmap()
    #         if pix.width > pix.height:
    #             pix = pix.rotate(90)
    #             page.set_pixmap(pix)

    #         watermark = page.search_for("watermark")
    #         for mark in watermark:
    #             page.delete_mark(mark)
    def convert_pdf(self, pdf_path):
        doc = fitz.open(pdf_path)
        for page in doc:
            if page.rotation == 0:
                # 当前页面朝向为正常方向,需要旋转
                page.set_rotation(90)
            elif page.rotation == 90:
                # 当前页面朝向已经是顺时针旋转90度,不需要旋转
                continue
            else:
                # 其他朝向角度,暂不处理
                continue
        # doc.save(output_path)
        # doc.close()
        output_path = pdf_path.replace(".pdf", "_converted.pdf")
        doc.save(output_path)
        doc.close()

if __name__ == "__main__":
    app = wx.App()
    frame = MainFrame(None, "PDF转换工具")
    frame.Show()
    app.MainLoop()

运行工具

保存上述代码为pdf_convert_tool.py文件,然后运行该文件。将会打开一个窗口,窗口中有"选择文件"和"转换PDF"两个按钮。

  1. 点击"选择文件"按钮,选择要转换的PDF文件。
  2. 点击"转换PDF"按钮,工具将打开所选的PDF文件,并将页面旋转90度。
  3. 转换后的PDF文件将保存在原始文件名后面添加"_converted"的形式。

总结

本文介绍了一个简单的Python应用程序,用于将PDF文件转换为旋转90度的PDF文件。通过使用wxPython和PyMuPDF库,我们能够创建一个具有简单用户界面的工具,方便用户选择和转换PDF文件。您可以根据实际需求对代码进行修改和扩展,以满足更多功能和需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/891916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pdf转word最简单方法~

pdf转word最简单方法!pdf转word最简单方法我们都知道,PDF文件是一种只读文件格式,无法按照需求对PDF文件进行更改与编辑,从而影响到了PDF文件的使用。所以,我们需要将PDF文件转换为word文档,以此来保证文件…

js 小程序限流函数 return闭包函数执行不了

问题: 调用限流 ,没走闭包的函数: checkBalanceReq() loadsh.js // 限流 const throttle (fn, context, interval) > {console.log(">>>>cmm throttle", context, interval)let canRun…

Webgl 存储限定符attribute、gl.getAttribLocation、gl.vertexAttrib3f及其同族函数和矢量版本的介绍

目录 attribute变量规范 获取attribute变量的存储位置 gl.getAttribLocation()函数的规范: 向attribute变量赋值 gl.vertexAttrib3f()的规范。 gl.vertexAttrib3f()的同族函数 示例代码…

达梦数据库8用户管理以及忘记sysdba密码修改办法

达梦数据库8用户管理&达梦数据库v8忘记sysdba密码,修改办法。 达梦数据库8用户管理1.创建用户的语法:2.锁定/解锁用户3.修改用户的密码(同样要符合密码策略PWD_POLICY)4.修改用户默认表空间5.删除用户6.同样地可以使用DM管理工具进行创建…

基于docker搭建pytest自动化测试环境(docker+pytest+jenkins+allure)

pytest搭建自动化测试环境(dockerpytestjenkinsallure) 这里我以ubuntu18为例 如果有docker环境,可以直接拉取我打包好的镜像docker pull ziyigun/jenkins:v1.0 1 搭建Docker 1.1 安装docker # 配置docker安装环境 sudo apt-get install ap…

js 闭包和 垃圾回收机制

js 闭包和 垃圾回收机制 闭包里面的变量 是局部变量 但是 由于一直使用,引用,没有被回收 所以相当于 全局变量

Docker案例分析:创建并运行一个Redis容器

步骤一:到DockerHub搜索Redis镜像 步骤二:查看Redis镜像文档中的帮助信息 步骤三:利用docker run命令运行一个Redis容器 可以看到第二行的命令是支持数据持久化的创建容器命令,但是我们使用的命令如下: docker run -…

Vue3 使用json编辑器

安装 npm install json-editor-vue3 main中引入 main.js 中加入下面代码 import "jsoneditor";不然会有报错&#xff0c;如jsoneditor does not provide an export named ‘default’。 图片信息来源-github 代码示例 <template><json-editor-vue class…

ssm+vue校园美食交流系统源码

ssmvue校园美食交流系统源码和论文026 开发工具&#xff1a;idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 技术&#xff1a;ssm 摘 要 随着现在网络的快速发展&#xff0c;网上管理系统也逐渐快速发展起来&#xff0c;网上管理模式很快融入到了许多商…

Stable Diffusion入门修炼手册

简介 作为新入门的新手&#xff0c;通常安装完Stable Diffusion之后&#xff0c;一打开界面&#xff0c;在文生图输入girl或者dog&#xff0c;结果出来的画面比较糟糕&#xff0c;看起来像素很低&#xff0c;画面不清晰&#xff0c;人物也不怎么美&#xff0c;等等其他问题&am…

tomcat中的BIO与NIO发展

tomcat中的NIO发展 前言 Tomcat目前支持BIO&#xff08;阻塞 I/O&#xff09;、NIO&#xff08;非阻塞 I/O&#xff09;、AIO&#xff08;异步非阻塞式IO&#xff0c;NIO的升级版&#xff09;、APR&#xff08;Apache可移植运行库&#xff09;模型&#xff0c;本文主要介绍NI…

如何使用CSS实现一个平滑过渡效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现平滑过渡效果⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个专栏是为那些对Web开发感兴趣、刚…

【FAQ】调用视频汇聚平台EasyCVR的iframe地址,视频无法播放的原因排查

有用户反馈&#xff0c;在调用iframe地址后嵌入用户自己的前端页面&#xff0c;视频无法播放并且要求登录。 安防监控视频汇聚平台EasyCVR基于云边端一体化架构&#xff0c;具有强大的数据接入、处理及分发能力&#xff0c;可提供视频监控直播、云端录像、视频云存储、视频集中…

nginx反向代理流程

一、nginx反向代理流程 反向代理&#xff1a;使用代理服务器来接受internet上的连接请求&#xff0c;然后将请求转发给内部网络中的上游服务器&#xff0c;并将上游服务器得到的结果返回给请求连接的客户端&#xff0c;代理服务器对外表现就是一个web服务器。Nginx就经常拿来做…

Pyqt5打开电脑摄像头进行拍照

目录 1、设计UI界面 2、设计逻辑代码&#xff0c;建立连接显示窗口 3、结果 1、设计UI界面 将ui界面转为py文件后获得的逻辑代码为&#xff1a;&#xff08;文件名为 Camera.py&#xff09; # -*- coding: utf-8 -*-# Form implementation generated from reading ui file …

虚拟拍摄,如何用stable diffusion制作自己的形象照?

最近收到了某活动的嘉宾邀请&#xff0c;我将分享&#xff1a; 主题&#xff1a;生成式人工智能的创新实践 简要描述&#xff1a;从品牌营销、智能体、数字内容创作、下一代社区范式等方面&#xff0c;分享LLM与图像等生成式模型的落地应用与实践经验。 领域/研究方向&#xff…

Linux工具【2】(调试器gdb、项目自动化构建工具make/Makefile)

gdb、make/Makefile 引言调试器gdb介绍常用指令 自动化构建工具make/Makefile介绍使用依赖关系与依赖方法编辑Makefile伪目标 总结 引言 在上一篇文章中介绍了Linux中的编辑器vim与编译器gcc与g&#xff1a; 戳我看vim与gcc详解哦 在本篇文章中将继续来介绍Linux中的工具&…

Puppeteer+RabbitMQ:Node.js 批量加工pdf服务架构设计与落地

学情分析&#xff1a;根据学生阶段性的学习和考试情况进行学情分析、归纳、总结&#xff0c;汇总学情数据&#xff1b;精准推荐&#xff1a;推荐算法基于学情数据结合知识图谱进行精准练习题推荐&#xff1b;错题回顾&#xff1a;错题的阶段性回顾复习。 第一部分学情分析的PDF…

Springboot 封装整活 Mybatis 动态查询条件SQL自动组装拼接

前言 ps&#xff1a;最近在参与3100保卫战&#xff0c;战况很激烈&#xff0c;刚刚打完仗&#xff0c;来更新一下之前写了一半的博客。 该篇针对日常写查询的时候&#xff0c;那些动态条件sql 做个简单的封装&#xff0c;自动生成&#xff08;抛砖引玉&#xff0c;搞个小玩具&a…

ModStartBlog v8.0.0 博客归档页面,部分组件升级

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装会…