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

Python拆分PDF、Python合并PDF

WPS能拆分合并,但却是要输入编辑密码,我没有。故写了个脚本来做拆分,顺便附上合并的代码。

代码如下(extract.py)

#!/usr/bin/env python
"""PDF拆分脚本(需要Python3.10+)Usage::$ python extract.py <pdf-file>
"""
import os
import sys
from pathlib import Path# pip install PyMuPDF
import fitz  # type:ignore[import-untyped]SRC_FILE = Path.home() / "Downloads" / "yasi.pdf"def new_one(pdf: fitz.Document, page_num: int, parent: Path | None = None) -> Path:target = Path(f"{page_num}.pdf")if parent is not None:target = parent / target.namenew_pdf = fitz.Document()# 用第page_num页生成新的PDF文件index = page_num - 1new_pdf.insert_pdf(pdf, from_page=index, to_page=index)new_pdf.save(target)return targetdef extract(file: Path,num: int | None = None,
) -> Path:"""拆分PDF:param file: 文件路径:param num: 要拆分出哪一页,如果传None或不传,则每一页都拆分出来"""with fitz.open(file) as f:if num is None:folder = Path(file.stem)if not folder.exists():print(f"Directory {folder} created!")folder.mkdir()print(f"Total pages of {file} is {f.page_count}.")for num in range(1, f.page_count + 1):new_one(f, num, folder)return folderelse:return new_one(f, num)def main() -> None:file = SRC_FILEpage_num: int | None = Noneif sys.argv[1:]:if (a := sys.argv[1]).isdigit():page_num = int(a)elif (_p := Path(a)).is_file():file = _pif sys.argv[2:] and sys.argv[2].isdigit():page_num = int(sys.argv[2])elif _p.suffix.lower() == ".pdf":print(f"文件`{_p}`不存在!")elif not file.exists():while True:a = input("请输入要拆分的PDF文件路径:").strip()if "~" in a:a = os.path.expanduser(a)if (_p := Path(a)).is_file():file = _pbreakelse:print(f"文件{_p}不存在,请重新输入。\n")dst = extract(file, page_num)if dst.is_file():print(f"Save file to {dst}")else:print(f"Save files to {dst}{os.sep}")if __name__ == "__main__":  # pragma: no covermain()

合并的代码如下:

from pathlib import Pathimport fitzdef merge(*files: str, new_name: str | None = None, verbose=True) -> Path:ps = [Path(i) for i in files]if new_name is None:new_name = '_'.join(i.stem for i in ps) + '.pdf'target = Path(new_name)new_pdf = fitz.Document()for p in ps:with fitz.open(p) as f:new_pdf.insert_pdf(f)new_pdf.save(target)if verbose:print(f'Save file to {target}')return targetmerge('1.pdf', '2.pdf')

相关文章:

Python拆分PDF、Python合并PDF

WPS能拆分合并&#xff0c;但却是要输入编辑密码&#xff0c;我没有。故写了个脚本来做拆分&#xff0c;顺便附上合并的代码。 代码如下&#xff08;extract.py) #!/usr/bin/env python """PDF拆分脚本(需要Python3.10)Usage::$ python extract.py <pdf-fil…...

SqlServer(4)经典总结大全-技巧总结-数据开发-基本函数-常识整理-经典面试题

六、技巧 1、11&#xff0c;12的使用&#xff0c;在SQL语句组合时用的较多 “where 11” 是表示选择全部 “where 12”全部不选&#xff0c; 如&#xff1a; if strWhere !‘’ begin set strSQL ‘select count(*) as Total from [’ tblName ] where ’ strWhere …...

ArcGIS矢量裁剪矢量

一、利用相交工具 Arctoolbox工具一分析工具一叠加分析一相交...

pygame用chatgpt绘制3d沿x轴旋转的

import pygame from pygame.locals import * import sys import mathpygame.init()width, height 800, 600 screen pygame.display.set_mode((width, height))vertices [(0, 100, 0), (100, 200, 0), (300, 100, 0)]angle 0 rotation_speed 2 # 可根据需要调整旋转速度 c…...

golang大小写规则的影响

