当前位置: 首页 > news >正文

Python PDF文件拆分-详解

目录

使用工具

将PDF按页数拆分

将PDF的每一页拆分为单独的文件

将PDF按指定页数拆分

根据页码范围拆分PDF

根据指定内容拆分PDF

将PDF的一页拆分为多页


在日常生活中,我们常常会遇到大型的PDF文件,这些文件可能难以发送、管理和查阅。将PDF拆分成多个小文件是一个实用的解决方案,可以为我们带来多重好处。首先,拆分PDF可以提高文件的可读性,使用户更容易找到所需信息。此外,拆分后的文件更便于分享和协作,特别适用于团队项目,让不同成员能够同时处理各自负责的部分。同时,这种方法还能有效保护隐私,允许将敏感信息单独处理,从而降低数据泄露的风险。

这篇博客将探讨如何使用Python实现PDF文件拆分,主要涵盖以下几个方面的内容:

  • 将PDF按页数拆分
    • 将PDF的每一页拆分为单独的文件
    • 将PDF按指定页数拆分
  • 将PDF按页码范围拆分
  • 将PDF按指定内容拆分
  • 将PDF的一页拆分为多页

使用工具

要在Python中实现拆分PDF文件,可以使用Spire.PDF for Python库。该库主要用于在Python应用程序中生成和处理PDF文档,也支持将PDF转换为其他格式,例如图片,Word和Excel等。

安装 Spire.PDF

在开始之前,需要先安装 Spire.PDF 库。你可以在终端中运行以下命令进行安装:

pip install spire.pdf

将PDF按页数拆分

在按页数拆分PDF文件时,你可以将PDF文档的每一页拆分为一个单独的文件,也可以将PDF文档按指定页数拆分。下面将对这两种方式逐一进行介绍。

将PDF的每一页拆分为单独的文件

Spire.PDF for Python提供了PdfDocument.Split()方法,支持将PDF文档按页拆分,生成的每个文件仅包含原始文档中的一页。具体实现步骤如下:

  • 创建PdfDocument对象。
  • 使用PdfDocument.LoadFromFile()方法打开PDF文档。
  • 使用PdfDocument.Split()方法将PDF文档的每一页拆分为单独的PDF文档。

实现代码:

from spire.pdf.common import *
from spire.pdf import *# 创建PdfDocument对象
pdf = PdfDocument()
# 加载PDF文件
pdf.LoadFromFile("心理健康.pdf")# 将PDF文件拆分为多个PDF文件,每个文件仅包含原始PDF中的一页
pdf.Split("拆分PDF/第{0}页.pdf", 1)# 关闭PdfDocument对象
pdf.Close()

Python 将PDF的每一页拆分为单独的文件

将PDF按指定页数拆分

将 PDF 文件按指定页数拆分的方法是通过创建新的 PDF 文档并将指定数量的页面插入其中来实现。具体实现步骤如下:

  • 创建PdfDocument对象。
  • 使用PdfDocument.LoadFromFile()方法打开PDF文档。
  • 获取PDF文档的总页数。
  • 使用循环按指定页数拆分PDF:
    • 设置起始页和结束页。
    • 创建新的PdfDocument对象。
    • 使用PdfDocument.InsertPageRange()方法将当前页码范围内的页面插入到新PDF文档中。
    • 使用PdfDocument.SaveToFile()方法保存生成的PDF文档。

实现代码:

from spire.pdf.common import *
from spire.pdf import *# 将PDF按指定页数拆分的方法
def split_pdf_by_page_count(input_file, page_count):# 创建PdfDocument对象pdf = PdfDocument()# 加载PDF文件pdf.LoadFromFile(input_file)# 计算总页数total_pages = pdf.Pages.Count# 按指定页数拆分PDFfor i in range(0, total_pages, page_count):# 创建新的PdfDocument对象new_pdf = PdfDocument()# 计算当前要插入的页码范围start_page = iend_page = min(i + page_count - 1, total_pages - 1)  # 确保不超过总页数# 将当前页码范围的页面插入到新PDF中new_pdf.InsertPageRange(pdf, start_page, end_page)# 保存生成的文件new_pdf.SaveToFile("拆分PDF/" + f"{start_page + 1}-{end_page + 1}页.pdf")# 关闭新创建的PdfDocument对象new_pdf.Close()# 关闭原始PdfDocument对象pdf.Close()# 调用split_pdf_by_page_count方法将PDF文件按照每3页拆分
split_pdf_by_page_count("心理健康.pdf", 3)

