OpenOfficean安装和使用

一.windos 安装

1. 检查 java  环境


OpenOfficean安装和使用_第1张图片

没有Java 环境,请先安装jdk。


2. 下载OpenOffice 

OpenOffice 官网:http://www.openoffice.org/

OpenOffice 下载:http://www.openoffice.org/download/index.html

3. 安装OpenOffice 


4.配置组件服务


OpenOffice 安装完成之后,按 win+R 快捷键进入运行菜单,输入 Dcomcnfg 打开组件服务。

[组件服务] >> [计算机] >> [我的电脑] >> [DCOM配置] >> [OpenOffice Service Manager]


OpenOfficean安装和使用_第2张图片

右键打开属性面板,选择安全选项卡,分别在 启动和激活权限 和 访问权限 上勾选自定义,添加 Everyone 的权限。


OpenOfficean安装和使用_第3张图片

↑ 启动和激活权限 和 访问权限 都使用自定义配置


OpenOfficean安装和使用_第4张图片

↑ 添加 Everyone 用户组,记得确认前先检查名称


OpenOfficean安装和使用_第5张图片

↑ 两个自定义配置相同,允许 Everyone 拥有所有权限

再选择标识选项卡,勾选 交互式用户,保存设置后退出。

5.启动后台服务

安装完 OpenOffice 后,需要启动一次确认软件可以正常运行,然后再打开命令行运行以下命令:

切换到安装目录:  cd  C:\Program Files (x86)\OpenOffice 4\program

后台运行该软件: soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard 

PS:该命令只需要执行一次,就可以使软件一直在后台运行,即使重启服务器也不受影响。

6. 配置PHP扩展

如果是 PHP5.4 以前的版本,需要在 php.ini 里把 com.allow_dcom = true 打开(即去掉前面的分号)。

如果是 PHP5.4 之后的版本,则要在 php.ini 里增加一行扩展 extension = php_com_dotnet.dll 。

重启 Apache 或 IIS 服务器,打印 phpinfo() 信息,检查 com_dotnet 扩展是开启。


7. 转换类

namespace common\models;

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2018/11/22 0022

* Time: 13:55

*/

// pdf转化类

class PDFConverter extends \yii\base\Model

{

    private $com;

    /**

* need to install openoffice and run in the background

* soffice -headless-accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

*/

    public function __construct()

{

        try {

            // 注意:

            // 在yii框架下,COM前面必须加"\",否则找不到COM类

            $this->com = new \COM('com.sun.star.ServiceManager');

        } catch (Exception $e) {

            die('Please be sure that OpenOffice.org is installed.');

}

}

    /**

* Execute PDF file(absolute path) conversion

    * @param $source [source file]

    * @param $export [export file]

*/

    public function execute($source, $export)

{

        $source = 'file:///' . str_replace('\\', '/', $source);

        $export = 'file:///' . str_replace('\\', '/', $export);

        $this->convertProcess($source, $export);

}

    /**

* Get the PDF pages

    * @param $pdf_path [absolute path]

    * @return int

*/

    public function getPages($pdf_path)

{

        if (!file_exists($pdf_path)) return 0;

        if (!is_readable($pdf_path)) return 0;

        if ($fp = fopen($pdf_path, 'r')) {

            $page = 0;

            while (!feof($fp)) {

                $line = fgets($fp, 255);

                if (preg_match('/\/Count [0-9]+/', $line, $matches)) {

                    preg_match('/[0-9]+/', $matches[0], $matches2);

                    $page = ($page < $matches2[0]) ? $matches2[0] : $page;

}

}

            fclose($fp);

            return $page;

}

        return 0;

}

    private function setProperty($name, $value)

{

        $struct = $this->com->Bridge_GetStruct('com.sun.star.beans.PropertyValue');

        $struct->Name = $name;

        $struct->Value = $value;

        return $struct;

}

