在 Amazon ec2 上转换时出现 LibreOffice (soffice) 问题
LibreOffice (soffice) issue while converting on Amazon ec2
这不是 repost,我要的是 Amazon ec2 实例!其他人问的问题在我的本地机器上运行良好,并且解决了,但在亚马逊上没有。
关于这个问题已经有好几份报告,但没有一个能解决这个问题。
给post几个解决方案:
https://forum.openoffice.org/en/forum/viewtopic.php?p=88088
https://forum.openoffice.org/en/forum/viewtopic.php?f=16&t=4767&p=21890&hilit=jodconverter#p21890
https://forum.openoffice.org/en/forum/viewtopic.php?f=16&t=4767&p=21948&hilit=jodconverter#p21948
这些是我采取的步骤:
- 在新的 EC2 Amazon 实例上,我安装了 libre office commons
$sudo apt-get install libreoffice-common
然后是 Maven
到运行我正在使用的服务(也试过sudo)
$soffice -nologo -nofirststartwizard -headless -norestore -invisible
"-accept=socket,host=localhost,port=8100,tcpNoDelay=1;urp;"
所有端口和所有证券都为 ec2 实例开放
这是我的代码
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
import java.io.File;
/**
* soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
*/
public class testrun {
public static void main(String[] args){
try {
File inputFile = new File("./test.html");
File outputFile = new File("./OK.pdf");
// connect to an OpenOffice.org instance running on port 8100
SocketOpenOfficeConnection 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();
}catch (Exception e){e.printStackTrace();}
}
}
- 这是我的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>izbr</groupId>
<artifactId>izbr</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.artofsolving/jodconverter -->
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.4.3</version>
</dependency>
</dependencies>
我的Java版本是
openjdk 版本“1.8.0_91”
OpenJDK 运行时环境 (build 1.8.0_91-8u91-b14-0ubuntu4~14.04-b14)
OpenJDK 64 位服务器 VM(构建 25.91-b14,混合模式)
当我运行
$mvn exec:java -Dexec.mainClass="testrun"
错误是:
116 [testrun.main()] 信息 com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection - 已连接
com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException: 转换失败:无法保存输出文档
在 com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.loadAndExport(OpenOfficeDocumentConverter.java:144)
在 com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.convertInternal(OpenOfficeDocumentConverter.java:120)
在 com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(摘要OpenOfficeDocumentConverter.java:104)
在 com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(摘要OpenOfficeDocumentConverter.java:74)
在 com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(摘要OpenOfficeDocumentConverter.java:70)
在 testrun.main(testrun.java:24)
在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)
在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
在 java.lang.reflect.Method.invoke(Method.java:498)
在 org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:294)
在 java.lang.Thread.run(Thread.java:745)
原因:java.lang.reflect.UndeclaredThrowableException
在 com.sun.proxy.$Proxy26.storeToURL(未知来源)
在 com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.storeDocument(OpenOfficeDocumentConverter.java:156)
在 com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.loadAndExport(OpenOfficeDocumentConverter.java:140)
... 11 更多
Caused by: com.sun.star.ucb.InteractiveAugmentedIOException: 打开文件时出错
在 com.sun.star.lib.uno.environments.remote.Job.remoteUnoRequestRaisedException(Job.java:187)
在 com.sun.star.lib.uno.environments.remote.Job.execute(Job.java:153)
在 com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:349)
在 com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:318)
在 com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:106)
在 com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:657)
在 com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:159)
在 com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:141)
... 还有 14 个
我已经尝试了所有建议,例如列出监听端口然后更改 soffice 的端口号。还有 运行ning 作为 sudo,等等。
没有解决方案有帮助。我在 /usr/bin/soffice /usr/bin/X11/soffice 上执行了 chmod 777,但没有用。
请注意它在我的机器上工作,但在 Amazon ec2 上不工作,即使所有端口和服务都打开!
编辑:这对我有用,请根据您的代码调整步骤。更改对文件夹的权限和我发现的其他答案根本没有帮助。我自己想出来了。
Upgrade/Update实例
$ sudo apt-get 升级
$ sudo apt-get 更新
- 安装javajdk8
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get 更新
$ sudo apt-get install oracle-java8-installer
$ sudo apt-get install oracle-java8-set-default
- 安装 Maven
$ sudo add-apt-repository "deb http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main"
$ sudo apt-get 更新
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6DTHIS_IS_HEX_FROM_ERRORFA0101
$ sudo apt-get install maven3
$ sudo ln -s /usr/share/maven3/bin/mvn /usr/bin/mvn
$ sudo apt-get 更新
- 安装LibreOffice(完整!),然后查看是否有通用的,通常有
$ sudo apt-get install libreoffice
$ sudo apt-get install libreoffice-common
- 打开一个新选项卡来测试连接,ssh 到 EC2 并执行
$ soffice -nologo -nofirststartwizard -headless -norestore -invisible "-accept=socket,host=localhost,port=8100,tcpNoDelay=1;urp;"
- 转到 project/testing 并调整 pom.xml
$纳米pom.xml
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.1</version>
</dependency>
- 调整源代码,将A行改为B行,确保in-file和out-file(如果有的话)是正确的路径,并且它们存在
A:OpenOfficeConnection 连接 = 新的 SocketOpenOfficeConnection(8100);
B: SocketOpenOfficeConnection 连接 = new SocketOpenOfficeConnection("127.0.0.1", 8100);
- 使用 maven 干净安装项目
$ mvn 全新安装
- 运行 project/test 例如:
$ mvn exec:java -Dexec.mainClass="testrun"
这不是 repost,我要的是 Amazon ec2 实例!其他人问的问题在我的本地机器上运行良好,并且解决了,但在亚马逊上没有。
关于这个问题已经有好几份报告,但没有一个能解决这个问题。 给post几个解决方案:
https://forum.openoffice.org/en/forum/viewtopic.php?p=88088
https://forum.openoffice.org/en/forum/viewtopic.php?f=16&t=4767&p=21890&hilit=jodconverter#p21890
https://forum.openoffice.org/en/forum/viewtopic.php?f=16&t=4767&p=21948&hilit=jodconverter#p21948
这些是我采取的步骤:
- 在新的 EC2 Amazon 实例上,我安装了 libre office commons
$sudo apt-get install libreoffice-common
然后是 Maven
到运行我正在使用的服务(也试过sudo)
$soffice -nologo -nofirststartwizard -headless -norestore -invisible "-accept=socket,host=localhost,port=8100,tcpNoDelay=1;urp;"
所有端口和所有证券都为 ec2 实例开放
这是我的代码
import com.artofsolving.jodconverter.DocumentConverter;
import com.artofsolving.jodconverter.openoffice.connection.OpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection;
import com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter;
import java.io.File;
/**
* soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard
*/
public class testrun {
public static void main(String[] args){
try {
File inputFile = new File("./test.html");
File outputFile = new File("./OK.pdf");
// connect to an OpenOffice.org instance running on port 8100
SocketOpenOfficeConnection 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();
}catch (Exception e){e.printStackTrace();}
}
}
- 这是我的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>izbr</groupId>
<artifactId>izbr</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- https://mvnrepository.com/artifact/com.artofsolving/jodconverter -->
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.4.3</version>
</dependency>
</dependencies>
我的Java版本是 openjdk 版本“1.8.0_91” OpenJDK 运行时环境 (build 1.8.0_91-8u91-b14-0ubuntu4~14.04-b14) OpenJDK 64 位服务器 VM(构建 25.91-b14,混合模式)
当我运行
$mvn exec:java -Dexec.mainClass="testrun"
错误是: 116 [testrun.main()] 信息 com.artofsolving.jodconverter.openoffice.connection.SocketOpenOfficeConnection - 已连接 com.artofsolving.jodconverter.openoffice.connection.OpenOfficeException: 转换失败:无法保存输出文档 在 com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.loadAndExport(OpenOfficeDocumentConverter.java:144) 在 com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.convertInternal(OpenOfficeDocumentConverter.java:120) 在 com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(摘要OpenOfficeDocumentConverter.java:104) 在 com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(摘要OpenOfficeDocumentConverter.java:74) 在 com.artofsolving.jodconverter.openoffice.converter.AbstractOpenOfficeDocumentConverter.convert(摘要OpenOfficeDocumentConverter.java:70) 在 testrun.main(testrun.java:24) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:294) 在 java.lang.Thread.run(Thread.java:745) 原因:java.lang.reflect.UndeclaredThrowableException 在 com.sun.proxy.$Proxy26.storeToURL(未知来源) 在 com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.storeDocument(OpenOfficeDocumentConverter.java:156) 在 com.artofsolving.jodconverter.openoffice.converter.OpenOfficeDocumentConverter.loadAndExport(OpenOfficeDocumentConverter.java:140) ... 11 更多 Caused by: com.sun.star.ucb.InteractiveAugmentedIOException: 打开文件时出错 在 com.sun.star.lib.uno.environments.remote.Job.remoteUnoRequestRaisedException(Job.java:187) 在 com.sun.star.lib.uno.environments.remote.Job.execute(Job.java:153) 在 com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:349) 在 com.sun.star.lib.uno.environments.remote.JobQueue.enter(JobQueue.java:318) 在 com.sun.star.lib.uno.environments.remote.JavaThreadPool.enter(JavaThreadPool.java:106) 在 com.sun.star.lib.uno.bridges.java_remote.java_remote_bridge.sendRequest(java_remote_bridge.java:657) 在 com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.request(ProxyFactory.java:159) 在 com.sun.star.lib.uno.bridges.java_remote.ProxyFactory$Handler.invoke(ProxyFactory.java:141) ... 还有 14 个
我已经尝试了所有建议,例如列出监听端口然后更改 soffice 的端口号。还有 运行ning 作为 sudo,等等。 没有解决方案有帮助。我在 /usr/bin/soffice /usr/bin/X11/soffice 上执行了 chmod 777,但没有用。
请注意它在我的机器上工作,但在 Amazon ec2 上不工作,即使所有端口和服务都打开!
编辑:这对我有用,请根据您的代码调整步骤。更改对文件夹的权限和我发现的其他答案根本没有帮助。我自己想出来了。
Upgrade/Update实例
$ sudo apt-get 升级
$ sudo apt-get 更新
- 安装javajdk8
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get 更新
$ sudo apt-get install oracle-java8-installer
$ sudo apt-get install oracle-java8-set-default
- 安装 Maven
$ sudo add-apt-repository "deb http://ppa.launchpad.net/natecarlson/maven3/ubuntu precise main"
$ sudo apt-get 更新
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6DTHIS_IS_HEX_FROM_ERRORFA0101
$ sudo apt-get install maven3
$ sudo ln -s /usr/share/maven3/bin/mvn /usr/bin/mvn
$ sudo apt-get 更新
- 安装LibreOffice(完整!),然后查看是否有通用的,通常有
$ sudo apt-get install libreoffice
$ sudo apt-get install libreoffice-common
- 打开一个新选项卡来测试连接,ssh 到 EC2 并执行
$ soffice -nologo -nofirststartwizard -headless -norestore -invisible "-accept=socket,host=localhost,port=8100,tcpNoDelay=1;urp;"
- 转到 project/testing 并调整 pom.xml
$纳米pom.xml
<dependency>
<groupId>com.artofsolving</groupId>
<artifactId>jodconverter</artifactId>
<version>2.2.1</version>
</dependency>
- 调整源代码,将A行改为B行,确保in-file和out-file(如果有的话)是正确的路径,并且它们存在
A:OpenOfficeConnection 连接 = 新的 SocketOpenOfficeConnection(8100);
B: SocketOpenOfficeConnection 连接 = new SocketOpenOfficeConnection("127.0.0.1", 8100);
- 使用 maven 干净安装项目
$ mvn 全新安装
- 运行 project/test 例如:
$ mvn exec:java -Dexec.mainClass="testrun"