将PDF1页分割为4页

news2024/11/28 16:52:24

运行效果

原始PDF

分割后PDF

 一、python代码(用的是python3.9.0版本)

import os
import tempfile
from pdf2image import convert_from_path
from PIL import Image
from PyPDF2 import PdfReader, PdfWriter

def split_pdf_page(pdf_path, output_path):
    # Convert PDF to images
    images = convert_from_path(pdf_path)

    # Create a PdfWriter object for the output PDF
    output_pdf = PdfWriter()

    # Create a list to store the parts of all images
    img_parts_all = []

    for img in images:
        # Split the image into 4 parts
        width, height = img.size
        img_parts = [
            img.crop((0, 0, width // 2, height // 2)),  # Top left
            img.crop((width // 2, 0, width, height // 2)),  # Top right
            img.crop((0, height // 2, width // 2, height)),  # Bottom left
            img.crop((width // 2, height // 2, width, height)),  # Bottom right
        ]

        # Append the parts of this image to the list
        img_parts_all.extend(img_parts)

    # Convert each image part back to PDF and add it to the output PDF
    for img_part in img_parts_all:
        fd, temp_filename = tempfile.mkstemp(suffix=".pdf")  # Create a new temp file
        os.close(fd)  # Close the file descriptor, we only need the filename
        img_part.save(temp_filename, "PDF")  # Save the PIL Image as a PDF
        pdf = PdfReader(temp_filename)  # Load the PDF file
        output_pdf.add_page(pdf.pages[0])  # Add the page to the output PDF
        os.remove(temp_filename)  # Remove the temp file

    # Write the output PDF to a file
    with open(output_path, "wb") as f:
        output_pdf.write(f)

# Test the function
split_pdf_page("input.pdf", "output.pdf")

默认是脚本文件与input.pdf放在一个文件夹目录内 

二、代码解释

  1. 首先,我们使用convert_from_path函数从pdf2image库将PDF文件转换为图像,这样我们就可以使用Python的图像处理库PIL处理这些图像了。

  2. 然后,我们创建一个PdfWriter对象,它将被用于生成新的PDF文件。

  3. for img in images:循环中,我们处理从PDF文件中提取出的每一张图像:

    • 首先,我们使用img.size获取图像的尺寸(宽度和高度)。
    • 然后,我们使用img.crop函数将图像分割为四部分。这个函数需要一个四元组作为参数,这个四元组表示一个矩形区域:(left, upper, right, lower),它们分别表示矩形左边,上边,右边,和下边的坐标。
    • 我们将这四部分图像存储在img_parts列表中,并使用img_parts_all.extend(img_parts)将这个列表添加到img_parts_all中。
  4. for img_part in img_parts_all:循环中,我们将每一部分图像转换回PDF,并添加到输出PDF中:

    • 使用tempfile.mkstemp函数创建一个新的临时文件,这个函数会返回一个文件描述符和文件的路径。我们只需要文件的路径,所以立即关闭了文件描述符。
    • 使用img_part.save函数将PIL图像保存为PDF格式。
    • 使用PdfReader从临时文件中读取PDF文件,然后使用output_pdf.add_page将PDF文件的第一页(也是唯一的一页)添加到输出PDF中。
    • 最后,我们使用os.remove删除临时文件。
  5. 最后,我们将输出PDF写入文件。

需要注意的是,我们假设了输入PDF的每一页都可以等分为四个部分。如果有些页的尺寸不符合这个假设,可能需要对代码进行一些修改。

三、代码运行准备

首先安装python库:PyPDF2pdf2image、Pillow

pip install PyPDF2 pdf2image Pillow

另外,pdf2image库需要使用到poppler-utils

在Ubuntu系统下,你可以使用以下命令安装:

sudo apt-get install -y poppler-utils

在windows系统下

  1. 首先,从这个页面下载Poppler for Windows的二进制文件。你应该下载最新版本的文件。

  2. 下载后,你需要解压下载的文件。解压到你喜欢的任何位置,例如C:\poppler

  3. 接下来,你需要将Poppler的二进制文件添加到你的系统路径中。这样Python就可以在任何地方访问它。右击“计算机”->选择“属性”->点击“高级系统设置”->点击“环境变量”->在“系统变量”下找到“Path”并点击“编辑”->在变量值的最后输入你刚刚解压Poppler的位置,并在前后添加分号;。例如,如果你将其解压到C:\poppler,那么你应该添加C:\poppler\bin

  4. 最后,你需要重新启动你的命令行界面,以使这些改变生效。

安装完毕,到文件夹目录下打开命令行界面使用:

python script.py

即可运行该python文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4G开发板-安卓手机开发套件-MTK主板开发板定制

开发板是一种用于嵌入式系统开发的电路板,它包含了各种硬件组件,如中央处理器、存储器、输入设备、输出设备、数据通路/总线以及外部资源接口等。为了满足特定的开发需求,嵌入式系统开发者通常会根据项目要求来定制开发板,当然用户…

2023年前端面试高频考点ES6

目录 ES6新增 数据类型 基本数据类型 引用数据类型 Null,NaN,Undefined toString,valueOf ,,Object.is() 判断数据类型:typeof运算符,instance of运算符,isPrototypeOf() 方…

数据分析第11课pandas时间序列(上+下)-第12期15,16课

数据分析思维:有逻辑性, 课前练习1 各大平台相继推出和迭代付费会员策略,如优酷会员、京东PLUS会员、网易云音乐黑胶VIP等,通过提供丰富的权益吸引用户成为付 费会员,提升用户黏性和忠诚度。请围绕付费会员回答以下问题: 以网易云音乐黑胶VIP为例,运营同学希望推出活动…

k8s 使用helm安装longhorn存储控制器

1.安装helm 参考:k8s helm安装使用_Apex Predator的博客-CSDN博客 2.配置基础环境 安装longhorn存储控制器需要用到iSCSI工具,所以需要在k8s所有节点上安装 yum -y install iscsi-initiator-utils 3.安装longhorn 3.1配置helm镜像源 helm repo ad…

kafka Ar 、ISR 、 OSR 已分配副本 同步中副本 、不同步副本 Controller 执行leader 重新分配

目录 Ar 、ISR 、 OSR 已分配副本 同步中副本 、不同步副本 Controller 执行leader 重新分配 Ar 、ISR 、 OSR 已分配副本 同步中副本 、不同步副本 AR分区所有已分配副本 ISR 在同步中的副本OSR 不同步副本 如果有一个节点挂掉,分区领导会渠道其他地方当上领导…

Git的理解以及在IDEA中的使用

什么是版本控制 版本控制是指记录一段时间内对一个文件或一组文件的更改的系统,称为“版本”。换句话说,这些版本将帮助您跟踪代码/项目中的更改,如果需要,还可以撤消这些更改。 当处理较大的项目时,这种能够比较、区…

“RAID0 vs RAID1 vs RAID5 vs RAID6 vs RAID10:哪种RAID级别最适合你的需求?“

概要: RAID(Redundant Array of Independent Disks)是一种数据存储技术,可以将多个硬盘组合起来以提高性能、可靠性和容错能力。下面是几种常见的RAID级别,以及它们的用途和特点。 目录 RAID 0RAID 1RAID 5RAID 6RAID…

navicat 怎么导入运行bak文件,详细教程

文章目录 一、新建数据库,点击高级设置访问权限二、点击SQL Server备份三、右击空白,点击从文件还原四、找到备份的bak文件五、 点击“高级”选项六、然后点击 生产SQL,最后点 还原 一、新建数据库,点击高级设置访问权限 二、点击…

Opencv-python 将图片中某段HSV范围内的所有像素去除,用白色替换

文章目录 前言一、效果二、代码1.思路2.代码解释 总结 前言 本次实验要求将模拟飞行座舱图像中的HUD绿色字体去掉,并且用白色来替代,最终输出没有绿色字体的图片,用于下一步的某种图像算法的输入。 一、效果 二、代码 1.思路 将一张图片中的…

经验教训:微服务设计时的五条宝贵经验

微服务架构的新挑战 在著名软件著作《人月神话》中提到,软件世界没有“银弹”,这句话当然适用于架构领域,随着从单体架构过渡到微服务架构,因为将原有系统打散,给系统增加了许多不稳定因素。 单体架构向微服务架构转变…

【服务器数据恢复】断电导致RAID无法找到存储设备的数据恢复案例

服务器数据恢复环境: HP EVA存储,6块SAS硬盘组建的raid5磁盘阵列。上层操作系统是WINDOWS SERVER。该存储为公司内部文件服务器使用。 服务器故障&分析: 在遭遇两次意外断电后,设备重启时raid提示“无法找到存储设备”。管理员…

值得推荐收藏的 9个免费PDF转PPT的方法

随着现在工作和学习越来越多涉及到电子文件,PDF格式已经成为了一种非常重要的文件格式。但有时候需要将PDF文件转换为PPT格式,因为PPT格式更适合用于演示和公开演讲等场合。而转换PDF文件到PPT格式则需要使用专用工具。以下是9个免费的PDF转PPT的方法介绍…

蓝牙耳机都能打电话吗,分享几款通话效果不错的骨传导耳机

骨传导耳机的兴起是近几年来才出现的新概念,骨传导耳机也是近几年来才开始流行起来,在我看来骨传导耳机的兴起是科技进步的产物。随着蓝牙耳机技术和设备的发展,蓝牙耳机也越来越普及,但是也给用户带来了很多困扰。而骨传导耳机就…

好用的电容笔有哪些推荐?性价比高的触控笔

电容笔的选购对新手来说难度很大,看到网友们都在讨论电容笔什么牌子的好用,电容笔怎么挑选?小编今天也来详细解答这个问题,盘点四款好用的平价电容笔,如果你想知道性价比高电容笔推荐哪些,那这篇文章一定不…

什么是 Vue 的片段(Fragment)?如何使用片段?

什么是 Vue 的片段(Fragment)?如何使用片段? 在 Vue 2.6.0 版本中,新增了一个特性:片段(Fragment)。片段是一种特殊的组件,可以让开发者在不增加额外节点的情况下渲染多…

2023年第二届计算与人工智能国际会议(ISCAI 2023)

会议简介 Brief Introduction 2023年第二届计算与人工智能国际会议(ISCAI 2023) 会议时间:2023年10月13 -15日 召开地点:中国上海 大会官网:www.iscai.org 2023年第二届计算与人工智能国际会议(ISCAI 2023)将围绕“计算与人工智能”的最新研究…

ETC人车关系查询-ETC人车关系查询api接口

接口地址: https://登录后显示/api/189/363(支持:http/https)) 接口页面:https://www.wapi.cn/api_detail/189/363.html 网站地址:https://www.wapi.cn 接口简介:核验指定人员/企业是否是指定车辆的 ETC 开户人、车辆所有人或 E…

【c/c++】属于程序员的浪漫,基于easyx.h图形库实现3D Heart

文章目录 😏专栏导读🤖文章导读🙀一、easyX图形库基本介绍?1、easyX的原理:2、easyX的安装🙀3D Heat源码描述 😳3D Heat效果展示总结 😏专栏导读 👻作者简介:…

ssm+java汽车销售分析与管理系统

此次设计一款汽车销售分析与管理系统,能够对当前销售的车辆的日销售、季度销售以及年度销售进行统计分析、对于车辆的入库出库进行了准确的信息录入。对于销售人员的销售情况进行登记和统计,能够对整个店面的财务情况、盈利情况进行统计。同时对于以上数…

精选|Dubbo异步化实践

1 背景 从Apach Dubbo的官网了解到从 2.7.0 版本开始,Dubbo 的所有异步编程接口开始以CompletableFuture为基础,Dubbo接口异步化能够极大地提高接口性能,降低接口依赖调用之间的阻塞,同时了解到我们公司大部分应用使用的是同步rp…