目录 golang大小写的规则&#xff1a; 1、可见性&#xff08;visibility&#xff09;&#xff1a; 2、包的导入和调用&#xff1a; 3、json序列化和反序列化&#xff1a; 4、结构体字段的导出和可见性&#xff1a; 5、方法和函数的导出和可见性 &#xff1a; 6、常量和变…...

基于Java在线考试系统系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…...

如何应对复杂软件工程的开发流程?

应对复杂软件工程的开发流程通常需要一个结构化和系统化的方法。这种方法不仅包括采用合适的技术和工具&#xff0c;还涉及到项目管理、团队协作、需求分析、设计、实施、测试、部署和维护等多个方面。以下是一些关键步骤&#xff0c;以及如何将这些步骤应用于使用LabVIEW进行软…...

JAVA的NIO和BIO底层原理分析

文章目录 一、操作系统底层IO原理1. 简介2. 操作系统进行IO的流程 二、BIO底层原理1. 什么是Socket2. JDK原生编程的BIO 三、Java原生编程的NIO1. 简介2. NIO和BIO的主要区别3. Reactor模式4. NIO的三大核心组件5. NIO核心源码分析 一、操作系统底层IO原理 1. 简介 IO&#x…...

Python学习从0到1 day18 Python可视化基础综合案例 1.折线图

我默记这段路的酸楚&#xff0c;等来年春暖花开之时再赏心阅读 —— 24.3.24 python基础综合案例 数据可视化 — 折线图可视化 一、折线图案例 1.json数据格式 2.pyecharts模块介绍 3.pyecharts快速入门 4.数据处理 5.创建折线图 1.json数据格式 1.什么是json 2.掌握如何使用js…...

HTML网站的概念

目录 前言&#xff1a; 1.什么是网页&#xff1a; 2.什么是网站&#xff1a; 示例&#xff1a; 3.服务器&#xff1a; 总结&#xff1a; 前言&#xff1a; HTML也称Hyper Text Markup Language&#xff0c;意思是超文本标记语言&#xff0c;同时HTML也是前端的基础&…...

【微服务】Nacos(配置中心)

文章目录 1.AP和CP1.基本介绍2.说明 2.Nacos配置中心实例1.架构图2.在Nacos Server加入配置1.配置列表&#xff0c;加号2.加入配置3.点击发布&#xff0c;然后返回4.还可以编辑 3. 创建 Nacos 配置客户端模块获取配置中心信息1.创建子模块 e-commerce-nacos-config-client50002…...

比较AI编程工具Copilot、Tabnine、Codeium和CodeWhisperer

主流的几个AI智能编程代码助手包括Github Copilot、Codeium、Tabnine、Replit Ghostwriter和Amazon CodeWhisperer。 你可能已经尝试过其中的一些&#xff0c;也可能还在不断寻找最适合自己或公司使用的编程助手。但是&#xff0c;这些产品都会使用精选代码示例来实现自我宣传…...

顺应互联网发展大潮流,红河农资招商火爆开启

顺应互联网发展大潮流&#xff0c;红河农资招商火爆开启 进入新世纪&#xff0c;生态农业建设成为了影响和改变农村、农业工作的重要领域。尤其是在互联网的快速发展之下&#xff0c;实现农业结构调整&#xff0c;推动互联网模式的发展&#xff0c;成为了当前生态农业发展的主流…...

网络七层模型之传输层:理解网络通信的架构(四)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

微信小程序实现图片懒加载的4种方案

实现图片懒加载的意义 实现图片懒加载可以提高小程序的性能和用户体验&#xff0c;是微信小程序开发中非常重要的一项优化手段。微信小程序实现图片懒加载的目的主要有以下几点&#xff1a; 提高页面加载速度&#xff1a;图片通常是页面中最耗时的资源&#xff0c;如果一次性…...

各大pdf转word软件都用的哪家的ocr引擎?

国内一般的PDF软件一般都调用某国际PDF原厂的OCR接口&#xff0c;但这家公司是主要做PDF&#xff0c;在OCR方面并不专注&#xff0c;一些不是很复杂的场景还能应付得过来&#xff0c;复杂一点的效果就强差人意了&#xff0c;推荐用金鸣表格文字识别系统&#xff0c;它主要有以下…...

