centos7.4下利用LibreOffice部署Office文档本地PDF转换服务


安装Libreoffice

# yum install -y libreoffice

建立Bash

#mkdir ./convert
#touch ./convert.sh
#chmod +x ./convert.sh
#vi./convert.sh

#!/bin/bash
#建立相关文件夹
#mkdir $jobdir $jobdir/log $jobdir/tmp && clear
#设置系统变量
floder=$(date '+%Y-%m')
time=$(date '+%Y%m%d%H%M')
location=(/www/wwwroot/dir/upload)
rundir=(/www/wwwroot/dir/tools/convert/tmp)
tools=(/www/wwwroot/dir/tools)
jobdir=(/www/wwwroot/dir/tools/convert)
logdir=(/www/wwwroot/dir/tools/convert/log)
#pdffile=$(find $location/$floder -name '*.pdf'  -exec basename {} \; > $rundir/pdf.list )
up=($location/$floder)
soffice=(/opt/libreoffice6.3/program/soffice)

#find搜索变量,用于搜索-mmin - * 分钟内的*.type 类型文件 写入 $rundir/下的list文件内
doc=$(find   $location/$floder -name '*.doc'  -mmin -15    -exec basename {} \; >$rundir/doc.list )
docx=$(find  $location/$floder -name '*.docx' -mmin -15    -exec basename {} \; >$rundir/docx.list )
xls=$(find   $location/$floder -name '*.xls'  -mmin -15    -exec basename {} \; >$rundir/xls.list )
xlsx=$(find  $location/$floder -name '*.xlsx' -mmin -15    -exec basename {} \; >$rundir/xlsx.list )
ppt=$(find   $location/$floder -name '*.ppt'  -mmin -15    -exec basename {} \; >$rundir/ppt.list )
pptx=$(find  $location/$floder -name '*.pptx' -mmin -15    -exec basename {} \; >$rundir/pptx.list )

#list变量,catlist文件去掉find生成的list文件内的换行符,文件名单行排列
doclist=$(cat $rundir/doc.list |tr '\n' '  ')
docxlist=$(cat $rundir/docx.list |tr '\n' '  ')
xlslist=$(cat $rundir/xls.list |tr '\n' '  ')
xlsxlist=$(cat $rundir/xlsx.list |tr '\n' '  ')
pptlist=$(cat $rundir/ppt.list |tr '\n' '  ')
pptxlist=$(cat $rundir/pptx.list |tr '\n' '  ')

#将soffice执行语句写入/type.sh,并利用chmod +x赋予执行权限(把这行语句设置为变量不能使用???)
echo "soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export $location/$floder/$doclist  "> $rundir/doc.sh  && chmod +x $rundir/doc.sh 
echo "soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export $location/$floder/$docxlist "> $rundir/docx.sh && chmod +x $rundir/docx.sh 
echo "soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export $location/$floder/$xlslist  "> $rundir/xls.sh  && chmod +x $rundir/xls.sh 
echo "soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export $location/$floder/$xlsxlist "> $rundir/xlsx.sh && chmod +x $rundir/xlsx.sh 
echo "soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export $location/$floder/$pptlist  "> $rundir/ppt.sh  && chmod +x $rundir/ppt.sh 
echo "soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export $location/$floder/$pptxlist "> $rundir/pptx.sh && chmod +x $rundir/pptx.sh 

#sed修改完善type.sh文件内容,如不执行,则生成的文件为 执行语句 $location/file1 file2 file3,实测证明soffice无法执行此命令,会导致error,所以需要每行添加一次执行
sed -i "s/.docx /.docx\nsoffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.doc /.doc\nsoffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.xlsx /.xlsx\nsoffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.xls /.xls\nsoffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.pptx /.pptx\nsoffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.ppt /.ppt\nsoffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\//g" `grep -rl "\n" $rundir/`


#由于doc和docx存在重复,所以再修改一次sh文件
#doc+docx
sed -i "s/.docx/.docx --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.doc/.doc --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.doc --outdir \/www\/wwwroot\/dir\/upload\/$floder x/.docx  /g" `grep -rl "\n" $rundir/` 

#ppt+pptx
sed -i "s/.pptx/.pptx --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.ppt/.ppt --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.ppt --outdir \/www\/wwwroot\/dir\/upload\/$floder x/.pptx  /g" `grep -rl "\n" $rundir/`
#xls+xlsx
sed -i "s/.xlsx/.xlsx --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.xls/.xls --outdir \/www\/wwwroot\/dir\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.xls --outdir \/www\/wwwroot\/dir\/upload\/$floder x/.xlsx  /g" `grep -rl "\n" $rundir/`

#清除没有文件名的soffice执行命令替换为换行/实测换行不会导致报错
sed -i "s/soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\/  //g" `grep -rl "\n" $rundir/`
sed -i "s/soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\/ //g" `grep -rl "\n" $rundir/`
#sed -i "s/soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/$floder\/  //g" `grep -rl "\n" $rundir/`

#记录需要转换的文件名
#cat $rundir/*.list >$jobdir/log/filelist-$time.log

#合并为job.sh并赋予执行权限
cat $rundir/*.sh >$jobdir/job.sh
chmod +x $jobdir/job.sh

#清除最后一个无效soffice执行命令替换为换行
#sed -i "s/soffice   --headless --invisible  --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/dir\/upload\/  //g" `grep -rl "\n" $jobdir/job.sh`

#设置当前时间变量
#now=$(date '+%Y%m%d%H%M')
#记录转换日志:开始时间
#echo -e "\njobStart:$time" >>$jobdir/log/job.log

#记录转换详情
#$jobdir/job.sh >>$jobdir/log/job.log

#转换不记录转换详情
$jobdir/job.sh 

#记录转换日志:结束
#echo "jobEND:$time" >>$jobdir/log/jobend-$time.log

#清理临时文件
rm -rf $rundir/*.list
rm -rf $rundir/*.sh
rm -rf $rundir/*.log
  

最后crontab这个sh每N分钟运行一次即可,下一步想试试看 有文件上传就直接转换;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigKay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值