合并文件夹下的所有图片为pdf, 一个文件夹一个pdf文件

该博客介绍如何将一个包含多个子目录的文件夹中所有的图片合并成PDF,每个子目录的图片生成一个独立的PDF文件,PDF名称与对应子目录同名。

合成一个文件夹下的所有图片为pdf

from PIL import Image
import os
from PIL import ImageFile
# image file is truncated错误解决
ImageFile.LOAD_TRUNCATED_IMAGES = True

def combine_imgs_pdf(folder_path, pdf_file_path):
    """
    合成一个文件夹下的所有图片为pdf
    Args:
        folder_path (str): 源文件夹
        pdf_file_path (str): 输出路径
    """
    files = os.listdir(folder_path)
    png_files = []
    sources = []
    for file in files:
        if 'png' in file or 'jpg' in file:
            # 文件大小>10k 的图片才进入pdf
            if os.path.getsize(os.path.join(folder_path, file)) > 10000:
                png_files.append(os.path.join(folder_path, file))
    png_files.sort()
    output = Image.open(png_files[0])
    png_files.pop(0)
    for file in png_files:
        png_file = Image.open(file)
        if png_file.mode == "RGB":
            png_file = png_file.convert("RGB")
        sources.append(png_file)
    output.save(pdf_file_path, "pdf", save_all=True, append_images=sources)
    
if __name__ == "__main__":
    folder = r"D:\folder"
    pdfFile = r"D:\out.pdf"
    combine_imgs_pdf(folder, pdfFile)

一个目录下有多个目录, 每个子目录下有图片, 一个文件夹一个pdf文件, pdf文件名字为文件夹的名字

from PIL import Image
import os
from PIL import ImageFile
# image file is truncated错误解决
ImageFile.LOAD_TRUNCATED_IMAGES = True
"""
合并文件夹下的所有图片为pdf, 一个文件夹一个pdf文件, pdf文件名字为文件夹的名字
"""

def combine_imgs_pdf(folder_path, pdf_file_path):
    """
    合成一个文件夹下的所有图片为pdf
    Args:
        folder_path (str): 源文件夹
        pdf_file_path (str): 输出路径
    """
    files = os.listdir(folder_path)
    img_file= []
    sources = []
    for file in files:
        if 'png' in file or 'jpg' in file:
            # 文件大小>10k 的图片才进入pdf
            if os.path.getsize(os.path.join(folder_path, file)) > 10000:
                img_files.append(os.path.join(folder_path, file))
    img_files.sort()
    output = Image.open(img_files[0])
    if output.mode != "RGB":
        output = output.convert("RGB")
    img_files.pop(0)
    for file in img_files:
        img_file= Image.open(file)
        if img_file.mode != "RGB":
            img_file= img_file.convert("RGB")
        sources.append(img_file)
    output.save(pdf_file_path, "pdf", save_all=True, append_images=sources)


def create_book_pdf(book_folder, out_base_path):
    # 获取指定目录下的所有子目录
    out_folder = os.path.splitext(os.path.basename(book_folder))[0]
    folders = [f for f in os.listdir(book_folder) if os.path.isdir(os.path.join(book_folder, f))]
    # 循环每个目录, 生成一个pdf文件
    for folder_name in folders:
        image_folder = os.path.join(book_folder, folder_name)
        out_folder = os.path.join(out_base_path, out_folder)
        # 如果outpath中目录不存在, 就创建一个
        if not os.path.exists(out_folder):
            os.makedirs(os.path.join(out_base_path, out_folder))
        pdfFile = os.path.join(out_folder, f"{folder_name}.pdf")
        if not os.path.exists(pdfFile):
            try:
                combine_imgs_pdf(image_folder, pdfFile)
            except:
                print(f"{image_folder}->{pdfFile} 失败")

    print("完成")


if __name__ == "__main__":
    create_book_pdf("F:/img_book/book1", "f:/pdf_book")

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值