Java中使用openoffice插件进行文件转换pdf并添加水印小结

openoffice插件安装启动

不管是windows还是linux的安装包,都可以到openoffice的官网上直接下载,下载地址如下:http://www.openoffice.org/zh-cn/download

一、windows下的安装启动

windows下的安装较为简单,直接在官网上下载安装包一直点击下一步安装即可,这里不做进一步记录。启动步骤如下:

  1. 打开CMD界面,通过cd命令进入到openoffice下的program文件夹中,例如:cd D:\Program Files (x86)\OpenOffice 4\program
  2. 输入命令:soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

为方便启动,可以创建一个bat处理文件,下次启动直接点击即可。具体创建方法,先新建一个txt文本,在文本中输入对应代码,再修改文件后缀名为bat即可。文本中输入代码如下:

@echo off
cd  C:\Program Files (x86)\OpenOffice 4\program
soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

二、Linux下的安装启动

1、安装步骤

  1. 在官网中下载对应的linux安装包,分别有deb和rpm格式的32位、64位,目前大部分使用的linux系统应该都是支持rpm格式的,此处选择下载rpm的64位,后续安装启动步骤也是针对此版本。
    如果需要查询系统支持哪种格式,可以使用一下命令,如果rpm命令能获得版本号,则支持rpm,反之则是支持deb:
rpm --version
dpkg --version
  1. 上传gz包到/usr/local/src/openoffice(可以自己选择目录,但后续代码相应要做路径修改)。此处上传选择使用winscp之类的工具直接进行上传,没有使用命令等。
  2. 使用以下命令进行解压(注意文件路径正确):
cd /usr/local/src/openoffice
tar -zxvf Apache_OpenOffice_4.1.7_Linux_x86-64_install-rpm_zh-CN.tar.gz
  1. 进入解压后文件夹中的RPMS目录,安装rpm文件,具体命令如下(注意文件路径正确):
cd /usr/local/src/openoffice/zh-CN/RPMS
rpm -ivh *.rpm
  1. 进入desktop-integration目录,安装openoffice,具体命令如下(注意文件路径正确):
cd desktop-integration
rpm -ivh openoffice4.1.7-redhat-menus-4.1.7-9800.noarch.rpm

2、linux下非txt文件中文乱码问题处理

如果需要转换的文档涉及中文内容,则此步骤为必须步骤,否则所有文档类型中的中文内容都将因缺少中文字体而变成乱码。(注意:txt一类纯文本类型的中文乱码比较特殊,此处解决方法并不能处理,后续会专门讲述该问题。
具体处理步骤如下:

  1. 上传simhei.ttf、simsun.ttc两个文件到/usr/java/jdk1.8.0_161/jre/lib/fonts/fallback。
    文件可以在windows系统中查找,具体位置可能不一样,楼主的windows10是放C:\Windows\WinSxS中。
    上传方式仍是使winscp之类的工具上传,具体的jdk位置视个人而定。

  2. 复制/usr/java/jdk1.8.0_161/jre/lib/fonts到/usr/share/fonts并更新缓存,具体命令如下(仍要注意两个路径是自己的啊):

cp -rf /usr/java/jdk1.8.0_161/jre/lib/fonts /usr/share/fonts
fc-cache

如果提示fc-cache: command not found,则需要先安装字体命令,再执行该命令。安装字体命令的语句如下:

yum install fontconfig
  1. 如果已启动openoffice,则需要关闭后重启才能生效。具体关闭方法可以使用ps -ef|grep openoffice命令获取对应的进程号,再用kill -9 进程号杀死进程即可。启动方法接下来会再记录。

3、启动方法

启动方法较为简单,直接使用以下命令即可(注意路径正确):
nohup /opt/openoffice4/program/soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

建议进行一下自动启动设置,方便后续系统重启能自动启动,直接在/etc/rc.local文件最后换行添加如下命令即可:nohup soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard &

查看是否启动成功可以使用命令ps -ef|grep openoffice,如果有进程则是启动成功,相应的可以根据查询到的进程号使用kill -9 进程号命令杀死进程关闭openoffice。

启动时可能遇到一下问题:

  1. 启动时出现:error while loading shared libraries: libXext.so.6: cannot open shared object file: No such file or directory
    解决:这个是找不到libXext.so.6文件。去系统里面的/usr/lib64中或者/usr/lib,查看有没有这个文件,如果有就用cp命令复制到/opt/openoffice4/program/目录里面,赋予权限chmod 777 libXext.so.6
    如果没有,需要安装:yum install libXext.x86_64(64位) (yum install libXext.i686 32位)。
  2. 启动时提醒:no suitable windowing system found, exiting
    解决yum groupinstall "X Window System"

Java中使用openoffice转换pdf

一、jar包引用

openoffice需要特别引用的jar包主要有以下两个:

  • jodconverter-local-4.3.0.jar
  • commons-io-2.6.jar
    如果为非maven项目,则需要自己找jar包下载,如果为maven项目,则可以按照以下引用:
<dependency>
	<groupId>commons-io</groupId>
	<artifactId>commons-io</artifactId>
	<version>2.6</version>
</dependency>
<dependency>
	<groupId>org.jodconverter</groupId>
	<artifactId>jodconverter-local</artifactId>
	<version>4.3.0</version>
</dependency>

二、调用方法

File thisFile = new File("D://file.doc");
final LocalOfficeManager officeManager = LocalOfficeManager.install();
try {
	officeManager.start();
	File file = new File(pdfDocumentPath);
	JodConverter.convert(thisFile).to(file).execute();
}catch (Exception e){
	GRGLogger.info("+++++++++++转换PDF失败 +++++++++++++++");
	return false;
}finally {
	OfficeUtils.stopQuietly(officeManager);
}
  • 该调用方式无法自动判断openoffice是否启动以及启动openoffice,所以需要自己保证服务器端的openoffice已经启动。
  • 当前插件无法满足txt格式文本的pdf转换,txt文本可以用以下方式进行转换。
/**
	 * @param #textPath 源文件全路径
	 * @param #pdfPath pdf文件全路径
	 * @return #无
	 * @description #text转换pdf
	 * @remark #无
	 */
	private static void txtToPdf(String textPath,String pdfPath){
		try {
			// 设置纸张
			Rectangle rect = new Rectangle(PageSize.A4);
			// 设置页码
			HeaderFooter footer = new HeaderFooter(new Phrase("页码:",
					setChineseFont()), true);
			footer.setBorder(Rectangle.NO_BORDER);
			Document doc = new Document(rect, 50, 50, 50, 50);
			doc.setFooter(footer);
			InputStreamReader fileRead=new InputStreamReader(new FileInputStream(textPath)
			,getCharset(textPath));
				BufferedReader read = new BufferedReader(fileRead);
				PdfWriter.getInstance(doc, new FileOutputStream(new File(pdfPath)));
				doc.open();
				while (read.ready()) {
					doc.add(new Paragraph(read.readLine(),setChineseFont()));
				}
				doc.close();
		}catch (Exception e){
			GRGLogger.info("+++++++++++转换PDF失败 +++++++++++++++");
		}
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值