使用Windows批处理命令行和ImageMagick批量将文件夹中的图片转换为PDF文档的方法

目录

应用场景

实现思路

实现过程

1.下载安装imageMagick

2.遍历源文件夹

3.转换图片为pdf文档

4.最终执行的命令

5.结果验证

6.将以上命令改写为windows批处理文件


应用场景

图像是一种常见的数据。图片几乎是一个信息系统中必不可少的组成部分。为了方便阅读,有时我们需要将分散在文件夹中的单个图片整合为一个个的PDF文档。如果文档较少,我们可以运用各类图形界面软件去一个个的生成PDF文档。在需要整合的PDF文档过多时,一个个的生成就不是很方便了。imageMagick是一个功能强大的命令行图像处理软件,可以实现常见的图像操作功能,转换图像格式就是其中之一,比较适合在服务器端使用。在对文档结构性要求不高的情况下,可以使用imageMagick命令行来完成图片转PDF的需求。
实现效果的文件结构预览

实现思路

实现思路也比较简单,使用批处理代码遍历源文件目录下所有的文件夹,将imageMagick命令将文件夹下所有文件转换为pdf,重复以上操作,直到所有文件夹中的图片都合成了PDF文档。

实现过程

1.下载安装imageMagick

本文主要说实现批量转换的方法,只简单提一下软件安装过程,访问imageMagick官网下载相应平台的程序ImageMagick -- Download,安装后配置好环境变量。本文讲的是windows的批处理实现,所以使用的也是windows版本的程序。在windows控制台(cmd)输入magick -version,控制台能输出版本信息,则说明软件安装ok。

2.遍历源文件夹

使用windows的for命令结合dir命令即可实现,遍历所有源文件夹(就是图片文件的父文件夹),以下命令实现了windows的for命令遍历当前目录的source文件夹下包含的所有子文件夹,并将每个文件夹的绝对路径打印到了屏幕。这条命令适合在cmd中使用。

bash 复制代码
for /f "delims=" %i in ('dir source\ /b /s /ad') do (echo %i)

3.转换图片为pdf文档

使用imageMagick命令行将当前目录下source目录下的book001文件夹中所有png图片按照系统默认排序合并为一个位于当前目录下dest目录下的以book001.pdf命名的pdf文档,可以用以下命令实现。(注:windows系统使用convert命令,需要用magick convert,这是为了和windows自带的convert命令区分开)

bash 复制代码
magick convert source\book001\*.png dest\book001.pdf

如果对图片文件在文档中的顺序有要求,可以将文件命名为形如001、002、003、004、005、006这样的图片,如下图所示,这样可以使图片在文档中按文件名顺序排列。

4.最终执行的命令

实际使用时还是需要使用下面的命令。以上步骤是对使用windows命令和imageMagick命令的解释,便于理解执行过程。该命令实现了将当前目录下的source文件夹中的所有文件夹中的图片转换为pdf文档,并使用文件夹的名称命名,输出到dest文件夹中。

bash 复制代码
for /f "delims=" %i in ('dir source\ /b /s /ad') do (magick convert %i\*.png dest\%~nxi.pdf)

5.结果验证

下图是生成的结果,可以看到dest文件夹中pdf文件逐个生成成功。

单个文档中,图片也是按照顺序排列的。

6.将以上命令改写为windows批处理文件

可以将以下代码保存为.bat文件,通过批处理程序来执行。用户从屏幕输入要读取的文件夹、要输出的文件夹,实现了图片批量转换为pdf。这里只是一个简单的实现,如果要用于更加复杂的场景还需要优化。

bash 复制代码
@echo off
set /p source="输入当前目录中源文件夹名称: "
set /p dest="输入当前目录中目标文件夹名称: "

for /f "delims=" %%i in ('dir %source% /b /s /ad') do (
    magick convert "%%i\*.png" "%dest%\%%~nxi.pdf"
)

pause
相关推荐
乘云数字DATABUFF3 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
荣--5 天前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森5 天前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜6 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB7 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode8 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220709 天前
如何搭建本地yum源(上)
运维
大树8812 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠12 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质12 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务