• Libreoffice php使用命令行office转pdf,pdf转图片


    我用的方法

    word pdf
    使⽤的是 libreoffice 开源office 系统。
    使⽤命令是 soffice -h
    仅仅使⽤了⼀个⽅法:
    --convert-to output_file_extension[:output_filter_name] [-outdir ouput_dir]
    files
    Batch convert files.
    If -outdir is not specified then current working dir is used as output_dir.
    Eg. -convert-to pdf *.doc
    -convert-to pdf:writer_pdf_Export -outdir /home/user *.doc
    11 使⽤java jod
    libreoffice 第三⽅office⼯具
    安装命令
    yum install libreoffice-headless
    libreoffice-writer
    启动命令
    libreoffice5.4 --headless --accept="socket,host=127.0.0.1,port=8100;urp;" --
    nofirststartwizard &
    javabridge
    java -jar /opt/java/webapps/JavaBridge/WEB-INF/lib/JavaBridge.jar
    SERVLET_LOCALb8080
    查看tomcat的⽅法
    tail -f /opt/java/logs/localhost.2017-09-01.log
    tail -f /opt/java/logs/catalina.log
    java/opt/java/
    程序在 /opt/java/webapps/ 下, enrollCertDemo 天威CA jodconverter为转换
    word to pdf ⼯具
    /root/ghostscript-9.21-linux-x86_64/ pdf转图⽚⼯具

    参考1

    我用的centos系统版本,是6.5版本64位

    1、配置centos的yum源之前我的阿里云服务器的centos,好像因为没有配置yum源而使用系统自带的,通过yum install libreoffice没找到Libreoffice安装包(当然,这可能是我系统版本的问题,具体就不得而知了,因为后来搞不定又继续更换了其他版本的centos)。
    yum源配置,因为我使用的是阿里云服务器,所以我使用阿里云的yum源。
    配置方法:http://mirrors.aliyun.com/help/centos

    2、安装Libreoffice

    1. yum install libreoffice
    复制代码

    然后我使用soffice命令转化doc测试文档

    1. soffice --headless --invisible --convert-to pdf doctest.docx
    复制代码


    然后出现报错了:

    1. /usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display: 
    2.    Set DISPLAY environment variable, use -display option
    3.    or check permissions of your X-Server
    4.    (See "man X" resp. "man xhost" for details)
    5. [root@iZ2zec51rnaynn5uqhupucZ ~]# man x
    6. Cannot open the message catalog "man" for locale "zh_CN.UTF-8"
    7. (NLSPATH="/usr/share/locale/%l/LC_MESSAGES/%N")
    8. No manual entry for x
    复制代码

    后来在这里找到了解决办法:http://superuser.com/questions/6 ... r-cant-open-display
    我执行下面这个命令,然后解决了上面的那个报错问题:

    1. yum install libreoffice-headless
    复制代码

    然后我再通过soffice命令将doc测试文档转成pdf,终于顺利转化成功!

    然而又出现问题了。。。

    转化后的pdf文件,我看到了一个一个密密麻麻的小方框。。乱码!

    然后我通过“locale -a”查看了下,是不是系统不支持中文的问题。然后发现系统是支持中文的。

    1. ....
    复制代码



    那么问题就可能是出现在libreoffice上,然后通过搜索引擎找到了解决办法:http://www.linuxidc.com/Linux/2012-12/77017.htm

    1. yum -y install  libreoffice-langpack-zh-Han*
    复制代码

    centos上运行上面的命令之后,给libreoffice安装了中文的语言支持,然后顺利地把doc测试文档无乱码地转成了pdf文件。

    其实我已经不想说为了解决Libreoffice将office文档转pdf的问题已经让我折腾了三天了。。。Ubuntu和centos系统来回地更换安装测试。不过,还是终于把问题解决了。

    剩下的,pdf.js实现文档在线浏览,请看这个帖子:
    http://www.hc-cms.com/forum.php?mod=viewthread&tid=14

     参考2

    http://blog.csdn.net/ljihe/article/details/77250206

    项目需要,上传doc、excel、ppt等格式文件到服务器,用户可以在线阅读。经过讨论,决定在上传文件的同时,转换出一份pdf文件保存,用户阅读就只需要展示pdf文件即可,下载可以下载原文件。因为pdf文件需要在web页面上展示还是比较方便的,直接使用html的embed标签就能实现,也可以使用一些pdf.js的插件实现:

    [html] view plain copy
     
    1. <!DOCTYPE HTML>  
    2. <html>  
    3. <body>  
    4. <embed src="zpdf.pdf" width="100%" height="600">  
    5. </body>  
    6. </html>  


    首先我们需要将doc等格式的文档转换成pdf,网上搜索一翻,实现方式也就那几种,最主流的就是通过openoffice.org或者libreoffice两种方式实现,其实libreoffice也是从openoffice.org分离出来的,功能上面应该相差不大。对于要实现格式转换,两种库都可以。

    我这里直接使用libreoffice的方式。

    首先安装libreoffice,我的服务器是centos,直接使用:

    [plain] view plain copy
     
    1. [root@instance-32spzihn /]# yum install libreoffice  

    提示是否是要安装,执行y就可以了。

    一般情况下用yum安装的包都不会是最新版本的,想要安装最新版本,只能够自己下载最新的回来,手动编译安装:

    libreoffice官网:http://zh-cn.libreoffice.org/

    目前最新版本:LibreOffice_5.4.0_Linux_x86-64_rpm.tar.gz

    [plain] view plain copy
     
    1. [root@instance-32spzihn src]# tar -zxvf LibreOffice_5.4.0_Linux_x86-64_rpm.tar.gz  
    2. [root@instance-32spzihn src]# cd LibreOffice_5.4.0.3_Linux_x86-64_rpm/RPMS  
    3. [root@instance-32spzihn RPMS]# yum install *.rpm  

    安装完成后执行:

    [plain] view plain copy
     
    1. [root@instance-32spzihn /]# /usr/bin/libreoffice  --invisible --convert-to pdf  zzz.docx  

    如果是自行编译需要带版本号:

    [plain] view plain copy
     
    1. [root@instance-32spzihn /]# /usr/bin/libreoffice5.4  --invisible --convert-to pdf  zzz.docx  

    具体情况可以先用 find / -name 'libreoffice*' 查找出相关的执行程序再处理。

    竟然报错:

    [plain] view plain copy
     
    1. [root@instance-32spzihn /]# /usr/bin/libreoffice  --invisible --convert-to pdf  zzz.docx  
    2. /usr/lib64/libreoffice/program/soffice.bin X11 error: Can't open display:   
    3.    Set DISPLAY environment variable, use -display option  
    4.    or check permissions of your X-Server  
    5.    (See "man X" resp. "man xhost" for details)  


    此时只需要安装另外一个库即可解决:

    [plain] view plain copy
     
    1. [root@instance-32spzihn /]# yum install libreoffice-headless  


    再执行转换命令,转换成功。

    sz zzz.pdf,下载pdf回到本地打开发现中文乱码,这是因为缺少中文字体支付所致,所以先把 c:WindowsFonts文件夹复制一份到其它盘,然后打包成Fonts.zip,通过rz Fonts.zip 将压缩包传到服务器上面。

    [plain] view plain copy
     
    1. [root@instance-32spzihn /]# cd /usr/share/fonts  
    2. [root@instance-32spzihn fonts]# rz  
    3. [root@instance-32spzihn fonts]# unzip Fonts.zip  
    4. [root@instance-32spzihn fonts]# mv Fonts win  
    5. [root@instance-32spzihn fonts]# cd win  
    6. [root@instance-32spzihn win]# chmod  -Rf 755 *  
    7. [root@instance-32spzihn win]# mkfontscale  
    8. [root@instance-32spzihn win]# mkfontdir  
    9. [root@instance-32spzihn win]# fc-cache –fv  

    若没有生效可以试下重启服务器,再重新执行转换命令就可以了。

    完成对文件转换后,那接下来就要将此功能加入项目开发上面,当前需要加入到一个php项目:

    [php] view plain copy
     
    1. $retval = 1;  
    2. // exec() might be disabled  
    3. $cmd = '/usr/bin/libreoffice  --invisible --convert-to pdf  zzz.docx';  
    4. if (function_exists('exec')){  
    5.     @exec($cmd, $output, $retval);  
    6. }  
    7. // Did it work?  
    8. if ($retval > 0){  
    9.     exit('process_failed');  
    10. }  


    具体实现逻辑可以根据自己实际需求做更改,原理就是程序内执行shell命令处理。

  • 相关阅读:
    MySQL:按前缀批量删除表格
    用Parallel.For()和Parallel.For<TLocal>()方法实现并行运行迭代
    用资源管理器右键编译 Visual Studio 解决方案文件
    C#和C++中char类型的区别
    传递给系统调用的数据区域太小。 (异常来自 HRESULT:0x8007007A)
    NHibernate之映射文件配置说明
    warning,C4996,sprintf,deprecated,C4996,strcpy,C4996,strcat
    OPC服务器开发浅谈 — 服务器模型(转)
    进程内COM与进程外COM
    fork()函数
  • 原文地址:https://www.cnblogs.com/jackduan/p/7755446.html
Copyright © 2020-2023  润新知