教你双面纸质文件存档为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

⚠️⚠️⚠️⚠️⚠️

// 安装imagemagic安装包 
brew install imagemagic
  • PDF合成则需要poppler支持
// 安装poppler安装包
brew install poppler

结果Nice,🍺🍺🍺 enjoy it!

posted @ 2020-07-15 22:51  ITRyan  阅读(736)  评论(0)    收藏  举报