目录

应用场景

实现思路 

实现过程

1.下载安装imageMagick

2.遍历源文件夹

3.转换图片为pdf文档

4.最终执行的命令

5.结果验证 

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


应用场景

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

实现思路 

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

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

实现过程

1.下载安装imageMagick

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

2.遍历源文件夹

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

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命令区分开)

magick convert source\book001\*.png dest\book001.pdf

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

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

4.最终执行的命令

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

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

5.结果验证 

下图是生成的结果,可以看到dest文件夹中pdf文件逐个生成成功。使用Windows批处理命令行和ImageMagick批量将文件夹中的图片转换为PDF文档的方法-LMLPHP

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

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

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

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

@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
12-19 07:54