Linux shell腳本對常見圖片格式批量轉(zhuǎn)換為PDF文件
在Linux系統(tǒng)中,使用ImageMagick可以圖片格式轉(zhuǎn)換,其中最常用的是通過命令行工具進(jìn)行。
ImageMagick是一個(gè)非常強(qiáng)大的圖像處理工具集,它包含了許多用于圖像轉(zhuǎn)換的命令。
sudo apt-get install imagemagick # 對于基于Debian的系統(tǒng)
驗(yàn)證是否安裝成功: 嘗試運(yùn)行ImageMagick提供的一些常用命令,比如:
convert --version
如果convert命令可用,它將返回版本信息。
一、可以編寫shell腳本批量轉(zhuǎn)換圖片為PDF文件
shell腳本文件名: pictures_to_pdf_v1.0.sh
#!/bin/bash
#腳本功能:把常用的圖片格式(png、jpg、jpeg、webp、tiff)批量轉(zhuǎn)換為PDF格式,
# “多個(gè)圖片分開生成多個(gè)PDF文件”或者“多個(gè)圖片合并生成一個(gè)PDF文件”
#函數(shù)功能:使用了*通配符來檢查字符串中是否有空格。如果字符串包含空格,contains_space函數(shù)將返回真(true),否則返回假(false)。
function contains_space() {
[[ $1 = *\ * ]]
}
#函數(shù)功能:把空格全部替換為'_'下劃線"
function space2underline(){
local file_name_old=$1
# 使用contains_space函數(shù)判斷文件名中是否含有空格
if contains_space "$file_name_old"; then
file_name_new="${file_name_old// /_}"
mv "$file_name_old" "$file_name_new";
echo "$file_name_new"
else
echo "$file_name_old"
fi
}
# 多個(gè)圖片分開生成多個(gè)PDF文件
function images_to_multiple_pdf(){
# 獲取第一個(gè)參數(shù)
local new_folder=$1
#for file_name in `ls *.png *.jpg *.jpeg *.webp *.tiff`;do
for file_name in *;do
#echo "文件'${file_name}'"
if [ "png" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
(convert $file_name `echo ../$new_folder/${file_name//.png/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗")
elif [ "jpg" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
(convert $file_name `echo ../$new_folder/${file_name//.jpg/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗")
elif [ "jpeg" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
(convert $file_name `echo ../$new_folder/${file_name//.jpeg/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗")
elif [ "webp" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
(convert $file_name `echo ../$new_folder/${file_name//.webp/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗")
elif [ "tiff" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
(convert $file_name `echo ../$new_folder/${file_name//.tiff/.pdf}`) && (echo "${file_name}已成功轉(zhuǎn)為pdf格式") || (echo "${file_name}轉(zhuǎn)換失敗")
#else
#echo "僅支持常見的圖片格式(png、jpg、jpeg、webp、tiff)才可以轉(zhuǎn)換為PDF格式,其他文件'${file_name}'不支持!"
fi
done
}
# 多個(gè)圖片合并生成一個(gè)PDF文件
function images_to_single_pdf(){
# 獲取第一個(gè)參數(shù)
local new_folder=$1
# 圖片名稱字符串,例如"1.png 2.jpg"
local file_names=""
#for file_name in `ls *.png *.jpg *.jpeg *.webp *.tiff`;do
for file_name in *;do
#echo "文件'${file_name}'"
if [ "png" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
file_names+=" "$file_name
#echo "'${file_names}'"
elif [ "jpg" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
file_names+=" "$file_name
#echo "'${file_names}'"
elif [ "jpeg" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
file_names+=" "$file_name
#echo "'${file_names}'"
elif [ "webp" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
file_names+=" "$file_name
#echo "'${file_names}'"
elif [ "tiff" == "${file_name##*.}" ];then
file_name=$(space2underline "$file_name")
#echo "$file_name"
file_names+=" "$file_name
#echo "'${file_names}'"
#else
#echo "僅支持常見的圖片格式(png、jpg、jpeg、webp、tiff)才可以轉(zhuǎn)換為PDF格式,其他文件'${file_name}'不支持!"
fi
done
# 刪除file_names字符串最前面的空格
file_names=${file_names#"${file_names%%[![:space:]]*}"}
echo "'${file_names}'"
# 多個(gè)圖片轉(zhuǎn)換為一個(gè)pdf
(convert $file_names `echo ../$new_folder/output.pdf`) && (echo "'${file_names}'已成功轉(zhuǎn)為pdf格式") || (echo "'${file_names}'轉(zhuǎn)換失敗")
}
#---------------------------------------------------------------------------------
#函數(shù)功能:主函數(shù)
#---------------------------------------------------------------------------------
function main(){
echo "溫馨提示:僅支持常見的圖片格式(png、jpg、jpeg、webp、tiff)才可以轉(zhuǎn)換為PDF格式,其他文件類型不支持!"
# 創(chuàng)建新文件夾
new_folder="output-images"
# 檢查文件夾是否存在
if [ ! -d "$new_folder" ]; then
# 文件夾不存在,創(chuàng)建文件夾
mkdir "$new_folder"
fi
# 存放待轉(zhuǎn)換的圖片文件夾
input_images_folder="input-images"
# 檢查文件夾是否存在
if [ ! -d "$input_images_folder" ]; then
# 文件夾不存在,創(chuàng)建文件夾
mkdir "$input_images_folder"
fi
# 進(jìn)入input-images目錄
cd "$input_images_folder"
# 判斷$1參數(shù)是否為空,不為空設(shè)置input_number
if [ -z $1 ];then
# echo "第一個(gè)參數(shù)為空"
# 獲取當(dāng)前腳本名稱
local script_name=$(basename "$0")
echo "請?jiān)谶\(yùn)行腳本'${script_name}'名稱后面,輸入?yún)?shù)'1':(多個(gè)圖片分開生成多個(gè)PDF文件)或 參數(shù)'2':(多個(gè)圖片合并生成一個(gè)PDF文件)"
exit
else
# echo "第一個(gè)參數(shù)不為空,值為:$1"
local input_number=$1
fi
if [ "1" == "$input_number" ];then
# 多個(gè)圖片分開生成多個(gè)PDF文件
images_to_multiple_pdf "$new_folder"
elif [ "2" == "$input_number" ];then
# 多個(gè)圖片合并生成一個(gè)PDF文件
images_to_single_pdf "$new_folder"
else
# 獲取當(dāng)前腳本名稱
local script_name=$(basename "$0")
echo "請?jiān)谶\(yùn)行腳本'${script_name}'名稱后面,輸入?yún)?shù)'1':(多個(gè)圖片分開生成多個(gè)PDF文件)或 參數(shù)'2':(多個(gè)圖片合并生成一個(gè)PDF文件)"
exit
fi
# 進(jìn)入上一級目錄
cd ..
}
# ---------------執(zhí)行主函數(shù)-------------------
main $1
二、使用方法
1.首先把圖片放到input-images目錄下。

2.賦予shell腳本文件執(zhí)行權(quán)限
chmod +x pictures_to_pdf_v1.0.sh
3.運(yùn)行shell腳本,"請?jiān)谶\(yùn)行腳本名稱后面,輸入轉(zhuǎn)換參數(shù)'1':(多個(gè)圖片分開生成多個(gè)PDF文件)或 參數(shù)'2':(多個(gè)圖片合并生成一個(gè)PDF文件)"
./pictures_to_pdf_v1.0.sh "轉(zhuǎn)換參數(shù)"
測試效果如下:

4.在生成的output-images目錄中,會(huì)看到生成的PDF文件。
三、該Shell腳本下載地址
gitee鏈接: https://gitee.com/datutu2015/pictures_to_pdf 藍(lán)奏云鏈接: https://wwxc.lanzouo.com/io1tg2iv6rpa 知識(shí)星球鏈接: https://t.zsxq.com/1Yjs8
四、報(bào)錯(cuò)處理
如果在圖片轉(zhuǎn)換pdf中,出現(xiàn)下面報(bào)錯(cuò):
(‘PDFpng error‘, b“convert-im6.q16: attempt to perform an operation not allowed by the security poli
這個(gè)錯(cuò)誤信息表明在執(zhí)行將圖片轉(zhuǎn)換為PDF文件的命令時(shí)出現(xiàn)了問題,具體錯(cuò)誤與安全策略不允許執(zhí)行"PDF"操作有關(guān)。
需要修改這個(gè)安全策略policy.xml文件,打開命令終端,執(zhí)行下面命令:
sudo vim /etc/ImageMagick-6/policy.xml
在找到的行中,將 rights 屬性的值設(shè)置為 “read|write”,以允許讀取和寫入PDF文件。例如,將行修改為類似下面的形式:
<policy domain="coder" rights="read|write" pattern="PDF" />

以上就是Linux shell腳本對常見圖片格式批量轉(zhuǎn)換為PDF文件的詳細(xì)內(nèi)容,更多關(guān)于Linux shell腳本圖片格式轉(zhuǎn)PDF的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
shell在指定目錄下批量執(zhí)行sql腳本的實(shí)例
今天小編就為大家分享一篇shell在指定目錄下批量執(zhí)行sql腳本的實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-06-06
win10下如何運(yùn)行.sh文件的實(shí)現(xiàn)步驟
這篇文章主要介紹了win10下如何運(yùn)行.sh文件的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Shell位置變量&預(yù)定義變量的實(shí)現(xiàn)
Shell位置變量和預(yù)定義變量是Shell腳本編程中非常重要的概念,本文主要介紹了Shell位置變量&預(yù)定義變量的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12

