Quantcast
Channel: 小蓝博客
Viewing all articles
Browse latest Browse all 3145

使用Linux Shell脚本批量转换常见图片为PDF

$
0
0

在日常工作或学习中,经常需要将多张图片批量转换为PDF文件,以便于整理、分享或打印。使用Linux Shell脚本可以高效地完成这一任务。本文将详细介绍如何编写一个Shell脚本,批量将常见图片格式(如JPEG、PNG等)转换为PDF,并对每一步骤进行深入解释。📄✨

🛠️ 准备工作

在开始之前,确保你的Linux系统中安装了必要的工具。常用的工具包括:

  • ImageMagick:一个功能强大的图像处理工具,提供了 convert命令用于格式转换。
  • img2pdf:一个专门用于将图片转换为PDF的工具,支持批量操作。

安装ImageMagick和img2pdf

在大多数Linux发行版中,可以使用包管理器进行安装。例如,在Ubuntu上:

sudo apt update
sudo apt install imagemagick img2pdf

解释:

  • sudo apt update:更新包列表,确保安装的是最新版本。
  • sudo apt install imagemagick img2pdf:安装ImageMagick和img2pdf工具。

📜 编写Shell脚本

以下是一个示例Shell脚本,用于将当前目录下的所有JPEG和PNG图片批量转换为一个PDF文件:

#!/bin/bash

# 设置输出PDF文件名
output="output.pdf"

# 查找当前目录下的所有jpg和png文件,并按名称排序
images=$(ls *.jpg *.png 2>/dev/null | sort)

# 检查是否有图片文件存在
if [ -z "$images" ]; then
    echo -e "\033[31m没有找到jpg或png格式的图片文件。\033[0m"
    exit 1
fi

# 使用img2pdf进行转换
img2pdf $images -o $output

# 检查转换是否成功
if [ $? -eq 0 ]; then
    echo -e "\033[32m成功将图片转换为${output}。\033[0m"
else
    echo -e "\033[31m图片转换失败。\033[0m"
    exit 1
fi

脚本详细解释

  1. 设置输出PDF文件名

    output="output.pdf"
    • output:定义最终生成的PDF文件名称为 output.pdf。你可以根据需要更改此名称。
  2. 查找所有jpg和png文件并排序

    images=$(ls *.jpg *.png 2>/dev/null | sort)
    • ls *.jpg *.png:列出当前目录下所有扩展名为jpg和png的文件。
    • 2>/dev/null:将错误输出重定向到空设备,避免因没有匹配文件而显示错误信息。
    • sort:按文件名进行排序,确保PDF中的图片顺序正确。
    • images:将排序后的文件名存储在变量 images中。
  3. 检查是否存在图片文件

    if [ -z "$images" ]; then
        echo -e "\033[31m没有找到jpg或png格式的图片文件。\033[0m"
        exit 1
    fi
    • [ -z "$images" ]:检查 images变量是否为空。
    • 如果没有找到图片文件,输出红色提示信息并退出脚本。
  4. 使用img2pdf进行转换

    img2pdf $images -o $output
    • img2pdf:调用img2pdf工具进行转换。
    • $images:传入所有图片文件。
    • -o $output:指定输出的PDF文件名。
  5. 检查转换是否成功

    if [ $? -eq 0 ]; then
        echo -e "\033[32m成功将图片转换为${output}。\033[0m"
    else
        echo -e "\033[31m图片转换失败。\033[0m"
        exit 1
    fi
    • $?:获取上一条命令的退出状态。
    • 如果转换成功(退出状态为0),输出绿色成功信息。
    • 如果转换失败,输出红色错误信息并退出脚本。

📊 工作流程图

graph TD;
    A[开始] --> B[查找图片文件]
    B --> C{是否有图片文件}
    C -- 有 --> D[排序图片文件]
    D --> E[调用img2pdf转换]
    E --> F{转换是否成功}
    F -- 是 --> G[输出成功信息]
    F -- 否 --> H[输出失败信息]
    C -- 无 --> H
    G --> I[结束]
    H --> I

📝 使用说明

  1. 创建脚本文件

    • 使用文本编辑器创建一个新的Shell脚本文件,例如 convert_images_to_pdf.sh
    • 将上述脚本内容复制到文件中。
  2. 赋予执行权限

    chmod +x convert_images_to_pdf.sh
    • chmod +x:为脚本文件添加执行权限。
  3. 运行脚本

    ./convert_images_to_pdf.sh
    • 确保当前目录下有需要转换的jpg或png图片文件。
    • 脚本执行后,会生成一个名为 output.pdf的文件,包含所有图片。

🔍 常见问题解答

问题解决方案
没有找到图片文件确保当前目录下有jpg或png格式的图片,并且文件扩展名正确。
转换失败检查是否正确安装了img2pdf工具,或尝试使用ImageMagick的 convert命令。
图片顺序不正确确保图片文件名中包含适当的数字或字母,以便 sort命令正确排序。

🧩 扩展功能

如果你希望将每张图片作为单独的PDF文件,可以稍作修改:

#!/bin/bash

# 创建输出目录
mkdir -p pdf_outputs

# 遍历所有jpg和png文件
for img in *.jpg *.png; do
    # 提取文件名(不含扩展名)
    filename="${img%.*}"
    # 转换为PDF
    img2pdf "$img" -o "pdf_outputs/${filename}.pdf"
    echo -e "\033[32m已将${img}转换为pdf_outputs/${filename}.pdf。\033[0m"
done

echo -e "\033[32m所有图片已成功转换。\033[0m"

解释

  • 创建输出目录

    mkdir -p pdf_outputs
    • mkdir -p:创建名为 pdf_outputs的目录,如果已存在则不报错。
  • 遍历所有图片文件

    for img in *.jpg *.png; do
    • 使用 for循环遍历当前目录下所有jpg和png文件。
  • 提取文件名

    filename="${img%.*}"
    • ${img%.*}:去除文件扩展名,提取文件名部分。
  • 转换为单独的PDF

    img2pdf "$img" -o "pdf_outputs/${filename}.pdf"
    • 将每张图片转换为单独的PDF文件,存放在 pdf_outputs目录中。
  • 输出转换信息

    echo -e "\033[32m已将${img}转换为pdf_outputs/${filename}.pdf。\033[0m"
    • 输出绿色信息,提示转换成功。

🎉 总结

通过编写简单的Linux Shell脚本,可以高效地批量将常见图片格式转换为PDF文件。本文提供的脚本不仅易于理解和使用,还可以根据实际需求进行扩展和修改。掌握这一技能,将大大提升你的工作效率和文件管理能力。🚀📚


Viewing all articles
Browse latest Browse all 3145

Trending Articles