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调用代码:

  1. try {
  2. String shpath = "/tmp/topdf.sh";//脚本路径,脚本中需要将源doc路径配置成变量,由下行程序调用时入参
  3. String cmd = "param";//xshell脚本入参
  4. Process ps = Runtime.getRuntime().exec(shpath,cmd);//
  5. ps.waitFor();//等待转换结果
  6. BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
  7. StringBuffer sb = new StringBuffer();
  8. String line;
  9. while ((line = br.readLine()) != null) {
  10. sb.append(line).append("\n");
  11. }
  12. String result = sb.toString();
  13. System.out.println(result);
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  1. #!/bin/sh
  2. echo ${source}
  3. 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

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

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

Linux系统下word转pdf,xls转pdf,ppt转pdf的更多相关文章

  1. 《Java知识应用》Linux系统下word转PDF

    仅供学习,如需商用请联系开发商:https://apireference.aspose.com/java/words Jar包下载路径: 链接: https://pan.baidu.com/s/1s7 ...

  2. Linux系统下Java 转换Word到PDF时,结果文档内容乱码的解决方法

    本文分享在Linux系统下,通过Java 程序代码将Word转为PDF文档时,结果文档内容出现乱码该如何解决.具体可参考如下内容: 1.问题出现的背景 在Windows系统中,使用Spire.Doc ...

  3. Linux系统下用户与组的管理

    Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户: ...

  4. 在Linux系统下运行微信Web开发者工具

    微信Web开发者工具只有window版本和mac版本,如果想要在Linux系统下运行微信Web开发者工具,需要花费很大周折. 注:带 * 的步骤或文件为不确定是否管用的步骤或文件.本人系统为Linux ...

  5. Vi (Unix及Linux系统下标准的编辑器)VIM (Unix及类Unix系统文本编辑器)

    Vi是Unix及Linux系统下标准的编辑器.学会它后,您将在Linux的世界里畅行无阻.基本上vi可以分为三种状态,分别是命令模式.插入模式,和底行模式. vi编辑器是所有Unix及Linux系统下 ...

  6. linux系统下的权限知识梳理

    下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...

  7. linux系统下修改文件夹目录权限

    linux系统下修改文件夹目录权限 文件夹权限问题 Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何 ...

  8. Linux系统下配置JDK环境变量

    刚申请了阿里云,平时很少接触Linux,特此记录一下Linux系统下安装JDK的步骤. 1.进入usr:cd /usr: 2.创建java文件夹:mkdir java: 3.将下载好的文件拷贝至jav ...

  9. Linux系统下远程文件拷贝scp命令

    在Linux系统下,不同机器上实现文件拷贝 一.将本地文件拷贝到远程机器: scp /home/administrator/news.txt root@192.168.6.129:/etc/squid ...

随机推荐

  1. Python杂谈: __init__.py的作用

    我们经常在python的模块目录中会看到 "__init__.py"  这个文件,那么它到底有什么作用呢? 1. 标识该目录是一个python的模块包(module package ...

  2. DataTable,DataView 排序和使用

    我们都知道在Sql Server可以用order by来排序,所以很多朋友在DataTable中排序也想到了用order by关键字.但这样实现是比较困难的,下面,我们讲解一种比较简单的方法: 控制台 ...

  3. 通过Graphics对象获取它所属的Control

    using System.Runtime.InteropServices;   [DllImport("user32.dll")] public static extern Int ...

  4. REDM基础教程1-下载、编译代码

    1.下载DM REDM的更新路径目前有两个,同步更新,可使用SVN或GIT下载对应代码 https://git.oschina.net/hgy413/REDM https://github.com/h ...

  5. U盘免疫

    界面如下: 关键部分代码如下: void CImmunityUDlg::OnBnClickedButtonOk() { // TODO: 在此添加控件通知处理程序代码 TCHAR szPath[MAX ...

  6. Codility---Dominator

    Task description A zero-indexed array A consisting of N integers is given. The dominator of array A ...

  7. 如何让你的Sublime和Codeblocks支持C++11

    闲来没事看了一下C++11,比起C++0x多了很多新功能,像auto变量,智能指针等,g++4.7以上版本也提供了对C++11的支持,但是,如何在你的编辑器上执行C++11代码呢? 刚开始以为用法和以 ...

  8. Hadoop集群(第6期)JDK和SSH无密码配置

    1.Linux配置java环境变量 1.1 解压安装jdk 在shell终端下进入jdk-6u14-linux-i586.bin文件所在目录,执行命令 ./jdk-6u14-linux-i586.bi ...

  9. SYN4505型 标准同步时钟

    SYN4505型 标准同步时钟 标准同步时钟电厂时间同步使用说明视频链接: http://www.syn029.com/h-pd-245-0_310_1_-1.html 请将此链接复制到浏览器打开观看 ...

  10. Spring特点

    1.非侵入式所谓非侵入式是指,Spring框架的API不会在业务逻辑上出现,即业务逻辑是POJO(Plain Old Java Objects).由于业务逻辑中没有Spring的API,所以业务逻辑可 ...