教你双面纸质文件存档为PDF
一般情况下一些重要纸质的文件需要扫描为电子版存档
但是将纸质文件扫描容易,但是一般单面文件扫描还好。将文件扫描格式设置为PNG或PDF格式后,按照你文件的输出路径,直接扫描就完事
但是对于双面文件咋弄呢?扫描后的多个PDF文件怎样合成一个PDF文件呢?是不是脑壳疼?
这里我想到了强大的shell
下面是我的想法
- 1、先扫正面,输出文件路径为 xxx/A,并将文件设置为PNG格式进行扫描(有的复印机,只支持PNG格式的批量扫描),文件会按照扫描的次序进行命名(再通过shell重名,设置为尾号为奇数的文件名)
- 2、再扫背面,输出文件路径为 xxx/B,由于正面扫描完后,你拿到的文件翻过来后,最后一页变成第一页,扫描完后,文件名名序号和实际序号是反着的(这里你需要通过shell对文件重命名,逆序重命名,并设为偶数的文件名)
- 3、在A文件和B文件合并成一个文件,自此整个文件名就是按正反面有序排序了
- 4、将PNG转成多个PDF文件
- 5、再将多个PDF文件合成一个PDF文件
貌似方法可行
- 首先进行文件奇偶重命名,代码如下:
# 文件重命名,
#第一个参数:参数0表示从1开始依次重命名,1表示文件按奇数命名,2表示文件按偶数命名
reName(){
fileCount=0
# $*遍历所有参数
for para in $*; do
if [[ $para == 1 ]]; then
fileCount=1
else
fileCount=2
fi
done
for tempFile in $(ls *.jpg)
do
name0=$(printf "%05d.jpg" ${fileCount})
echo "原始文件名:$tempFile 新文件名:${name0}";
# 文件重命名
mv "${tempFile}" "${name0}"
# fileCount=$(($fileCount+2))
((fileCount=fileCount+2))
echo "Rename OK"
done
}
echo "文件重命名操作 参数1表示文件按奇数命名,2表示文件按偶数命名"
echo "请输入1或者2"
read paraNum
reName $paraNum
- 接下来是将PNG转为PDF,代码如下
#bash
:<<EOF
描述:获取一个字符串以某个字符分割后的数组
参数:
第一个参数:原字符串
第二个参数:分割的字符
EOF
getCompentsForString(){
paraIndex=0
rString=""
separator=""
for para in $*; do
if [[ $paraIndex == 0 ]]; then
rString=$para
else
separator=$para
fi
((paraIndex = paraIndex +1))
done
#以separator为分割符
OLD_IFS="$IFS"
IFS="$separator"
array=($rString)
IFS="$OLD_IFS"
#获取数组个数
# arrayCount=${#array[@]}
echo ${array[0]}
}
:<<EOF
描述 判读目录中是否存在某一类型文件
EOF
existFile(){
typeName=""
count=0
for i in $*; do
if [[ $count == 0 ]]; then
typeName="$i"
((count = count +1))
fi
done
existCount=0
for temp_file in $(ls *); do
name0="$temp_file"
if [[ $name0 == *$typeName* ]]; then
((existCount = existCount +1))
fi
done
if [[ $existCount == 0 ]]; then
echo "不存在" $typeName "类型文件"
echo 0
else
echo 1
fi
}
:<<EOF
描述 将jpg文件转成PDF
EOF
imageCovert2PDF(){
fileType=""
for tag in $*; do
case $tag in
1) fileType="jpg"
;;
2) fileType="png"
;;
3) fileType="jpeg"
;;
4) fileType="JPG"
;;
5) fileType="PNG"
;;
6) fileType="JPEG"
;;
*) echo "⚠️ ⚠️ ⚠️ 您输入的类型错误❌"
break
;;
esac
done
existFile $fileType
flag=$(existFile $fileType)
file_count=0
success_flag=0
if [[ $flag == 1 ]]; then
for i in $(ls *$fileType); do
((file_count = file_count +1))
done
echo "${fileType}文件个数:${file_count}"
for j in $(ls *$fileType); do
old_name="$j"
# echo "old_name $old_name"
#调用函数
file_name_head=($(getCompentsForString $old_name $fileType))
new_name="${file_name_head}pdf"
magick convert $j $new_name
((success_flag = success_flag +1))
# 转换成功后删除图片文件
rm -f $j
done
fi
if [[ $success_flag == $file_count ]]; then
echo "🍺🍺🍺 恭喜你,已将目录下的所有图片转为PDF文件!🍺🍺🍺"
fi
}
echo "🐴🐴🐴 准备开始将图片转为PDF"
echo "🐴🐴🐴 请输入图片格式: 1->jpg 2->png 3->jpeg 4->JPG 5->PNG 6->JPEG"
read typeNum
imageCovert2PDF $typeNum
- 最后将多个PDF合成单个PDF,代码如下:
pdfunite *.pdf all.pdf
⚠️⚠️⚠️⚠️⚠️
- PNG转PDF需要imagemagic支持(ImageMagic: http://www.imagemagick.com.cn/index.html)
// 安装imagemagic安装包
brew install imagemagic
- PDF合成则需要poppler支持
// 安装poppler安装包
brew install poppler
结果Nice,🍺🍺🍺 enjoy it!
(限于水平,本文可能存在瑕疵甚至错误的地方。如有发现,还请留言指正,相互学习。thx! )
KEEP LOOKING, DON`T SETTLE!

浙公网安备 33010602011771号