    private function convertProcess($source, $export)

{

        $desktop_args = array($this->setProperty('Hidden', true));

        $desktop = $this->com->createInstance('com.sun.star.frame.Desktop');

        $export_args = array($this->setProperty('FilterName', 'writer_pdf_Export'));

        $program = $desktop->loadComponentFromURL($source, '_blank', 0, $desktop_args);

        $program->storeToURL($export, $export_args);

        $program->close(true);

}

}

二、Ubuntu16.04安装

linux 下面缺少COM,所以做法和windos 不同

cd /home/daiven/downloads 

下载地址: 

http://www.openoffice.org/download/index.html

OpenOfficean安装和使用_第6张图片

或从下面的分享连接下载:

链接:https://pan.baidu.com/s/1EqdSd3s32KwNSI2_Kq51NA

提取码:d2nd

用FTP上传到服务器/home/daiven/downloads

解压

tar -zxvf Apache_OpenOffice_4.1.2_Linux_x86-64_install-deb_zh-CN.tar.gz 

mv zh-CN/ Apache_OpenOffice4.1.2

cd Apache_OpenOffice4.1.2/DEBS

 sudo dpkg -i *.deb


cd /home/daiven/downloads/Apache_OpenOffice4.1.2/DEBS/desktop-integration

ls

openoffice4.1-debian-menus_4.1.2-9782_all.deb

安装菜单项,必须安装该菜单项后,刚才安装的OpenOffice才能够使用。 

(在/DEBS/desktop-integration 目录下)

sudo dpkg -i openoffice4.1-debian-menus_4.1.2-9782_all.deb 

//$sudo dpkg -i 安装即可

到这里,安装完成

开启后台服务

cd  /opt/openoffice4/program/

nohup ./soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

打开另一个窗口,执行下面的命令:

ps as | grep soffice

显示如下:

    0 21905 0000000000000000 0000000000000000 0000000000000001 0000000000014002 S    pts/1      0:00 /bin/sh ./soffice -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard

    0 21914 0000000000000000 0000000000000000 0000000000001000 00000001fbc064f7 Sl  pts/1      0:00 /opt/openoffice4/program/soffice.bin -headless -accept=socket,host=127.0.0.1,port=8100;urp; -nofirststartwizard

    0 21932 0000000000000000 0000000000000000 0000000000000000 0000000180000000 S+  pts/2      0:00 grep --color=autosoffice


2. 下载JODConverter

https://sourceforge.net/projects/jodconverter/files/latest/download

    解压:

unzip jodconverter-2.2.2.zip

    进入目录:

cd jodconverter-2.2.2/lib

    测试转换(test.docx=>test.pdf):

java -jar jodconverter-cli-2.2.2.jar test.docx test.pdf

返回信息如下:

Nov 22, 2018 8:05:33 PM com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection connect

INFO: connected

Nov 22, 2018 8:05:33 PM com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection disposing

INFO: disconnected

经过测试发现,格式转换成功,只是中文字体没有转换出来,解决如下:

下载 simhei.ttf 黑体 ,simsun.ttc 宋体两种字体文件 ,找到jre的字体路径:/usr/share/fonts,新建文件夹fallback(mkdir fallback),将字体simhei.ttf 、simsun.ttc拷贝到/usr/share/fonts/fallback目录下,

将winows 的字体拷贝到/usr/share/fonts/fallback 目录下

重启  openoffice

   php调用

$command = "java -jar /home/daiven/downloads/jodconverter-2.2.2/lib/jodconverter-cli-2.2.2.jar test.docx test.pdf";

//exec($command, $output);

//system($command);

//passthru($command);

调用出现如下错误:
 passthru() has been disabled for security reasons

 exec() has been disabled for security reasons

system() has been disabled for security reasons

解决:

编辑php.ini文件

disable_functions = scandir,passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen

去掉passthru,exec,system 保存并重起php-fpm即可。


目前存在的问题:

不管是标题含有中文还是内容含有中文,都不能转换,需要设置字体。。。。。

你可能感兴趣的:(OpenOfficean安装和使用)