首页 > 其他分享 >py:PDF文件拆分任意页数

py:PDF文件拆分任意页数

时间:2024-10-13 15:17:32浏览次数:10  
标签:input doc py 页数 PDF pdf path page

一、简介

PyMuPDF,简称fitz,是一个轻量级的Python库,它基于MuPDF的C++库,提供了丰富的功能,包括但不限于PDF的读取、编辑、转换和渲染。Fitz作为PyMuPDF的子模块,简化和封装了PyMuPDF的功能,使得在Python中处理PDF文件更加简单。

二、安装

PyMuPDF(包含fitz模块)可以通过Python的包管理器pip来安装。

在命令行工具中输入以下命令:

pip install PyMuPDF

这将从Python包索引下载并安装PyMuPDF及其依赖项。

或者

三、基本功能

1、打开PDF文件

使用fitz.open()函数可以打开一个PDF文件,并返回一个表示该文件的对象。例如:

import fitz 
doc = fitz.open("example.pdf")

2、获取页面数量

通过page_count属性可以获取PDF文件的总页数。例如:

page_count = doc.page_count  
print("Number of pages:", page_count)

3、提取文本

使用get_text()方法可以提取当前页面的所有文本。例如:

text = page.get_text()  
print("Extracted text:", text)

此外,还可以遍历文档中的每一页,提取每一页的文本。

4、保存修改后的PDF

使用save()方法可以保存对PDF文件所做的更改。例如:

doc.save("modified_example.pdf")

其他功能:

  • 插入新的页面:使用fitz.new_page()创建新页面,然后使用insert_pdf()方法将新页面插入到指定位置。
  • 合并多个PDF文件:创建一个空的PDF文档对象,然后遍历要合并的PDF文件,将它们的页面插入到新的文档对象中,最后保存合并后的PDF。
  • 提取PDF中的图片:遍历PDF的每一页,使用get_images()方法获取页面上的所有图像,并保存它们。
  • 提取PDF中的表格:使用find_tables()方法获取页面上的表格,然后可以将表格数据保存为CSV格式文件。

四、应用场景

PyMuPDF(fitz)适用于需要处理PDF文件的各种场景,如文本提取、页面操作、PDF合并与分割等。它以其快速、高效和易于使用而著称,是处理PDF文件的理想选择。

例如:PDF文件拆分任意页数.py

import fitz
import os


def split_pdf(pdf_path):
    # 检查输入的PDF文件是否存在
    if not os.path.exists(pdf_path):
        print("您输入的路径无pdf文件!")
        return

        # 打开pdf文件
    doc = fitz.open(pdf_path)
    page_count = len(doc)
    print(f"该pdf文件页数为:{page_count}")

    while True:
        # 获取起始页码(0基索引)
        page_num1 = None
        while True:
            try:
                user_input = input("请输入您拆分的起始页码(输入q/Q退出):")
                if user_input.lower() == 'q':
                    doc.close()
                    return
                page_num1 = int(user_input) - 1
                if page_num1 < 0 or page_num1 >= page_count:
                    print("起始页码无效,请重新输入。")
                else:
                    break
            except ValueError:
                print("请输入有效的起始页码或q/Q退出。")

        # 获取结束页码(0基索引)
        page_num2 = None
        while True:
            try:
                user_input = input("请输入您拆分的截止页码(输入q/Q退出):")
                if user_input.lower() == 'q':
                    doc.close()
                    return
                page_num2 = int(user_input) - 1
                if page_num2 < 0 or page_num2 >= page_count:
                    print("截止页码无效,请重新输入。")
                else:
                    break
            except ValueError:
                print("请输入有效的截止页码或q/Q退出。")

        # 创建一个新的PDF文档并插入指定的页面范围
        new_doc = fitz.open()
        new_doc.insert_pdf(doc, from_page=page_num1, to_page=page_num2)

        # 获取用户输入的PDF基础名字和保存目录
        pdf_base_name = input("请输入您的PDF基础名字:")
        if not pdf_base_name.lower().endswith('.pdf'):
            pdf_name = f"{pdf_base_name}_{page_num1 + 1}-{page_num2 + 1}.pdf"
        else:
            pdf_name = f"{pdf_base_name[:-4]}_{page_num1 + 1}-{page_num2 + 1}.pdf"

        save_dir = input("请输入您想要保存PDF的目录(例如:C:/Users/YourName/Documents/):")
        # 确保目录末尾有斜杠,并检查目录是否存在
        if not save_dir.endswith(os.sep) and save_dir != "":
            save_dir += os.sep
        os.makedirs(save_dir, exist_ok=True)

        output_path = os.path.join(save_dir, pdf_name)
        new_doc.save(output_path)
        new_doc.close()
        print(f"Saved: {output_path}")

        # 检查是否继续拆分或退出
        is_continue = input("是否继续拆分其他页面范围(q/Q退出)?").strip().lower()
        if is_continue == 'q':
            doc.close()
            break


