文章目录

  • libreoffice下载地址
  • 安装
  • (第一种) java调用
  • (第二种 推荐) java调用Linux命令转pdf
  • java远程连接Linux执行命令(少数情况)
  • linux安装windows中文字体解决pdf乱码
  • pdf加水印

libreoffice下载地址

https://zh-cn.libreoffice.org/get-help/install-howto/linux/

安装

解压

tar -xvf xxxx.tar.gz

进入解压执行命令

yum install ./LibreOffice_4.x.x_Linux_x86_rpm/RPMS/*.rpm

然后在/opt 下会有文件夹/opt/liberofficex.x

(第一种) java调用

++++++++++++第一种方法,不太推荐++++++++++++++++
依赖

<dependency><groupId>com.github.livesense</groupId><artifactId>jodconverter-core</artifactId><version>1.0.5</version></dependency>
import org.artofsolving.jodconverter.OfficeDocumentConverter;
import org.artofsolving.jodconverter.office.DefaultOfficeManagerConfiguration;
import org.artofsolving.jodconverter.office.OfficeManager;import java.io.File;public class LibreOfficeWordToPDFUtil {//需要解决线程安全问题,防止端口重新启动报错被占用加上synchronized public  static synchronized void libreOfficeToPDF(File inputfile, File outputfile) {// libreOffice的安装目录String LibreOffice_HOME = "/opt/libreoffice7.1";DefaultOfficeManagerConfiguration configuration = new DefaultOfficeManagerConfiguration();configuration.setOfficeHome(new File(LibreOffice_HOME));// 端口号configuration.setPortNumber(8100);configuration.setTaskExecutionTimeout(1000 * 60 * 20L);
//         设置任务执行超时为20分钟configuration.setTaskQueueTimeout(1000 * 60 * 60 * 24L);
//         设置任务队列超时为24小时OfficeManager officeManager = configuration.buildOfficeManager();officeManager.start();OfficeDocumentConverter converter = new OfficeDocumentConverter(officeManager);converter.getFormatRegistry();try {converter.convert(inputfile, outputfile);} catch (Exception e) {e.printStackTrace();} finally {officeManager.stop();}}
}

(第二种 推荐) java调用Linux命令转pdf

不需要专门依赖,经测试直接调用Linux命令不需要synchronized同步,反应更快
参数参考(文件名必须要去掉中间的空格字符)
source=“/home/pdfs/first.docx”
targetDir=“/home/to”
结果->目录下生成pdf文件 /home/to/first.pdf
方法的status正常输出为0

public static String doc2pdf(String source,String targetDir){String cmd="libreoffice7.1 --convert-to pdf:writer_pdf_Export "+source+" --outdir "+targetDir;Integer status=null;Process process=null;try {process=Runtime.getRuntime().exec(cmd);status = process.waitFor();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}finally {process.destroy();}return "ok  NOT synchronized"+status;}

java远程连接Linux执行命令(少数情况)

依赖

<dependency><groupId>ch.ethz.ganymed</groupId><artifactId>ganymed-ssh2</artifactId><version>build210</version>
</dependency>

小案例:测试Linux里 jpg 和 png 的文件数量
参数说明 like可自行设置,这里没用上这个参数

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;public void connectLinux(String like,String hostname, String username,String password){Connection con=null;try {con = new Connection(hostname);con.connect();//登录boolean islog = con.authenticateWithPassword(username, password);// 是否登录成功if (islog== false) {throw new IOException("登录失败");}if (con != null) {Session session = con.openSession();//一个session只能执行一条命令,多条可拼接"\n"//如果要分开多次命令,可再一次openSession//Session s2=con.openSession();//s2.execCommand("ps -ef|grep java*");session.execCommand("cd /home/ftp\n ls -lR ./|grep '.jpg'  |wc -l\n  ls -lR ./|grep '.png'  |wc -l");InputStream stdout = new StreamGobbler(session.getStdout());BufferedReader br = new BufferedReader(new InputStreamReader(stdout));while (true) {String line = br.readLine();if (line == null) {break;}System.out.println(line+"个======文件");}System.out.println("ExitCode:" + session.getExitStatus());}} catch (Exception e) {e.printStackTrace();}finally{// 关闭连接session.close();con.close();}}

linux安装windows中文字体解决pdf乱码

复制C:\windows\Fonts里的字体到linux下的/usr/share/fonts/chinese
直接把文件夹复制过去然后把Fonts改名chinese
linux下若没有目录就创建目录

进入chinese
执行

sudo fc-cache -fv

如果 fc-cache 未找到命令

yum install lsb

生效

source /etc/profile

查看是否有了中文字体

fc-list  |wc -l
fc-list :lang=zh-cn | sort

pdf加水印

依赖

<dependency><groupId>com.itextpdf.tool</groupId><artifactId>xmlworker</artifactId><version>5.5.10</version>
</dependency>
<dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version>
</dependency>
import com.itextpdf.text.Element;
import com.itextpdf.text.pdf.*;import java.io.FileOutputStream;public class PDFWaterUtil {public static void addPDFWater(String pdfFilePath, String outputFilePath) {try {// 原PDF文件PdfReader reader = new PdfReader(pdfFilePath);// 输出的PDF文件内容PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFilePath));BaseFont baseFont = BaseFont.createFont("C:/Windows/Fonts/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
//            BaseFont baseFont = BaseFont.createFont("/usr/share/fonts/chinese/SIMYOU.TTF",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);//BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.EMBEDDED);PdfGState gs = new PdfGState();// 设置透明度gs.setFillOpacity(0.3f);gs.setStrokeOpacity(0.4f);//页数int totalPage = reader.getNumberOfPages() + 1;for (int i = 1; i < totalPage; i++) {// 内容上层
//          PdfContentByte content = stamper.getOverContent(i);// 内容下层PdfContentByte content = stamper.getUnderContent(i);content.beginText();// 字体添加透明度content.setGState(gs);// 添加字体大小等content.setFontAndSize(baseFont, 50);// 添加范围content.setTextMatrix(70, 200);// 具体位置 内容 旋转多少度 共360度content.showTextAligned(Element.ALIGN_CENTER, "logotext", 100, 0, 300);content.showTextAligned(Element.ALIGN_CENTER, "logotext", 200, 80, 300);content.showTextAligned(Element.ALIGN_CENTER, "logotext", 300, 180, 300);content.showTextAligned(Element.ALIGN_CENTER, "logotext", 400, 280, 300);content.endText();}// 关闭stamper.close();reader.close();} catch (Exception e) {e.printStackTrace();}}
}

java使用2种方法操作liberoffice把word转pdf,pdf加水印,java远程调用Linux执行命令相关推荐

  1. java远程调用linux的命令或者脚本

    为什么80%的码农都做不了架构师?>>>    转载请出自出处: http://eksliang.iteye.com/blog/2105862 Java通过SSH2协议执行远程She ...

  2. Java中有几种方法可以实现一个线程??用什么关键字修饰同步方法??stop()和suspend()方法为什么不推荐使用??

    1. Java中有几种方法可以实现一个线程?? 两种,分别是继承thread类和实现Runnable类接口. 第一种: new Thread(){}.start();这表示调用Thread子类对象的r ...

  3. java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和 suspend() 方 法为何不推荐使用?

    60 . java 中有几种方法可以实现一个线程?用什么关键字修饰同步方法 ? stop() 和 suspend() 方 法为何不推荐使用? 答: 有两种实现方法,分别是继承 Thread类与实现Ru ...

  4. Allegro打散Group的两种方法操作指导

    Allegro打散Group的两种方法操作指导 Allegro可以建一个Group,也可以打散一个Group,当不需要器件,过孔走线等等以一个group形式体现,可以用下面的操作打散,具体操作如下 举 ...

  5. pdf怎么加水印,pdf加水印简单方法

    pdf怎么加水印?pdf的使用往往伴随着重要的文件,相信大家都应该比较同意这种观点吧,我们平时在工作中接触到的那些pdf文件往往都是比较重要的,因此小编认为pdf文件的安全级别相对较高.同样,细心的小 ...

  6. pdf怎么加水印?3个方法可完成

    pdf怎么加水印?在平时的工作中,在现今数字化时代,PDF文件是一种非常流行的电子文档格式,因为它可以保留文档的原始样式.字体和布局.我们经常需要使用或者编写一些包含重要信息的PDF文件,并且还会将这 ...

  7. pdf文件加水印怎么加,5个方法快速易学

    PDF文件加水印是一个非常重要且常见的操作,对于不熟悉这一技能的人来说可能会感到困难.这也是为什么在某些浏览器中"pdf文件加水印怎么加"搜索量可高达几百万之多.但是,我们都知道掌 ...

  8. Java调用linux终端命令

    因为要实现用户注册成功后,创建gluster volume,所以就先看了一下,如何使用java调用linux终端命令 示例源码如下: import java.io.InputStreamReader; ...

  9. pdf批量加水印logo的方法

    pdf批量加水印logo的方法!在处理办公文件时,我们经常需要给公司的内部文件或者商务文件添加统一的水印logo,添加水印后的文件可以防止文件被别人恶意盗用.word文件添加水印logo操作起来比较简 ...

最新文章

  1. apply()和call()的区别
  2. Arduino软件开发环境搭建
  3. Windows service无法删除怎么办?
  4. JavaScript高级程序设计(第3版)手写第一天。2019年2月23日,星期六
  5. php显示mysql数据实例_php 连接mysql数据库并显示数据 实例 转载 aoguren
  6. linux 进程 释放内存,Linux 释放内存方法和原理
  7. AI算法连载15:统计之数据降维
  8. JAVA知识基础(十一):异常
  9. java.util (Collection接口和Map接口)
  10. 使用ASP.NET 2.0 Profile存储用户信息
  11. php 英文引号转义,如何用引号转义php exec()命令
  12. python提取表里数据_python提取分析表格数据
  13. Leetcode-链表
  14. 看图识物_‎App Store 上的“认识动物-看图识物大全、学英语”
  15. 月末总结之大三大四规划(8.31)
  16. 设计之星 ai_漫画 |《钢铁之星》:AI肆虐的时代,夹杂人类阴谋
  17. read函数和write函数
  18. 智能客服搭建(1) - MRCP Server 搭建
  19. windows程序和控制台程序
  20. 计算机系统的层次结构 1,1.1 计算机系统的层次结构

热门文章

  1. JPG合成PDF在线网站免费合并
  2. URL的各部分含义详解
  3. java的dowhile循环语句_java do while 循环语句用法
  4. 阻塞/非阻塞 同步/异步
  5. 什么是 GPU 芯片的 CUDA 核心?
  6. 计算机应届博士生的一点求职经验——腾讯篇
  7. WindowsPowerShell 停止、启动、暂停和重启服务、卸载服务
  8. Simulink快速入门:如何搭建仿真模型——以双向直流变换器为例(附模型)
  9. 最短路问题——Java语言实现
  10. html css插图片不显示,新手问个比较弱智的问题我用img标签插入图片显示不出来时怎么回事?_html/css_WEB-ITnose...