学习没有速成可言

那些声称几天就能让你精通软件的书籍&#xff0c;往往是夸大其词的宣传。学习软件需要时间和实践&#xff0c;没有什么快速的捷径可以让你在短时间内成为专家。 对于速成软件书&#xff0c;我个人持保留态度。它们可能提供一些基础知识和技巧&#xff0c;可以给初学者一个入门…...

快速上手Pytrch爬虫之爬取某应图片壁纸

一、前置知识 1 爬虫简介 网络爬虫&#xff08;又被称作网络蜘蛛、网络机器人&#xff0c;在某些社区中也经常被称为网页追逐者)可以按照指定的规则&#xff08;网络爬虫的算法&#xff09;自动浏览或抓取网络中的信息。 1.1 Web网页存在方式 表层网页指的是不需要提交表单&…...

如何在Apache Arrow中定位与解决问题

如何在apache Arrow定位与解决问题 最近在执行sql时做了一些batch变更&#xff0c;出现了一个 crash问题&#xff0c;底层使用了apache arrow来实现。本节将会从0开始讲解如何调试STL源码crash问题&#xff0c;在这篇文章中以实际工作中resize导致crash为例&#xff0c;引出如何…...

[ Linux ] git工具的基本使用(仓库的构建,提交)

1.安装git yum install -y git 2.打开Gitee&#xff0c;创建你的远程仓库&#xff0c;根据提示初始化本地仓库&#xff08;这里以我的仓库为例&#xff09; 新建好仓库之后跟着网页的提示初始化便可以了 3.add、commit、push三板斧 git add . //add仓库新增&#xff08;变…...

怎样去保证 Redis 缓存与数据库双写一致性?

解决方案 那么我们这里列出来所有策略&#xff0c;并且讨论他们优劣性。 先更新数据库&#xff0c;后更新缓存先更新数据库&#xff0c;后删除缓存先更新缓存&#xff0c;后更新数据库先删除缓存&#xff0c;后更新数据库 先更新数据库&#xff0c;后更新缓存 这种方法是不推…...

RuoYi-Vue若依框架-新增子模块启动后,前端页面报接口404

如何新建子模块可以参考RuoYi-Vue若依框架-如何新增子模块 我在新增依赖的时候提过版本号的问题&#xff0c;如果不是按照我的博客走的&#xff0c;然后接口报了404&#xff0c;可以选择添加父版本号&#xff0c;官方的参考文档是没写的&#xff0c;但添加了确实能解决这个问题…...

node.js 常见命令

1. npm init: 初始化一个新的Node.js项目&#xff0c;创建一个package.json文件。 2. npm install: 安装项目所需的所有依赖项。 3. npm run: 运行在package.json文件中定义的脚本。 4. node index.js: 运行一个Node.js文件。 5. node -v: 查看当前安装的Node.js版本号。 6. np…...

教育信创,重磅发布!Coremail联合飞腾发布全场景教育信创白皮书

3月28日&#xff0c;Coremail参与编制的《教育行业数字化自主创新 飞腾生态解决方案白皮书》正式发布。白皮书历时一年&#xff0c;由25所代表院校、66位专家&#xff0c;119家生态伙伴共同编写。 本次白皮书围绕教育数字化转型和信创人才培养两大领域&#xff0c;聚焦办公、教…...

滑动窗口_水果成篮_C++

题目&#xff1a; 题目解析&#xff1a; fruits[i]表示第i棵树&#xff0c;这个fruits[i]所表示的数字是果树的种类例如示例1中的[1,2,1]&#xff0c;表示第一棵树 的种类是 1&#xff0c;第二个树的种类是2 第三个树的种类是1随后每一个篮子只能装一种类型的水果&#xff0c;我…...

线程的状态:操作系统层面和JVM层面

在操作系统层面&#xff0c;线程有五种状态 初始状态&#xff1a;线程被创建&#xff0c;操作系统为其分配资源。 可运行状态(就绪状态)&#xff1a;线程被创建完成&#xff0c;进入就绪队列&#xff0c;参与CPU执行权的争夺。或因为一些原因&#xff0c;从阻塞状态唤醒的线程…...

