美文网首页
Word转PDF,PDF转swf

Word转PDF,PDF转swf

作者: 哎哟我去 | 来源:发表于2019-10-04 21:29 被阅读0次
    • 之前写过一个word转html的,这个又来转swf了,原理差不多,重新记录一下.

    方案思路:

    通过PHP执行shell命令,使用Libreoffice对文件进行转换(不仅可以转换为PDF),再用swftools将PDF转换为swf;
    

    环境+需要的软件:

    centos7 + libreoffice + unoconv + swftools
    
    • 文件转换为PDF(或者libreoffice支持的格式)

    安装libreoffice:

    • 使用yum直接安装:

    yum install libreoffice

    • 为了防止中文乱码,再装上中文语言支持:

    yum -y install libreoffice-langpack-zh-Han*

    • 为了能够命令行参数启动libreoffice,再安装:

    yum install libreoffice-headless

    • 最后安装unoconv方便命令行来执行转换:
    wget https://raw.githubusercontent.com/dagwieers/unoconv/master/unoconv
    
    chmod +x unoconv
    ln -s /usr/libreoffice/unoconv /usr/bin/unoconv
    
    yum install unoconv
    
    • 到此已经可以用命令行将文件转换为pdf(其他支持的格式)了:

    1 .需要注意的第一点是:shell命令需要写对文件路径,下面代码会有演示

    2 .直接使用命令行可以执行转换,但是浏览器不行,需要进行如下操作:

    必须把www加入root权限组,并且设置为不需要root密码:设置步骤:打开/etc/sudoers文件,100行左右的地方加上这么一句:
    "www    ALL=(ALL)   NOPASSWD: ALL"
    

    3 .如果没有找到上述的sudoer文件的话需要先安装sudo:
    yum -y install sudo

    代码演示

            //原文件
            $org_file = \ROOT_PATH . 'public' . '/upload/file/2019-09-10/008.xlsx';
            //转成pdf的文件
            $out_pdf = \ROOT_PATH . 'public' . '/upload/file/2019-09-10/008.pdf';
            //拼接的shell命令
            $file2pdf = "sudo /usr/bin/unoconv -f pdf -o " . $org_file . " " . $out_pdf;
            //执行文件转换:PDF
            \shell_exec($file2pdf);
            if (!\file_exists($out_pdf)) {
                exit('文件转换失败~');
            }
    
    • 将PDF转换为swf

    • 因为IE并不能直接打开PDF文件,所以需要预览的话还得转换为swf

    • 这里就需要安装swftools了

    安装swftools

    1 .安装所需的库和组件,如果不安装会提示machine `x86_64-unknown-linux' not recognized

    yum install gcc* automake zlib-devel libjpeg-devel giflib-devel freetype-devel

    2 .下载编译安装swftools

    wget http://www.swftools.org/swftools-2013-04-09-1007.tar.gz
    tar vxzf swftools-2013-04-09-1007.tar.gz
    cd swftools-2013-04-09-1007.tar.gz
    ./configure --prefix=/usr/swftools
    make
    make install
    

    3 .设置swftools环境变量,使pdf2swf成为一个可执行命令
    vim /etc/profile
    在末尾添加:export PATH=$PATH:/usr/swftools/bin/

    4 .验证是否生效

    1)拷贝一个带有表格等复杂编排的word文件到home目录,如any.docx

    2)执行 unoconv -f pdf any.docx

    3)执行 pdf2swf any.pdf any.swf

    • 最终的代码(不包含业务逻辑)

    /**
         * @return string
         * 因为IE不能打开PDF,所以需要转换为swf,
         * 因为chrome默认关闭flash,会直接下载swf,所以返回pdf
         * 实际项目里需要判断浏览器类型
         */
        public function fileConversion()
        {
            //原文件
            $org_file = \ROOT_PATH . 'public' . '/upload/file/2019-09-10/008.xlsx';
            //转成pdf的文件
            $out_pdf = \ROOT_PATH . 'public' . '/upload/file/2019-09-10/008.pdf';
            //拼接的shell命令
            $file2pdf = "sudo /usr/bin/unoconv -f pdf -o " . $org_file . " " . $out_pdf;
            //执行文件转换:PDF
            \shell_exec($file2pdf);
            if (!\file_exists($out_pdf)) {
                exit('文件转换失败~');
            }
            //为了沙雕IE能用再把pdf专为swf
            $out_swf = \ROOT_PATH . 'public' . '/upload/file/2019-09-10/008.swf';
            \shell_exec('sudo /usr/swftools/bin/pdf2swf' . ' ' . $out_pdf . ' ' . $out_swf);
            if (\file_exists($out_swf)) {
                //返回swf的路径给浏览器
                $out_swf_path = '/upload/file/2019-09-10/008.swf';
                return $out_swf_path;
            } else {
                exit('文件转换失败~~');
            }
        }
    

    相关文章

      网友评论

          本文标题:Word转PDF,PDF转swf

          本文链接:https://www.haomeiwen.com/subject/hajiyctx.html