# yum install -y libreoffice
编辑 /include/chajian/xinhuapiChajian.php
298行
#if(!contain(PHP_OS,'WIN'))return returnerror('只能在windows的服务器下转化');
建立初始文件
#mkdir ./convert # touch ./convert.sh
#!/bin/bash
#设置系统变量
floder=$(date '+%Y-%m')
time=$(date '+%Y%m%d%H%M')
location=(/www/wwwroot/oagczx/upload)
#因为sed不支持/符号,所以需要加个\
location2=(\/www\/wwwroot\/oagczx\/upload\/)
rundir=(/www/wwwroot/oagczx/tools/convert/tmp)
tools=(/www/wwwroot/oagczx/tools)
jobdir=(/www/wwwroot/oagczx/tools/convert)
#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 -360 -exec basename {} \; >$rundir/doc.list )
docx=$(find $location/$floder -name '*.docx' -mmin -360 -exec basename {} \; >$rundir/docx.list )
xls=$(find $location/$floder -name '*.xls' -mmin -360 -exec basename {} \; >$rundir/xls.list )
xlsx=$(find $location/$floder -name '*.xlsx' -mmin -360 -exec basename {} \; >$rundir/xlsx.list )
ppt=$(find $location/$floder -name '*.ppt' -mmin -360 -exec basename {} \; >$rundir/ppt.list )
pptx=$(find $location/$floder -name '*.pptx' -mmin -360 -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\/oagczx\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.doc /.doc\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/oagczx\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.xlsx /.xlsx\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/oagczx\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.xls /.xls\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/oagczx\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.pptx /.pptx\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/oagczx\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
sed -i "s/.ppt /.ppt\nsoffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/oagczx\/upload\/$floder\//g" `grep -rl "\n" $rundir/`
#由于doc和docx存在重复,所以再修改一次sh文件
#doc+docx
sed -i "s/.docx/.docx --outdir \/www\/wwwroot\/oagczx\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.doc/.doc --outdir \/www\/wwwroot\/oagczx\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.doc --outdir \/www\/wwwroot\/oagczx\/upload\/$floder x/.docx /g" `grep -rl "\n" $rundir/`
#ppt+pptx
sed -i "s/.pptx/pptx --outdir \/www\/wwwroot\/oagczx\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.ppt/.ppt --outdir \/www\/wwwroot\/oagczx\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.ppt --outdir \/www\/wwwroot\/oagczx\/upload\/$floder x/.pptx /g" `grep -rl "\n" $rundir/`
#xls+xlsx
sed -i "s/.xlsx/xlsx --outdir \/www\/wwwroot\/oagczx\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.xls/.xls --outdir \/www\/wwwroot\/oagczx\/upload\/$floder /g" `grep -rl "\n" $rundir/`
sed -i "s/.xls --outdir \/www\/wwwroot\/oagczx\/upload\/$floder x/.xlsx /g" `grep -rl "\n" $rundir/`
#清除最后一个无效soffice执行命令替换为换行
sed -i "s/soffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/oagczx\/upload\/$floder\/ //g" `grep -rl "\n" $rundir/`
sed -i "s/soffice --headless --invisible --convert-to pdf:writer_pdf_Export \/www\/wwwroot\/oagczx\/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
#记录转换日志:开始时间
echo "jobStart:$time" >$jobdir/log/job-$time.log
#记录转换详情
$jobdir/job.sh >>$jobdir/log/job-$time.log
#记录转换日志:结束
echo "jobEND:$time" >>$jobdir/log/job-$time.log
#清理临时文件
rm -rf $rundir/*.list
rm -rf $rundir/*.sh
rm -rf $rundir/*.log最后crontab这个sh每N分钟运行一次即可
如果需要手动转换可以修改*topdf.html,增加手动执行的php链接,同时需要禁用php的exec函数
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"><title>Convert</title>
</head>
<?php
$shell = "/www/rockoa/tools/convert.sh";
exec($shell, $result, $status);
$shell = "<font color='red'>$shell</font>";
echo "<pre>";
if( $status ){
echo "准换进程执行失败";
} else {
echo "转换进程完成!<hr>";
}
echo "</pre>";
?>
<!-- echo "shell命令{$shell}执行失败"; echo "shell命令{$shell}成功执行, 结果如下 print_r( $result );<hr>"; -->
<html><head><body onload='setTimeout("mm()",1000)'> <script>function mm(){ window.opener=null; window.close();} </script></body></head></html>
<div align=center><input type="button" name="close" value="OK" onclick="window.close();" /></div>