# 调用函数进行PDF拆分

pdf_path = input("请输入您需要拆分的PDF路径:")
split_pdf(pdf_path)

标签:input,doc,py,页数,PDF,pdf,path,page
From: https://blog.csdn.net/weixin_51891232/article/details/142899032

相关文章

  • 使用Python异步抓取豆瓣电影数据并进行可视化
    一前言在本篇文章中,我们将探讨如何使用Python的asyncio和aiohttp库来异步抓取豆瓣电影Top250中的电影数据,并将这些数据保存到CSV文件中,最后使用matplotlib库对评分趋势进行可视化。目标网站:https://movie.douban.com/top250二环境准备首先确保你的环境中已经安装了......
  • python中安装sewar库
    最近模型中需要用到sewar库,但是按照传统的pipinstall包名以及condainstall包名的方法一直安装不上,出现各种错误,又不想更新pip,因此采用下载安装包安装的方法,安装包下载地址:sewar·PyPI解压安装包,并放在自己觉得合适的文件夹中,如下(我的是放在D:\python文件夹中,且也解压在......
  • Python环境安装(Windows7—现今)
    这里进行python——保姆级安装说明:首先进行安装包的下载:输入:python.org(因为是外网,所以加载速度巨慢,不用怀疑是自身网络的问题)然后显示的界面是:(我这英文进行自动翻译了,无伤大雅)然后点击:进入后,再点击进行下载:然后就开始下载了:(你会发现巨慢,外网嘛,悠哉悠哉等会)然后下载......
  • [Python学习日记-46] Python 中第三方开源模块的安装、使用与上传自己写的模块
    [Python学习日记-46]Python中第三方开源模块的安装、使用与上传自己写的模块简介下载与安装如何使用安装好的第三方开源模块如何上传自己写的模块到PyPi简介    在前面的模块介绍和导入当中主要介绍的都是Python内置的一些模块,我们把它称为标准库,而这个库......
  • Python爬虫快速入门(Requests+BeautifulSoup+Scrapy)
    目录1.为什么需要爬虫2.爬虫的方法2.1Requests2.2BeautifulSoup2.3Scrapy3.爬虫的注意事项1.为什么需要爬虫    爬虫是重要的数据获取方式,理论上任何网上公开可视的数据都是可以获取到的。在学术研究等场合中除了使用直接的数据集以及各种搜索引擎提......
  • 【Python库安装】Python环境安装GDAL库
    Python环境安装GDAL库1GDAL介绍GDAL的应用python安装GDAL库Python版本查看与切换方法1:pip直接安装另:下载.whl文件安装报错-Python安装库文件isnotasupportedwheelonthisplatform的解决方案方法2:离线安装,使用whl文件安装方法3:使用conda安装wrf-python:参考......
  • Python与深度学习库PyTorch进阶
    Python与深度学习库PyTorch进阶从零开始:PyTorch环境搭建与第一个神经网络安装PyTorch第一个神经网络玩转张量:掌握PyTorch核心——Tensor操作全解析创建张量张量运算自动求导模型构建的艺术:自定义神经网络层与模块自定义层自定义模块训练秘籍:优化器、损失函数与训练循......
  • python量化数据6:计算宁德时代macd金叉死叉红柱绿柱大小
    一、通达信公式#行业业绩轮动公众号首发DIFF:=EMA(CLOSE,12)-EMA(CLOSE,26);DEA:=EMA(DIFF,9);MACD:=2*(DIFF-DEA);金叉cross(diff,dea)死叉cross(dea,diff)二、代码#行业业绩轮动公众号首发#tdx_indicator是1个通达信常用函数的封装库,下载可以从我的开......
  • 三种Transformer模型中的注意力机制介绍及Pytorch实现:从自注意力到因果自注意力
    本文深入探讨Transformer模型中三种关键的注意力机制:自注意力、交叉注意力和因果自注意力。这些机制是GPT-4、Llama等大型语言模型(LLMs)的核心组件。通过理解这些注意力机制,我们可以更好地把握这些模型的工作原理和应用潜力。我们不仅会讨论理论概念,还将使用Python和PyTorch从零开......
  • Python实践——实现视频.mp4转图片.jpg(可成功实现)
    代码......