ToDesk01 发表于 2023-5-17 22:35

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

有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必要模块
from typing import List
from PyPDF2 import PdfFileMerger
import os


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)
                files.append(os.path.abspath(os.path.dirname(file_path)))
    return files

以上是扫描文件的代码
def combine_to_pdf(file_paths, output_path):
    """
    将多个 PDF 文件合并为单个 PDF 文件

    Args:
      file_paths (List): 需要合并的 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

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 = []
    pdf_dir_dict.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

页: [1]
查看完整版本: 求助python 处理多级目录下JPG合并pdf