libreoffice命令⾏⽅式将word、excel、ppt转成pdf
项⽬需要,上传doc、excel、ppt等格式⽂件到服务器,⽤户可以在线阅读。经过讨论,决定在上传⽂件的同时,转换出⼀份pdf⽂件保存,⽤户阅读就只需要展⽰pdf⽂件即可,下载可以下载原⽂件。因为pdf⽂件需要在web页⾯上展⽰还是⽐较⽅便的,直接使⽤html的embed标签就能实现,也可以使⽤⼀些pdf.js的插件实现:
<!DOCTYPE HTML>
<html>
<body>
<embed src="zpdf.pdf" width="100%" height="600">
</body>
</html>
⾸先我们需要将doc等格式的⽂档转换成pdf,⽹上搜索⼀翻,实现⽅式也就那⼏种,最主流的就是通过o
<或者libreoffice两种⽅式实现,其实libreoffice也是从分离出来的,功能上⾯应该相差不⼤。对于要实现格式转换,两种库都可以。
我这⾥直接使⽤libreoffice的⽅式。
⾸先安装libreoffice,我的服务器是centos,直接使⽤:
[root@instance-32spzihn /]# yum install libreoffice
提⽰是否是要安装,执⾏y就可以了。
⼀般情况下⽤yum安装的包都不会是最新版本的,想要安装最新版本,只能够⾃⼰下载最新的回来,⼿动编译安装:
⽬前最新版本:LibreOffice_5.4.0_Linux_x86-64_
[root@instance-32spzihn src]# tar -zxvf LibreOffice_5.4.0_Linux_x86-64_
[root@instance-32spzihn src]# cd LibreOffice_5.4.0.3_Linux_x86-64_rpm/RPMS
[root@instance-32spzihn RPMS]# yum install *.rpm
安装完成后执⾏:
[root@instance-32spzihn /]# /usr/bin/libreoffice --invisible --convert-to pdf zzz.docx
excel最强教科书完全版pdf如果是⾃⾏编译需要带版本号:
[root@instance-32spzihn /]# /usr/bin/libreoffice5.4 --invisible --convert-to pdf zzz.docx
具体情况可以先⽤ find / -name 'libreoffice*' 查出相关的执⾏程序再处理。
竟然报错:
[root@instance-32spzihn /]# /usr/bin/libreoffice --invisible --convert-to pdf zzz.docx
/usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display:
Set DISPLAY environment variable, use -display option
or check permissions of your X-Server
(See "man X" resp. "man xhost" for details)
此时只需要安装另外⼀个库即可解决:
[root@instance-32spzihn /]# yum install libreoffice-headless
再执⾏转换命令,转换成功。
sz zzz.pdf,下载pdf回到本地打开发现中⽂乱码,这是因为缺少中⽂字体⽀付所致,所以先把 c:\Windows\Fonts⽂件夹复制⼀份到其它盘,然后打包成Fonts.zip,通过rz Fonts.zip 将压缩包传到服务器上⾯。
[root@instance-32spzihn /]# cd /usr/share/fonts
[root@instance-32spzihn fonts]# rz
[root@instance-32spzihn fonts]# unzip Fonts.zip
[root@instance-32spzihn fonts]# mv Fonts win
[root@instance-32spzihn fonts]# cd win
[root@instance-32spzihn win]# chmod -Rf 755 *
[root@instance-32spzihn win]# mkfontscale
[root@instance-32spzihn win]# mkfontdir
[root@instance-32spzihn win]# fc-cache –fv
若没有⽣效可以试下重启服务器,再重新执⾏转换命令就可以了。
完成对⽂件转换后,那接下来就要将此功能加⼊项⽬开发上⾯,当前需要加⼊到⼀个php项⽬:
$retval = 1;
// exec() might be disabled
$cmd = '/usr/bin/libreoffice --invisible --convert-to pdf zzz.docx';
if (function_exists('exec')){
@exec($cmd, $output, $retval);
}
/
/ Did it work?
if ($retval > 0){
exit('process_failed');
}
具体实现逻辑可以根据⾃⼰实际需求做更改,原理就是程序内执⾏shell命令处理。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论