在Isaac-sim中弧度转四元数以及四元数转弧度的问题

问题&#xff1a; 在Isaac-sim中如果采用set_world_pose()和get_world_pose()得到的都是四元数&#xff0c;如何将弧度转四元数&#xff0c;或者将四元数转为弧度是需要解决的一个问题&#xff0c; 这里的弧度是以x轴为0度&#xff0c;y轴为90度&#xff0c;逆时针方向逐渐增大…...

【计算机网络】高级IO模型

高级IO模型 一、 理解 IO二、认识五种高级 IO 模型1. 阻塞 IO2. 非阻塞IO3. 信号驱动 IO4. IO 多路转接5. 异步 IO 三、高级 IO 重要概念1. 阻塞和非阻塞2. 同步通信和异步通信 四、非阻塞 IOfcntl 一、 理解 IO 当我们调用系统接口 write、read 的时候&#xff0c;本质是把数…...

LabVIEW电动汽车直流充电桩监控系统

LabVIEW电动汽车直流充电桩监控系统 随着电动汽车的普及&#xff0c;充电桩的安全运行成为重要议题。通过集成传感器监测、单片机技术与LabVIEW开发平台&#xff0c;设计了一套电动汽车直流充电桩监控系统&#xff0c;能实时监测充电桩的温度、电压和电流&#xff0c;并进行数…...

前端学习<二>CSS基础——08-CSS属性:定位属性

CSS的定位属性有三种&#xff0c;分别是绝对定位、相对定位、固定定位。 position: absolute; <!-- 绝对定位 -->​position: relative; <!-- 相对定位 -->​position: fixed; <!-- 固定定位 -->​ 下面逐一介绍。 相对定位 相对定位&#xff1a;让…...

沈阳市住房和城乡建设厅网站/上海互联网管理系统推广公司

OSPF&#xff08;Open Shorterst Path First&#xff09;是一种根据OSI的IS-IS协议提出来的一种链路状态型路由协议。它是IGP协议的一种。由于采用最小生成树算法&#xff0c;因此不会产生回路。另外&#xff0c;OSPF支持可变长子网掩码。但这种链路状态型路由协议也有其问题&a…...

网站的功能包括哪些/搜索网络如何制造

2019独角兽企业重金招聘Python工程师标准>>> 1 下载所需要的jdk和maven版本上传到服务器&#xff08;ftp&#xff09; &#xff08;chmod x 设置权限 变绿代码有权限了&#xff09; 2 安装jdk&#xff0c;配置环境变量&#xff0c;安装maven&#xff0c;配置环境变量…...

不买服务器做网站/seo搜索引擎优化步骤

转载&#xff1a;http://www.cnblogs.com/duanxz/p/3511695.html java类中serialversionuid 作用 是什么?举个例子说明 serialVersionUID适用于Java的序列化机制。简单来说&#xff0c;Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时&a…...

anew wordpress 下载/小红书关键词排名

引言 ExtAspNet 是一组基于 ExtJS 的专业 ASP.NET 2.0 控件库&#xff0c;从第一次发布至今已经有超过 3 年的时间&#xff0c;版本也大大小小发了 80 多个。 今天想弄一个查看发布周期总体趋势的图表来&#xff0c;其实这个想法来自有 3 方面知识的碰撞&#xff1a; ExtAspNet…...

保定官网优化技巧/东莞优化排名推广

在项目的开发中&#xff0c;我们经常需要用到树形栏&#xff0c;而搭建树形需要用到树形插件&#xff0c;下面是我所搭建的树形 引用需要的树形插件&#xff0c;如 <link href"~/Content/bootstrap-3.3.7-dist/css/bootstrap-treeview.css" rel"stylesheet&…...

现在疫情可以去广州吗/杭州百家号优化

Option类型 使用Option类型&#xff0c;可以用来有效避免空引用(null)异常。也就是说&#xff0c;将来我们返回某些数据时&#xff0c;可以返回一个Option类型来替代。 定义 scala中&#xff0c;Option类型来表示可选值。这种类型的数据有两种形式&#xff1a; Some(x)&#xf…...