# 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>