【图片转换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 ImageReaderdef 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.sizeaspect_ratio = width / height# 根据页面大小和图片宽高比调整图片尺寸if aspect_ratio > 1:# 宽图new_width = letter[0] - 50new_height = new_width / aspect_ratioelse:# 高图new_height = letter[1] - 50new_width = new_height * aspect_ratiox = (letter[0] - new_width) / 2y = (letter[1] - new_height) / 2c.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.mzph.cn/diannao/69740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python lambda 关键字用法

lambda 关键字语法lambda 关键字用法1. 基本用法2. 作为 `sorted()` 的 `key` 函数3. 作为 `map()`、`filter()`、`reduce()` 的参数(1)`map()` 进行映射转换(2)`filter()` 进行条件筛选(3)`functools.reduce()` 进行累积计算4. 作为函数返回值5. 在 `if-else` 表达式中使…

数据分析对企业有什么价值

数据分析是工具,可以理解为一把刀,这把刀能够产生什么样的价值主要在于使用者。 一、基于财务的数据分析价值 基于财务数据,数据分析师可以进行多方面的分析,以下是一些常见的分析类型: 1. 财务报表分析 趋势分析&…

Android车机DIY开发之软件篇(十二) AOSP12下载编译

Android车机DIY开发之软件篇(十二) AOSP12下载编译 sudo apt-get update sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib gmultilib libc6-dev-i386 lib32ncurses5-dev libx11-dev lib32z-dev ccache libgl1-mesa-…

Windows 安装 DeepSeek 教程和open webui 图形化部署(非docker)

Windows 安装 Ollama : 步骤 1:下载并安装 Ollama 官网:奥拉马 点击下载 选择windows版本。 双击安装包 点击【Install】(注意:安装包是直接安装在C盘的,并不支持更改路径,因此C盘的空间必须要至少大于5…

每日学习 设计模式 五种不同的单例模式

狮子大佬原文 https://blog.csdn.net/weixin_40461281/article/details/135050977 第一种 饿汉式 为什么叫饿汉,指的是"饿" 也就是说对象实例在程序启动时就已经被创建好,不管你是否需要,它都会在类加载时立即实例化,也就是说 实例化是在类加载时候完成的,早早的吃…

OpenCV 相机标定流程指南

OpenCV 相机标定流程指南 前置准备标定流程结果输出与验证建议源代码 OpenCV 相机标定流程指南 https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html https://learnopencv.com/camera-calibration-using-opencv/ 前置准备 制作标定板:生成高精度棋…

没有服务器和显卡电脑如何本地化使用deepseek|如何通过API使用满血版deepseek

目录 一、前言二、使用siliconflow硅基流动 API密钥1、注册硅基流动2、创建API密钥3、下载AI客户端4、使用API密钥5、效果演示 三、使用deepseek官方API密钥1、创建API密钥2、使用API密钥3、效果演示 四、总结 一、前言 上篇文章我介绍了如何通过云服务器或者显卡电脑来本地化…

python+unity落地方案实现AI 换脸融合

先上效果再说技术结论,使用的是自行搭建的AI人脸融合库,可以离线不受限制无限次生成,有需要的可以后台私信python ai换脸融合。 TODO 未来的方向:3D人脸融合和AI数据训练 这个技术使用的是openvcinsighface,openvc…

windows + visual studio 2019 使用cmake 编译构建静、动态库并调用详解

环境 windows visual studio 2019 visual studio 2019创建cmake工程 1. 静态库.lib 1.1 静态库编译生成 以下是我创建的cmake工程文件结构,只关注高亮文件夹部分 libout 存放编译生成的.lib文件libsrc 存放编译用的源代码和头文件CMakeLists.txt 此次编译CMak…

【前端】几种常见的跨域解决方案代理的概念

几种常见的跨域解决方案&代理的概念 一、常见的跨域解决方案1. 服务端配置CORS(Cross-Origin Resource Sharing):2. Nginx代理3. Vue CLI配置代理:4 .uni-app在manifest.json中配置代理来解决:5. 使用WebSocket通讯…

C++--iomanip库

目录 1. 设置字段宽度:std::setw() 2. 设置浮点数精度:std::setprecision() 3. 设置填充字符:std::setfill() 4. 控制对齐方式:std::left 和 std::right,std::internal 5. 控制进制输出:std::hex、std…

java项目当中使用redis

分类数据一般情况下不会做过多的修改,因此可以将分类数据进行缓存,以提高页面的加载速度。 1 使用缓存 先将首页接口获取一级分类数据缓存 步骤: 1、在service-product微服务中集成Spring Data Redis,如下所示: 在…

Git 分布式版本控制工具使用教程

1.关于Git 1.1 什么是Git Git是一款免费、开源的分布式版本控制工具,由Linux创始人Linus Torvalds于2005年开发。它被设计用来处理从很小到非常大的项目,速度和效率都非常高。Git允许多个开发者几乎同时处理同一个项目而不会互相干扰,并且在…

【Pycharm+Git+Gitlab】安装部署(粗糙版)

1、安装Git 2、安装Pycharm(这里选择的是社区版) 3、桌面右键打开Git Bash 1)设置全局用户名(准备连接的Gitlab仓库的访问用户名) git config ---global user.name "username"2)设置全局邮箱&…

基于java手机销售网站设计和实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

Android Camera API 介绍

一 StreamConfigurationMap 1. StreamConfigurationMap 的作用 StreamConfigurationMap 是 Android Camera2 API 中的一个核心类,用于描述相机设备支持的输出流配置,包含以下信息: 支持的格式与分辨率:例如 YUV_420_888、JPEG、…

GitHub Pages + Jekyll 博客搭建指南(静态网站搭建)

目录 🚀 静态网站及其生成工具指南🌍 什么是静态网站?📌 静态网站的优势⚖️ 静态网站 VS 动态网站 🚀 常见的静态网站生成器对比🛠️ 使用 GitHub Pages Jekyll 搭建个人博客📌 1. 创建 GitHu…

wow-agent

一、什么是wow-agent? wow-agent致力于在代码行数和依赖库数量之间取得均衡的最小值,用最划算的方式帮助您在本地搭建AI Agent,嵌入到您的生产工作环节中 Agent 核心组件:模型、工具、编排层 模型-- 用于理解输入、进行推理和决…

React进行路由跳转的方法汇总

在 React 中进行路由跳转有多种方法,具体取决于你使用的路由库和版本。以下是常见的路由跳转方法汇总,主要基于 react-router-dom 库。 1. 使用 useNavigate 钩子(适用于 react-router-dom v6) useNavigate 是 react-router-dom…

java8、9新特性

JAVA8 Lambda 表达式 (parameters) -> expression 或 (parameters) ->{ statements; } 提供了一种更为简洁的语法,尤其适用于函数式接口。相比于传统的匿名内部类,Lambda 表达式使得代码更为紧凑,减少了样板代码的编写。 它允许将函…