PyMuPDF`库实现PDF旋转功能

本文介绍了一个简单的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安装这两个库:

bash 复制代码
pip install wxPython PyMuPDF

代码实现

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

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文件。您可以根据实际需求对代码进行修改和扩展,以满足更多功能和需求。

复制代码
相关推荐
投图匠8 小时前
十种不同风格的 CTP接口 框架
开发语言·python
2601_967980119 小时前
深入理解词向量算法及其在Python中的实践
python·word2vec·glove·fasttext·词向量
129Lab10 小时前
电池循环测试数据自动化分析:用Python+AI工具构建一键式寿命评估流水线
python·数据分析·电池测试·数据自动化·寿命评估
treasure14010 小时前
【复古】浅尝Django前后端不分离
前端·css·python·django·bootstrap·html·web
Dmz丶11 小时前
前端转 AI 100 天 Day 44:前端集成实战——用 React 给 Agent 做个正式界面
python
jay神11 小时前
基于 YOLOv8 的手势识别系统(Web 版)
前端·人工智能·python·深度学习·yolo·计算机视觉·计算机毕业设计
DeepVisionary11 小时前
阿里云上线旗舰多模态新模型,不公布跑分且限时14天退役
python·自动化
东莞市云毅网络有限公司11 小时前
FAQ 覆盖度打分:TF-IDF 与向量嵌入双路召回的 Python 实现
python·数据清洗·rag·企业知识库·文档解析
爱笑的k1111 小时前
nano-vllm 源码剖析:千行 Python 手写离线推理引擎的调度、显存与并行时序
开发语言·python·vllm
用户83562907805112 小时前
使用 Python 控制 Excel 工作表的分页位置
后端·python