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

一、问题引入

现有pdf双页文档如下:

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

二、python程序

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 = 0
    for image in images:
        image = Image.open('images before cropping/' + image)
        width, height = image.size
        item_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_name
    newfolders()  # 新建两个文件夹分别存储裁剪前和裁剪后的图片
    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

三、效果展示

相关推荐
特立独行的猫A3 小时前
我给女儿写了个打字练习:一边敲键盘,一边把小学英语单词记牢
java·后端·python
cpolar技术支持3 小时前
「我这边连不上你那个服务」—— 用清单驱动的 TCP 连通性只读看板,cpolar 让远端同事自己取证
python·内网穿透·tcp·cpolar·网络诊断
云和数据.ChenGuang4 小时前
LangGraph 异步 Node 的设计与写法实践
开发语言·人工智能·python·机器学习·php
天诰5 小时前
SA-K-11 检索会消失吗与四个未解问题
java·服务器·人工智能·python·机器学习·ai编程
benchmark_cc6 小时前
用 QuantDash 读取美股行情:AAPL.US 的运行前检查、排错顺序与数据校验清单
python·数据分析·pandas·量化交易·股票数据·quantdash
羲云网络9 小时前
GPT Image 2.6 接入指南:Flare、Sunburst 怎么选,编辑失败如何排查
人工智能·python·aigc·图像生成·acedatacloud
橙橙笔记12 小时前
具身智能的学习 - 完成一个机械臂 第1节
python·学习·机械臂·具身智能
小小张说故事13 小时前
Python 的 class 语句到底执行了什么?拆开 __prepare__、metaclass.__new__ 和那个被讲反的 __set_name__ 顺序
python
天天被压力15 小时前
【A股分钟级高频数据完全手册 #07】北交所历史分钟K线接口:京市Pro版分时批量
java·人工智能·python
天天被压力15 小时前
【A股分钟级高频数据完全手册 #08】股票日、分时数据接口对比:普通分时与Pro版差异实测
java·人工智能·python