【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案

建筑设计公司在项目执行过程中,会产生大量的设计图纸、效果图、实景照片等图片资料。这些资料按照项目名称、阶段、专业等维度存放在多个文件夹和子文件夹中。

操作需求:为了方便内部管理和向客户交付完整的设计方案,公司需要将每个项目文件夹及其子文件夹内的图片分别转换成 PDF 文件。比如,一个大型商业建筑项目,将概念设计阶段的草图、初步设计的效果图、施工图等图片合并成一个完整的 PDF 方案,便于查阅和保存。

以下是一个基于 Python 的解决方案,它可以将多个文件夹里的图片逐个批量转换成多个 PDF 文件,同时支持子文件夹单独合并转换以及子文件夹单独批量转换。

代码实现

python

import os
from PIL import Image
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas
from reportlab.lib.utils import ImageReader


def images_to_pdf(folder_path):
    # 遍历文件夹及其子文件夹
    for root, dirs, files in os.walk(folder_path):
        # 筛选出图片文件
        image_files = [f for f in files if f.lower().endswith(('.png', '.jpg', '.jpeg'))]
        if image_files:
            # 为每个文件夹生成一个 PDF 文件
            pdf_filename = os.path.join(root, os.path.basename(root) + '.pdf')
            c = canvas.Canvas(pdf_filename, pagesize=letter)
            for image_file in image_files:
                image_path = os.path.join(root, image_file)
                try:
                    img = Image.open(image_path)
                    width, height = img.size
                    aspect_ratio = width / height
                    # 根据页面大小和图片宽高比调整图片尺寸
                    if aspect_ratio > 1:
                        # 宽图
                        new_width = letter[0] - 50
                        new_height = new_width / aspect_ratio
                    else:
                        # 高图
                        new_height = letter[1] - 50
                        new_width = new_height * aspect_ratio
                    x = (letter[0] - new_width) / 2
                    y = (letter[1] - new_height) / 2
                    c.drawImage(ImageReader(img), x, y, width=new_width, height=new_height)
                    c.showPage()
                except Exception as e:
                    print(f"Error processing {image_path}: {e}")
            c.save()


if __name__ == "__main__":
    # 请将此路径替换为你实际存放图片的根文件夹路径
    root_folder = 'your_image_folder'
    images_to_pdf(root_folder)

代码解释

  1. 导入必要的库

    • os:用于文件和目录操作,如遍历文件夹和获取文件路径。
    • PIL.Image:用于打开和处理图片。
    • reportlab 相关模块:用于生成 PDF 文件,包括设置页面大小、绘制图片等。
  2. images_to_pdf 函数

    • 使用 os.walk 遍历指定文件夹及其子文件夹。
    • 筛选出每个文件夹中的图片文件(支持 .png.jpg.jpeg 格式)。
    • 为每个包含图片的文件夹生成一个 PDF 文件,文件名与文件夹名相同。
    • 对于每个图片文件,打开并根据页面大小和图片宽高比调整图片尺寸,然后将其绘制到 PDF 的一页上。
    • 处理完一个图片后,调用 c.showPage() 切换到下一页。
    • 最后保存 PDF 文件。
  3. 主程序

    • 指定存放图片的根文件夹路径,调用 images_to_pdf 函数进行转换。

使用方法

  1. 确保你已经安装了 Pillowreportlab 库,可以使用以下命令进行安装:

bash

pip install pillow reportlab
  1. 将代码中的 'your_image_folder' 替换为你实际存放图片的根文件夹路径。

  2. 运行代码,程序会自动遍历指定文件夹及其子文件夹,将每个文件夹中的图片合并成一个 PDF 文件,并保存在相应的文件夹中。

【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案_第1张图片

注意事项

  • 代码中仅处理了 .png.jpg.jpeg 格式的图片,如果你需要处理其他格式的图片,可以在筛选条件中添加相应的扩展名。
  • 如果图片文件损坏或无法打开,程序会捕获异常并输出错误信息,但不会影响其他图片的处理。

你可能感兴趣的:(多文件夹批量图转,PDF,多目录图片快速转,PDF,多文件夹资料批量,PDF,转换,多目录图像批量整合转档,多文件夹文件批量,PDF,整合,多文件夹影像批量,PDF,处理,多文件夹文件批量PDF整合)