Linux系统下word转pdf,xls转pdf,ppt转pdf

word转换pdf的技术方案,供参考。【doc/docx/ppt/pptx/xls/xlsx均支持转换】
 
         本方案是Java结合shell命令完成,不同于以往的仅依赖java组件转换或打印pdf的方案,需要目标服务器安装office套件,可选方案有OpenOffice和LibreOffice[二者源是一家产品],安装完office套件后,使用office提供的脚本完成转换。安装LibreOffice时,为避免复杂的依赖关系,建议采用yum方式安装: yum install libreoffice
 
         脚本内容: soffice --headless --invisible --convert-to pdf 源office文档路径 --outdir 目录存储目录

 
需要将以上脚本编写成sh脚本的形式,其中源路径需要配置成参数,由Java程序调用sh脚本时传入,转换结束后,到指定的目录可取到同名的pdf文档,再进行与业务相关的逻辑处理。注:临时目录需要定期清理,防止存储过多临时文档,导致磁盘占满。

Java调用代码:

  try {
            String shpath = "/tmp/topdf.sh";//脚本路径,脚本中需要将源doc路径配置成变量,由下行程序调用时入参
String cmd = "param";//xshell脚本入参
            Process ps = Runtime.getRuntime().exec(shpath,cmd);//
            ps.waitFor();//等待转换结果

            BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
            StringBuffer sb = new StringBuffer();
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line).append("\n");
            }
            String result = sb.toString();
            System.out.println(result);
        } catch (Exception e) {
            e.printStackTrace();
        }
 

 

#!/bin/sh  
  
source=$1
echo ${source} 
soffice --headless --invisible --convert-to pdf ${source} --outdir /tmp/
 

 

但发现运行一段时间命令不再响应,没有文档结果。经检查服务器,libreoffice运行良好,但soffice --convert-to 命令就是无响应无输出。查看活跃线程如下:

 


 

有两个相关的活跃实例在运行。

 

经翻阅资料,这是LO在2011年产生的一个bug,相关bug list 参考:

https://bugs.documentfoundation.org/show_bug.cgi?id=37531 

扫描二维码关注公众号,回复: 285566 查看本文章

https://bugs.documentfoundation.org/show_bug.cgi?id=45026     



大体意思是LO GUI实例一旦运行过一个,再运行一个实例的话,就会出现无响应的问题。解决思路有两个:

1、杀掉所有的libreoffice实例,即将上面的两个实例杀掉

2、执行命令时增加一行参数,经测试下面两条命令均可以执行【必须保证命令的执行要有权限】:

soffice --headless --convert-to pdf ${source-file} --outdir ${target-path}  "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}"

soffice --headless --convert-to pdf ${source-file} --outdir ${target-path}  -env:UserInstallation=file:///home/user/.libreoffice-alt     

 

 

程序员,除了编码,生活还应该有沉淀!

 

 

猜你喜欢

转载自bakcom.iteye.com/blog/2397446