欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java 调用OpenOffice将word等格式文件转换为pdf格式

程序员文章站 2022-05-28 15:33:53
...

一:环境搭建

OpenOffice 下载地址http://www.openoffice.org/

JodConverter 下载地址http://sourceforge.net/projects/jodconverter/files/JODConverter/

解压后将目录下的所有jar包放在工程的lib下面或者采用引用的方式调用这些jar包。

下载后安装,我安装的路径为D:/openOffice/install/

 

二:启动服务

可以通过cmd调用服务, " cd D:/openOffice/install/program" 

执行

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

查看是否安装成功,查看端口对应的pid

    netstat -ano|findstr  8100

 查看pid对应的服务程序名

    tasklist|findstr pid值

也可以把这一步省略,放到java程序中调用服务,因为启动服务占用内存比较大,在java中可以在使用

的时候调用,然后马上销毁。

 

三:程序代码

1:将word等格式转换为pdf格式

	public  int officeToPDF(String sourceFile, String destFile) {
		try {
			File inputFile = new File(sourceFile);
			// 找不到源文件, 则返回-1
			if (!inputFile.exists()) {
				return -1;
			}

			// 如果目标路径不存在, 则新建该路径
			File outputFile = new File(destFile);
			// 如果该文件已经存在,则不再进行转换
			if (outputFile.exists()) {
				return 3;
			}
			if (!outputFile.getParentFile().exists()) {
				outputFile.getParentFile().mkdirs();
			}

			// OpenOffice的安装目录
			String OpenOffice_HOME = "C:\\Program Files (x86)\\OpenOffice 4";

			// 如果从文件中读取的URL地址最后一个字符不是 '\',则添加'\'
			if (OpenOffice_HOME.charAt(OpenOffice_HOME.length() - 1) != '\\') {
				OpenOffice_HOME += "\\";
			}
			// 启动OpenOffice的服务
			String command = OpenOffice_HOME
					+ "program\\soffice.exe -headless -accept=\"socket,host=127.0.0.1,port=8100;urp;\"";
			Process pro = Runtime.getRuntime().exec(command);
			// connect to an OpenOffice.org instance running on port 8100
			OpenOfficeConnection connection = new SocketOpenOfficeConnection("127.0.0.1", 8100);
			connection.connect();

			// convert
			DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
			converter.convert(inputFile, outputFile);

			// close the connection
			connection.disconnect();
			// 关闭OpenOffice服务的进程
			pro.destroy();

			return 0;
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return -1;
		} catch (ConnectException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

		return 1;
	}


2:调用方法

java 调用OpenOffice将word等格式文件转换为pdf格式
1 @Test
2     public void testWord2Pdf() throws IOException {
3         String srcPath = "E:/test.docx";
4         String desPath = "E:/test.pdf";
5         Word2Pdf(srcPath, desPath);
6     }
java 调用OpenOffice将word等格式文件转换为pdf格式

以上代码经过验证,可以正常运行。

四:遇到问题

错误信息:

java.net.ConnectException: connection failed: socket,host=10.101.50.71,port=8100,tcpNoDelay=1: java.net.ConnectException: Connection refused: connect

at com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection.connect(AbstractOpenOfficeConnection.java:79)

原因以及解决方法:第一次调用,soffice需要注册,所以到soffice.exe的安装路径下双击soffice.exe,注册即可。