使用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
相关推荐
七夜zippoe10 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64811 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满11 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠11 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Harvey90312 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技13 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀13 小时前
Linux环境变量
linux·运维·服务器
zzzsde13 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º15 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann
NPE~15 小时前
自动化工具Drissonpage 保姆级教程(含xpath语法)
运维·后端·爬虫·自动化·网络爬虫·xpath·浏览器自动化