python实现pdf双页文档转png图片,png图片裁剪为左右两等分,再合并为新的pdf单页文档

一、问题引入

现有pdf双页文档如下:
在这里插入图片描述
现按照以下页码次序对pdf双页文档进行裁剪和拼接,其中有两点需要特别注意,一是封面页只裁剪中间部分,二是文档是从右往左的顺序排版的
在这里插入图片描述

二、python程序

import os
import office
from PIL import Image
import img2pdf# 新建两个文件夹分别存储裁剪前和裁剪后的图片
def newfolders():for folder in ['images before cropping', 'images after cropping']:if os.path.isdir(folder) == False:os.mkdir(folder)# pdf双页文档转为多张png图片
def pdf_to_images(pdf_path):office.pdf.pdf2imgs(pdf_path=pdf_path, out_dir='images before cropping')# png图片批量裁剪为左右两等分
def images_cropping(pdf_name):images = os.listdir('images before cropping')images.sort(key=lambda x: int(x.replace(' [' + pdf_name.split('.')[0] + ']-', '').split('.')[0]))index = 0for image in images:image = Image.open('images before cropping/' + image)width, height = image.sizeitem_width = int(width / 2)item_height = int(height / 2)box_list = []if index == 0:box = (int(item_width / 2), 0, int(item_width * 3 / 2), height)box_list.append(box)else:for i in range(2):# box = (i * item_width, 0, (i + 1) * item_width, height)  # 从左往右box = (abs(i - 1) * item_width, 0, (abs(i - 1) + 1) * item_width, height)  # 从右往左box_list.append(box)image_list = [image.crop(box) for box in box_list]for j in range(len(image_list)):image_list[j].save('images after cropping/' + str(2 * index + 1 + j) + '.png', 'PNG')index += 1# 裁剪后的png图片合并为新的pdf单页文档
def images_to_pdf(pdf_name):images = os.listdir('images after cropping')images.sort(key=lambda x: int(x.split('.')[0]))images = ['images after cropping/' + i for i in images]with open('pdf/' + pdf_name, 'wb') as f:f.write(img2pdf.convert(images))if __name__ == '__main__':pdf_name = '名探偵コナン日本語版第100巻.pdf'new_pdf_name = '名侦探柯南日文版第100卷.pdf'pdf_path = 'pdf/' + pdf_namenewfolders()  # 新建两个文件夹分别存储裁剪前和裁剪后的图片pdf_to_images(pdf_path)  # pdf双页文档转为多张png图片images_cropping(pdf_name)  # png图片批量裁剪为左右两等分images_to_pdf(new_pdf_name)  # 裁剪后的png图片合并为新的pdf单页文档# 文档树:# │  main.py# │# ├─images after cropping# │      1.png# │      10.png# │      100.png# │      101.png# │      102.png# │      103.png#        ……# │      95.png# │      96.png# │      97.png# │      98.png# │      99.png# │# ├─images before cropping# │      [名探偵コナン日本語版第100巻]-0.jpg# │      [名探偵コナン日本語版第100巻]-1.jpg# │      [名探偵コナン日本語版第100巻]-10.jpg# │      [名探偵コナン日本語版第100巻]-100.jpg# │      [名探偵コナン日本語版第100巻]-11.jpg# │      [名探偵コナン日本語版第100巻]-12.jpg# │      [名探偵コナン日本語版第100巻]-13.jpg#        ……# │      [名探偵コナン日本語版第100巻]-95.jpg# │      [名探偵コナン日本語版第100巻]-96.jpg# │      [名探偵コナン日本語版第100巻]-97.jpg# │      [名探偵コナン日本語版第100巻]-98.jpg# │      [名探偵コナン日本語版第100巻]-99.jpg# │# └─pdf#        名侦探柯南日文版第100卷.pdf#        名探偵コナン日本語版第100巻.pdf

三、效果展示

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32G030F6 (SOP-20)Cortex ® -M0+, 32KB Flash, 8KB RAM, 17 GPIOs

