使用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
相关推荐
我要见SA姐112 小时前
GitHub Actions 自动化:5 个真实运维提效案例
运维·数据库·机器学习·oracle·回归
Android系统攻城狮13 小时前
Linux FFmpeg深度解析之avcodec_flush_buffers调用流程与实战(十九)
linux·运维·服务器·ffmpeg·车载音视频·ffmpeg音视频进阶
Y38153266214 小时前
用 httpx 写 SerpBase 异步客户端:连接池与超时配置
运维·服务器·数据库
倔强的石头10614 小时前
【Linux指南】进程通信系列(七):System V 信号量 —— 同步互斥的内核原语
linux·运维·服务器
HZZD_HZZD16 小时前
大口径摄像水表白皮书拆解:DN40加装改造与字轮识别实测
运维·物联网·腾讯云
PellyKoo16 小时前
【Ubuntu】GTX 1080 Ti 显卡占用为0但功率高达60W的排查与解决
linux·运维·ubuntu
莫晓燚17 小时前
阿里云若依项目部署与日志采集---实战
运维·数据库·redis·阿里云·ruoyi
何中应17 小时前
Grafana如何共享面板
运维·grafana·可观测
科创致远18 小时前
ESOP 电子作业指导书 WiFi 网络应用实测报告
运维·服务器·网络
重生之小比特18 小时前
【Linux系统】17 库制作与原理(下)
linux·运维·服务器