Python 将PDF按指定页数拆分为多个PDF

根据页码范围拆分PDF

除了按页数拆分 PDF 文件外,你还可以选择将指定页码范围内的页面提取为单独的文件。该方法的实现步骤与按指定页数拆分类似,此处不再赘述。

实现代码:

from spire.pdf.common import *
from spire.pdf import *# 提取PDF中指定页码范围内的页面并保存为新文件的方法
def split_pdf_by_page_range(input_file, start_page, end_page, output_file):# 创建PdfDocument对象并加载PDF文件pdf = PdfDocument()pdf.LoadFromFile(input_file)# 创建新的PdfDocument对象new_pdf = PdfDocument()# 将指定页码范围内的页面插入到新PDF文档中new_pdf.InsertPageRange(pdf, start_page, end_page)# 保存生成的文件new_pdf.SaveToFile(output_file)# 关闭PdfDocument对象pdf.Close()new_pdf.Close()# 调用split_pdf_by_page_range方法,从PDF文件中提取第1-3页并保存为新文件
split_pdf_by_page_range("心理健康.pdf", 0, 2, "拆分PDF/指定页码范围.pdf")

Python 根据指定页码范围拆分PDF

根据指定内容拆分PDF

在某些情况下,你可能需要根据特定关键字或短语拆分 PDF。这种方法可以提取包含特定内容的页面,便于整理相关信息。以下代码会查找 PDF 每一页上的文本,如果找到指定关键字,则将该页面添加到新 PDF 中:

from spire.pdf.common import *
from spire.pdf import *# 提取包含特定关键字的页面到新PDF中的方法 
def extract_pages_with_keyword(pdf_path, output_path, keyword):# 创建PdfDocument对象pdf = PdfDocument()# 加载PDF文件pdf.LoadFromFile(pdf_path)# 创建一个新的PdfDocument对象new_pdf = PdfDocument()# 遍历文档中的每一页for i in range(pdf.Pages.Count):page = pdf.Pages[i]# 创建PdfTextFinder实例finder = PdfTextFinder(page)# 定义文本查找参数finder.Options.Parameter = TextFindParameter.WholeWord# 查找特定文本results = finder.Find(keyword)# 如果找到了关键字if results:# 将当前页面添加到新文档中new_pdf.InsertPage(pdf, i)# 保存提取的结果文件new_pdf.SaveToFile(output_path)# 关闭PdfDocument对象new_pdf.Close()pdf.Close()# 调用extract_pages_with_keyword方法将PDF文件中包含特定关键字的页面保存为新文件
extract_pages_with_keyword("心理健康.pdf", "拆分PDF/含关键字页面.pdf", "问题")

PDF的一页拆分为多页

在某些情况下,你可能需要将 PDF 文档的某一页拆分为两页或多页。在拆分时,你可以选择将该页面横向或竖向拆分。横向拆分时,拆分后的文档的每个页面的宽度等于原始宽度的1/拆分总页数;竖向拆分时,拆分后的文档的每个页面的高度等于原始高度的1/拆分总页数。

以下代码展示了如何将PDF文档的指定页面竖向或横向拆分为两页:

from spire.pdf.common import *
from spire.pdf import *# 将指定PDF页面横向或竖向拆分为多页的方法
def split_specific_pdf_page(pdf_path, output_folder, page_index, num_pages, split_direction='vertical'):# 创建PdfDocument对象pdf = PdfDocument()# 加载PDF文件pdf.LoadFromFile(pdf_path)# 获取指定页面if page_index < 0 or page_index >= pdf.Pages.Count:print("错误:指定的页面索引超出范围。")returnpage = pdf.Pages[page_index]# 创建一个新的PdfDocument对象newPdf = PdfDocument()# 移除所有页面边距newPdf.PageSettings.Margins.All = 0.0# 根据拆分方向设置新PDF的页面尺寸if split_direction == 'vertical':newPdf.PageSettings.Width = page.Size.WidthnewPdf.PageSettings.Height = page.Size.Height / float(num_pages)elif split_direction == 'horizontal':newPdf.PageSettings.Height = page.Size.HeightnewPdf.PageSettings.Width = page.Size.Width / float(num_pages)else:print("错误:无效的拆分方向,请选择'vertical'或'horizontal'。")return# 向新PDF添加一页newPage = newPdf.Pages.Add()# 设置布局格式为自动分页format = PdfTextLayout()format.Break = PdfLayoutBreakType.FitPageformat.Layout = PdfLayoutType.Paginate# 绘制内容   page.CreateTemplate().Draw(newPage, PointF(0.0, 0.0), format)# 保存生成的文件newPdf.SaveToFile(f"{output_folder}/拆分第{page_index + 1}页.pdf")# 关闭PdfDocument对象newPdf.Close()pdf.Close()# 调用split_specific_pdf_page方法将PDF文件第1页竖向拆分为2页,0为当前页面的索引,2为拆分总页数
split_specific_pdf_page("心理健康.pdf", "拆分PDF", 0, 2, 'vertical')  
# # 或者将PDF文件第1页横向拆分为2页
# split_specific_pdf_page("心理健康.pdf", "拆分PDF", 0, 2, 'horizontal') 

