最近有需求,需要将ppt文件转换成一个长截图,手上的电脑是manjaro系统和weindows双系统,日常使用manjaro,也懒得切换系统做切换,而且linux工具更多,在linux上操作更方便,最后选择用shell脚本来处理这个问题。
查询几种工具,确定linux下没有直接一步到位从ppt文件转换成长截图的工具,最后选择方案只能是先转换成pdf后再转换成长截图。
首先是选择libreoffice软件进行ppt格式文件转pdf,首先是要先安装这个软件,在manjaro上安装比较方便,直接执行下面的代码就行。如果没有yay建议先安装这个,这个包管理安装AUR上的软件实在是太方便了。
yay -S libreoffice
libreoffice转换的使用方法:
libreoffice --convert-to pdf:writer_pdf_Export in_filename --outdir out_filename
本来计划使用pdftopm将pdf转换成长图片但是发现这个工具不行,只能将pdf转换成一张张的图片,不能转成长图片,最后选择imageMagick来将图片合成长图片。
#!bin/bash
pdf_to_png(){
current_path=`pwd`
ls *.pptx>./tmp.txt
while read fullfilename;
do
filename=${fullfilename%.*} #取文件名而不要文件后缀
if [ -f "${filename}.png" ];then
continue
fi
date +"%Y-%m-%d %X"
echo 正在将pptx文件转换成PDF
libreoffice --convert-to pdf:writer_pdf_Export "${fullfilename}" --outdir .
echo 正在将PDF转换成图片
pdftoppm -png -f 1 -l 7 ./"${filename}".pdf ./tmp
rm -f "${filename}".pdf
echo 正在将图片拼接成长图片
convert -append ./tmp-*.png "${filename}".png
rm -f ./tmp-*.png
date +"%Y-%m-%d %X"
echo ------------------------------------
done<./tmp.txt
rm ./tmp.txt
}
fun(){
if [ -n "$(ls -F | grep '/$')" ];then
ls -F | grep '/$'>./tmp.txt
while read line;
do
cd "${line}"
fun
cd ..
done<./tmp.txt
else
echo `pwd`
fi
}
fun
在写脚本的时候发现,要转的文件名经常有空格,操作的时候特别怪,经常找不到东西,后面没办法,把读取文件名这一步的内容写到文件里,一次读一行,这样就不会出现操作时空格碍事了。
处理这个过程最痛苦的是速度,因为设备原因转化起来不是特别快,只能挂载后台处理。如果有哪位大佬有更快的方法还请评论区指导一下。