当前位置: 首页 > article >正文

【图片转换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 文件,并保存在相应的文件夹中。

注意事项

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

http://www.kler.cn/a/541380.html

相关文章:

  • 软考高级《系统架构设计师》知识点(一)
  • Mp4视频播放机无法播放视频-批量修改视频分辨率(帧宽、帧高)
  • Spring Boot 线程池自定义拒绝策略:解决任务堆积与丢失问题
  • 【安当产品应用案例100集】037-强化OpenVPN安全防线的卓越之选——安当ASP身份认证系统
  • 【R】Dijkstra算法求最短路径
  • JS宏进阶:XMLHttpRequest对象
  • 安卓基础(第一集)
  • 嵌入式音视频开发(一)ffmpeg框架及内核解析
  • hive数仓的分层与建模
  • 食品饮料生产瓶颈?富唯智能协作机器人来 “破壁”
  • 使用 DeepSeek 进行图像描述:多模态 AI 技术实践
  • 【Linux】Linux命令:crontab
  • SpringBoot和Spring主要区别
  • React Vite 项目增加 eslint 和 prettier
  • 【网络法医】基线取证和常见反取证技术
  • 【DeepSeek】Deepseek辅组编程-通过卫星轨道计算终端距离、相对速度和多普勒频移
  • Ajax-介绍
  • 深度学习|表示学习|Layer Normalization 全面总结|24
  • CSS入门学习笔记(二)
  • 客户端渲染和服务端渲染
  • bitcoinjs学习笔记0(预备知识)
  • SpringBoot 接口防抖的一些实现方案
  • Unity Dots理论学习-5.与ECS相关的概念
  • R18 2Rx XR devices
  • React 中的 useMemo 和 useCallback 有什么区别?
  • Gaea: 去中心化人工智能平台的未来