以上就是使用Python实现拆分PDF文档的全部内容。感谢阅读!

相关文章:

Python PDF文件拆分-详解

目录 使用工具 将PDF按页数拆分 将PDF的每一页拆分为单独的文件 将PDF按指定页数拆分 根据页码范围拆分PDF 根据指定内容拆分PDF 将PDF的一页拆分为多页 在日常生活中&#xff0c;我们常常会遇到大型的PDF文件&#xff0c;这些文件可能难以发送、管理和查阅。将PDF拆分成…...

MacDroid for Mac v2.3 安卓手机文件传输助手 支持M、Intel芯片 4.7K

MacDroid 是Mac毒搜集到的一款安卓手机文件传输助手&#xff0c;在Mac和Android设备之间传输文件。您只需要将安卓手机使用 USB 连接到 Mac 电脑上即可将安卓设备挂载为本地磁盘&#xff0c;就像编辑mac磁盘上的文件一样编辑安卓设备上的文件&#xff0c;MacDroid支持所有 Andr…...

人大金仓国产数据库与PostgreSQL

一、简介 在前面项目中&#xff0c;我们使用若依前后端分离整合人大金仓&#xff0c;在后续开发过程中&#xff0c;我们经常因为各种”不适配“问题&#xff0c;但可以感觉得到大部分问题&#xff0c;将人大金仓视为postgreSQL就能去解决大部分问题。据了解&#xff0c;Kingba…...

阿里云 Qwen2.5-Max:超大规模 MoE 模型架构和性能评估

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 一、引言 Qwen2.5-Max 是阿里云通义千问团队研发的超大规模 Mixture-of-Expert(MoE)模型,旨在通…...

C++ 标准库容器的常用成员函数

目录 C 标准库容器简介 通用成员函数 1. 大小相关 size() empty() max_size() 2. 元素访问 operator[] at(size_t n) front() back() 3. 修改容器 push_back(const T& value) pop_back() clear() insert() erase() 4. 迭代器相关 begin() end() rbegi…...

MySQL双主搭建-5.7.35

文章目录 上传并安装MySQL 5.7.35双主复制的配置实例一&#xff1a;172.25.0.19&#xff1a;实例二&#xff1a;172.25.0.20&#xff1a; 配置复制用户在实例 1 &#xff08;172.25.0.19&#xff09;上执行&#xff1a;在实例 2 &#xff08;172.25.0.20&#xff09;上执行&…...

Uniapp开发微信小程序插件的一些心得

一、uniapp 开发微信小程序框架搭建 1. 通过 vue-cli 创建 uni-ap // nodejs使用18以上的版本 nvm use 18.14.1 // 安装vue-cli npm install -g vue/cli4 // 选择默认模版 vue create -p dcloudio/uni-preset-vue plugindemo // 运行 uniapp2wxpack-cli npx uniapp2wxpack --…...

Vscode通过Roo Cline接入Deepseek

文章目录 背景第一步、安装插件第二步、申请API key第三步、Vscode中配置第四步、Deepseek对话 背景 在前期介绍【IDEA通过Contince接入Deepseek】步骤和流程&#xff0c;那如何在vscode编译器中使用deepseek&#xff0c;记录下来&#xff0c;方便备查。 第一步、安装插件 在…...

不同规模企业如何精准选择AI工具: DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具深度剖析与对比

本文深入探讨了最近国内外主流的 DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具的技术细节、性能表现、应用场景及局限性&#xff0c;并从技术能力、功能需求、成本预算、数据安全和合规以及服务与支持五个关键维度&#xff0c;详细分析了不同规模企业在选择 AI 工具时的考量因素…...