淘宝淘了一批 STM32G030F6P6 SOP20.先备注一下, 还没想到能干嘛用. 手上的 STM32F103C6T6还剩一些. 一堆 “淘宝原厂STM32F103C8T6”, 还烫着手. 理解信息: ( 逐步补充 ) System Clock GPIOs GPIOs 17 PA[7:0] : 8bits USART Timer ADC I2…

Configuring HSRP(Hot Standby Routing Protocol)

文章目录 热备份路由协议(HSRP)HSRP(Hot Standby Routing Protocol)工作原理在思科路由器上配置HSRP1. 路由器配置2. 分配IP地址3. 配置HSRP4. 关键指令注释5. 验证配置是否生效6.HSRP抢占配置7.HSRP Group安全配置8.HSRP切换时间更改9.HSRP版本配置10.H…

App自动化测试持续集成效率提高50%

持续集成是一种开发实践,它倡导团队成员需要频繁的集成他们的工作,每次集成都通过自动化构建(包括编译、构建、自动化测试)来验证,从而尽快地发现集成中的错误。让正在开发的软件始终处于可工作状态,让产品…

SpringBoot 博客网站

SpringBoot 博客网站 系统功能 登录注册 博客列表展示 搜索 分类 个人中心 文章分类管理 我的文章管理 发布文章 开发环境和技术 开发语言:Java 使用框架: SpringBoot jpa H2 Spring Boot是一个用于构建Java应用程序的开源框架,它是Spring框架的一…

【sgTransfer】自定义组件:带有翻页、页码、分页器的穿梭框组件,支持大批量数据的穿梭显示。

特性&#xff1a; 表格宽度可以自定义翻页器显示控件可以自定义列配置项可以设置显示字段列名称、宽度、字段名可以配置搜索框提示文本&#xff0c;支持搜索过滤穿梭框顶部标题可以自定义左右箭头按钮文本可以设置 sgTransfer源码 <template><div :class"$opti…

【树形权限】树形列表权限互斥选择、el-tree设置禁用等等

文章目录 一、实现如上树形列表1.1 首先要就是渲染树形列表1.2 然后通过插槽处理头部标题1.3 再通过插槽处理表格body体内容1.4 让body体中的选框和表头中的选框产生关联 二、将 el-tree 整棵树设为禁用状态三、动态表格合并 需求&#xff1a;按照权限管理配置的数据权限树展开…

Vert.x 源码解析(4.x)(一)——Future源码解析

目录 1. 简介 在现代的软件开发中&#xff0c;异步编程已经变得非常重要。它可以提高应用程序的并发性能&#xff0c;使应用程序能够更有效地处理大量的并行操作。Vert.x 是一个面向事件驱动、非阻塞的异步编程框架&#xff0c;它提供了丰富的工具来简化异步编程的复杂性。 如…

解决windows下git操作提示用户名密码错误的问题

当代码从一个平台切换到另一个平台的时候&#xff0c;需要做两步操作&#xff0c;第一步就是更新git的仓库地址&#xff0c;在项目的.git/config文件里面修改&#xff0c;这一步做完之后&#xff0c;就可以推送代码到新的仓库了&#xff0c;这里就是重点来了。 一般第一次推动代…

JVM虚拟机对象探秘

对象的创建 Java是一门面向对象的编程语言&#xff0c;创建对象通常只是通过new关键字。 对象创建过程 当Java虚拟机遇到一条字节码new指令时&#xff0c;首先将去检查这个指令的参数是否能在常量池中定位到 一个类的符号引用&#xff0c;并且检查这个符号引用&#xff08;类…

如何设计微服务

一、序幕 最近在思考&#xff0c;自己哪些不足&#xff0c;需要学习点什么&#xff1f;看着Java基础知识&#xff0c;千遍一律&#xff0c;没有太大的动力需深挖&#xff0c;只能在写业务项目的时候边写边思考边夯实自己的基础。于是看了网上的一些资料&#xff0c;结合以前面试…

