求助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怎么批量合并,保持原来文件结构,和图片原始大小。 您可以使用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函数的参数。
希望这可以帮助到您! 获取文件的话可以用os模块里的walk方法
合并为pdf可以用PyPDF2模块 本帖最后由 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的代码
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安装。 人人gpt,程序员瑟瑟发抖 丢到GPT 让他给建议
页:
[1]