如何有效判断与排查Java GC问题

目录 一、GC的重要性与对性能的影响 &#xff08;一&#xff09;GC对性能的影响简要分析 1.GC暂停与应用停顿 2.GC吞吐量与资源利用率 3.GC对内存管理的作用&#xff1a;资源回收 4.GC策略与优化的选择 &#xff08;二&#xff09;GC的双刃剑 二、GC性能评价标准 &…...

【笔记】用大预言模型构建专家系统

最近闲庭漫步&#xff0c;赏一赏各个AI大语言模型芳容。也趁着时间&#xff0c;把倪海夏一家的天纪和人纪视频看完了&#xff0c;感谢倪先生和现在网络的知识分享&#xff0c;受益匪浅。但是发现看完&#xff0c;很多不错的知识都不能记录在脑子里&#xff0c;那用的时候岂不是…...

Android SystemUI深度定制实战:下拉状态栏集成响铃功能开关全解析

一、功能实现全景视图 目标场景&#xff1a;在Android 14系统级ROM定制中&#xff0c;为SystemUI下拉状态栏的QuickQSPanel区域新增响铃模式切换开关&#xff0c;实现静音/响铃快速切换功能。该功能需通过三层关键改造实现&#xff1a; 二、核心实现三部曲 1. 配置注入&…...

【Python】基础语法三

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解Python的函数、列表和数组。 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff…...

[Computer Vision]实验六:视差估计

目录 一、实验内容 二、实验过程 2.1.1 test.py文件 2.1.2 test.py文件结果与分析 2.2.1 文件代码 2.2.2 结果与分析 一、实验内容 给定左右相机图片&#xff0c;估算图片的视差/深度&#xff1b;体现极线校正&#xff08;例如打印前后极线对&#xff09;、同名点匹配…...

【 开发知识点 一 】 随机数生成器 /dev/urandom 和 /dev/random

文章目录 一、随机数生成器 是什么 ?二、为什么 需要 随机数生成器 ?三、随机数生成器 基本原理四、随机数生成器 三个输出接口五、随机生成器 应用1、简单应用2、项目应用一、随机数生成器 是什么 ? /dev/random 和 /dev/urandom 是 Linux 上的字符设备文件,它们是随机数…...

LabVIEW虚拟弗兰克赫兹实验仪

随着信息技术的飞速发展&#xff0c;虚拟仿真技术已经成为教学和研究中不可或缺的工具。开发了一种基于LabVIEW平台开发的虚拟弗兰克赫兹实验仪&#xff0c;该系统不仅能模拟实验操作&#xff0c;还能实时绘制数据图形&#xff0c;极大地丰富了物理实验的教学内容和方式。 ​ …...

LLC谐振变换器恒压恒流双竞争闭环simulink仿真

1.模型简介 本仿真模型基于MATLAB/Simulink&#xff08;版本MATLAB 2017Ra&#xff09;软件。建议采用matlab2017 Ra及以上版本打开。&#xff08;若需要其他版本可联系代为转换&#xff09;针对全桥LLC拓扑&#xff0c;利用Matlab软件搭建模型&#xff0c;分别对轻载&#xf…...

TVbox蜂蜜影视:智能电视观影新选择,简洁界面与强大功能兼具

蜂蜜影视是一款基于猫影视开源项目 CatVodTVJarLoader 开发的智能电视软件&#xff0c;专为追求简洁与高效观影体验的用户设计。该软件从零开始编写&#xff0c;界面清爽&#xff0c;操作流畅&#xff0c;特别适合在智能电视上使用。其最大的亮点在于能够自动跳过失效的播放地址…...

Python 绘制迷宫游戏,自带最优解路线

1、需要安装pygame 2、上下左右移动&#xff0c;空格实现物体所在位置到终点的路线&#xff0c;会有虚线绘制。 import pygame import random import math# 迷宫单元格类 class Cell:def __init__(self, x, y):self.x xself.y yself.walls {top: True, right: True, botto…...

vue3学习-1(基础)

vue3学习-1&#xff08;基础&#xff09; 1. 开始API 风格选项式 API (Options API)组合式 API (Composition API) 快速创建个应用 2.基础1. 创建个应用2.模板语法3.响应式基础reactive() 的局限性[](https://cn.vuejs.org/guide/essentials/reactivity-fundamentals.html#limi…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩

目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...