linux并发服务器 —— 多线程并发(六)

线程概述 同一个程序中的所有线程均会独立执行相同程序&#xff0c;且共享同一份全局内存区域&#xff1b; 进程是CPU分配资源的最小单位&#xff0c;线程是操作系统调度执行的最小单位&#xff1b; Linux环境下&#xff0c;线程的本质就是进程&#xff1b; ps -Lf pid&…

101序列检测器

本次所做设计&#xff0c;使用数字电路芯片实现的101序列检测器。电路图如下&#xff1a; 主要首先要根据需求画出状态转移方程&#xff0c;然后写出它的逻辑表达式。最后根据所选触发器种类确定电路图。序列由按键控制输入&#xff0c;按键按下&#xff0c;代表输入1 &#xf…

RT-Thread UART

UART 简介 UART&#xff08;Universal Asynchronous Receiver/Transmitter&#xff09;通用异步收发传输器&#xff0c;UART 作为异步串口通信协议的一种&#xff0c;工作原理是将传输数据的每个字符一位接一位地传输。是在应用程序开发过程中使用频率最高的数据总线。 UART …

Error: Cannot find module ‘timers/promises‘

这个错误很要命 他会导致你本机所有的npm 命令全部报错 首先 这个错误是因为 npm 与 node版本不匹配导致的 最简单的办法就是 查一下你安装的这个npm 的版本适配那个版本的 node 然后将本地的node删除 控制面板写在node 然后去官方文档现在与本地npm 匹配的node.js 这样 你执行…

【LeetCode-中等题】146. LRU 缓存

文章目录 题目方法一&#xff1a;直接继承LinkedHashMap调用api方法二&#xff1a;自定义LinkedHashMap HashMap ListNode LinkedHashMap 题目 LRU缓存是什么&#xff1a;LRU缓存机制&#xff0c;你想知道的这里都有 实现 LRU 缓存算法 方法一&#xff1a;直接继承Linked…

彻底学会Unity从网上加载资源到场景

使用类WWW 该类实例化的对象可以存储多种多媒体资源&#xff0c;只需要在构造函数中附上可访问的资源链接 Unity 中&#xff0c;WWW 类用于实例化互联网上的资源&#xff0c;如文本、图像、音频和视频等。WWW 实例化的对象可以存储多种多媒体素材。以下是一些常见的例子&…

固定资产卡片乱怎么管理

固定资产卡片是记录公司固定资产信息的重要工具&#xff0c;如果管理不善&#xff0c;容易造成卡片混乱、数据错误等问题。 为了避免这种情况的发生&#xff0c;可以采取以下措施&#xff1a;  建立完善的资产管理制度&#xff0c;明确固定资产的分类、标准和使用情况&#x…

C# 中什么是重写(子类改写父类方法)

方法重写是指在继承关系中&#xff0c;子类重新实现父类或基类的某个方法。这种方法允许子类根据需要修改或扩展父类或基类的方法功能。在面向对象编程中&#xff0c;方法重写是一种多态的表现形式&#xff0c;它使得子类可以根据不同的需求和场景提供不同的方法实现。 方法重…

热点探测技术架构设计与实践

1. 概述 说到热点问题&#xff0c;首先我们先理解一下什么是热点&#xff1f; 热点通常意义来说&#xff0c;是指在一段时间内&#xff0c;被广泛关注的物品或事件&#xff0c;例如微博热搜&#xff0c;热卖商品&#xff0c;热点新闻&#xff0c;明星直播等等&#xff0c;所以…

You must install at least one postgresql-client-<version> package

使用主机上的映射端口来连接到 PostgreSQL 数据库。例如&#xff0c;使用以下命令连接到数据库&#xff1a; psql -h localhost -p 5432 -U postgres出现下面的问题&#xff1a; 分析&#xff1a; 如果您在运行 psql 命令时遇到错误消息 You must install at least one pos…