我使用JODConverter连接到OpenOffice 4并将rtf文档转换为pdf。
除了一个奇怪的问题外它一切正常,第一次尝试转换时我得到一个Connection拒绝异常;它从第二次开始工作。
我在计算机启动后的每次第一次转换时都会收到异常。
这是我的测试类
import java.io.File;
import java.io.IOException;
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;
public class ConverterServiceTest
{
public static void main(String[] args) throws IOException
{
File inputFile = new File("C:/Prova/Esempi/TestSign.rtf");
File outputFile = new File("C:/Prova/Esempi/TestSign.pdf");
int openOfficePort = 8100;
System.out.println("Provo a lanciare il processo di OpenOffice");
String command = "\"C:/Program Files (x86)/OpenOffice 4/program/soffice.exe\"" +
"-headless -accept=\"socket,host=localhost,port="
+ openOfficePort + ";urp;\" -nofirststartwizard";
System.out.println("Comando = " + command);
Process p = Runtime.getRuntime().exec(command);
System.out.println("OpenOffice lanciato, provo la connessione alla porta "
+ openOfficePort);
OpenOfficeConnection connection =
new SocketOpenOfficeConnection(openOfficePort);
connection.connect();
System.out.println("Connessione aperta! Provo la conversione");
DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
converter.convert(inputFile, outputFile);
System.out.println("Conversione effettuata");
connection.disconnect();
p.destroy();
System.out.println("Connessione chiusa e processo killato");
}
}
这是例外:
Exception in thread "main" java.net.ConnectException: connection failed: socket,host=localhost,port=8100,tcpNoDelay=1: java.net.ConnectException: Connection refused: connect
at com.artofsolving.jodconverter.openoffice.connection.AbstractOpenOfficeConnection.connect(AbstractOpenOfficeConnection.java:79)
at test.converter.ConverterServiceTest.main(ConverterServiceTest.java:29)
有谁知道为什么会这样?我怎么能解决这个奇怪的问题?
感谢您的建议,抱歉我的英语不完美。
答案 0 :(得分:1)
你看起来合情合理。但是,不是使用sleep,而是从批处理文件或脚本文件启动soffice
可能更好。然后您的Java代码可以连接到正在运行的实例。请参阅https://forum.openoffice.org/en/forum/viewtopic.php?t=1014。
另一种方法是直接使用OpenOffice。例如:
soffice.exe --headless --convert-to pdf *.rtf