吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 870|回复: 7
收起左侧

[求助] 求助python 处理多级目录下JPG合并pdf

[复制链接]
ToDesk01 发表于 2023-5-17 22:35
有N多的图片需要合并转换成为一个PDF,1顺序安装文件夹内名称的顺序,2保持图片的大下和原图一致。 一个文件夹内的所有图片合并到以文件夹名称为文件名的PDF中。。
难题为文件目录结构不一,有的在一级下面,有的在2-5级中.
2011
-201101
--01.jpg
--02.jpg
--03.jpg
-201102
--20110201
---12.jpg
---13.jpg
---15.jpg
---19.jpg
-201103
--201103001
---201130010
----12.jpg
----13.jpg
----15.jpg
----19.jpg
类似这样救助下大神python怎么批量合并,保持原来文件结构,和图片原始大小。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

神、Dawn 发表于 2023-5-17 22:42
您可以使用Python中的第三方库进行批量合并图片并生成对应的PDF文件。以下是一种可能的解决方案:

安装必要的库:首先,您需要安装Python的Pillow库和fpdf库。可以使用以下命令进行安装:
python
Copy code
pip install Pillow
pip install fpdf
编写代码:下面是一个示例代码,可以批量合并图片并生成对应的PDF文件,同时保持原始文件夹结构和图片大小。您需要根据自己的需求进行适当的修改。
python
Copy code
import os
from PIL import Image
from fpdf import FPDF

def convert_images_to_pdf(input_folder, output_folder):
    for root, dirs, files in os.walk(input_folder):
        for dir in dirs:
            pdf = FPDF()
            image_files = []
            for subdir, subdirs, filenames in os.walk(os.path.join(root, dir)):
                for filename in filenames:
                    if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
                        image_files.append(os.path.join(subdir, filename))

            if image_files:
                pdf_path = os.path.join(output_folder, f"{dir}.pdf")
                for image_file in image_files:
                    image = Image.open(image_file)
                    pdf.add_page()
                    pdf.image(image_file, x=0, y=0, w=image.width, h=image.height)

                pdf.output(pdf_path, "F")

# 使用示例
input_folder = "path/to/input/folder"
output_folder = "path/to/output/folder"
convert_images_to_pdf(input_folder, output_folder)
在上面的代码中,input_folder是包含所有图片的文件夹的路径,output_folder是用于存储生成的PDF文件的文件夹的路径。代码会递归遍历输入文件夹中的所有子文件夹,并将每个子文件夹中的图片合并为对应的PDF文件。

请确保您已将代码中的路径替换为实际的文件夹路径,并且已安装所需的库。运行代码后,将会在指定的输出文件夹中生成相应的PDF文件,每个子文件夹对应一个PDF文件,文件名与文件夹名相同。

请注意,该代码假设所有图片都是常见的PNG、JPEG或JPG格式。如果有其他类型的图片文件,请根据需要进行修改。另外,生成的PDF文件将保持与原始图片相同的大小。如果需要调整图片在PDF中的大小,可以修改代码中的pdf.image函数的参数。

希望这可以帮助到您!
hanloth 发表于 2023-5-17 22:42
获取文件的话可以用os模块里的walk方法
合并为pdf可以用PyPDF2模块
hanloth 发表于 2023-5-17 22:57
本帖最后由 hanloth 于 2023-5-17 22:59 编辑

提供几个函数
首先import必要模块
[Python] 纯文本查看 复制代码
from typing import List
from PyPDF2 import PdfFileMerger
import os

[Python] 纯文本查看 复制代码
def scan_files(path, suffix):
    
    """
    扫描指定目录下所有的指定后缀名的文件
    :param path: 扫描路径
    :param suffix: 后缀名,传入的参数类似".png|.jpg"
    :return: 所有匹配项所在的目录(不含后缀)
    """
    files = []
    suffix_list = suffix.split("|")
    path = os.path.abspath(path)
    for root, dirs, filenames in os.walk(path):
        for filename in filenames:
            if any(filename.endswith(suffix) for suffix in suffix_list):
                file_path = os.path.join(root, filename)
                file_name = os.path.splitext(filename)[0]
                files.append(os.path.abspath(os.path.dirname(file_path)))
    return files

以上是扫描文件的代码
[Python] 纯文本查看 复制代码
def combine_to_pdf(file_paths, output_path):
    """
    将多个 PDF 文件合并为单个 PDF 文件

    Args:
        file_paths (List[str]): 需要合并的 PDF 文件路径列表
        output_path (str): 合并后的文件输出路径

    Returns:
        None
    """
    pdf_merger = PdfFileMerger()

    # 循环添加文件
    for path in file_paths:
        with open(path, 'rb') as f:
            pdf_merger.append(f)

    # 将合并后的内容输出到 PDF 文件
    with open(output_path, 'wb') as f:
        pdf_merger.write(f)

以上是合并为pdf的代码
lideshan 发表于 2023-5-18 08:46
[Python] 纯文本查看 复制代码
import os
from wand.image import Image

# 遍历目录结构函数
def walk_dir(directory):
    for root, dirs, files in os.walk(directory):
        for file in files:
            yield os.path.join(root, file)

# 合并图片函数
def merge_images_to_pdf(images_path_list, output_file_name):
    with Image() as pdf:
        for path in images_path_list:
            with Image(filename=path) as img:
                pdf.sequence.append(img)
        pdf.save(filename=output_file_name)

# 遍历目录结构,获取所有图片的路径
img_path_list = []
for file_path in walk_dir('.'):
    if file_path.endswith('.jpg') or file_path.endswith('.png'):
        img_path_list.append(file_path)

# 按文件夹名称为文件名,将合并后的图片保存为PDF
pdf_dir_dict = {}
for img_path in img_path_list:
    dir_path = os.path.dirname(img_path)
    if dir_path not in pdf_dir_dict:
        pdf_dir_dict[dir_path] = []
    pdf_dir_dict[dir_path].append(img_path)

for directory, images_path_list in pdf_dir_dict.items():
    pdf_file_name = os.path.join(directory, os.path.basename(directory) + '.pdf')
    merge_images_to_pdf(images_path_list, pdf_file_name)

这段代码会将图片合并为以文件夹名称为文件名的PDF文件,并保存在对应的目录中。你可以根据需要修改其中的目录路径和文件后缀等参数。该代码需要安装Wand库,你可以使用pip install wand安装。
gaoxiaoao 发表于 2023-5-18 08:50
人人gpt,程序员瑟瑟发抖
deson37234 发表于 2023-5-18 09:55
丢到GPT 让他给建议
头像被屏蔽
saszznz 发表于 2023-5-18 10:13
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 00:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表