LibreOfficeが起動できない

LibreOffice 25.2.5.2 を使用しております。

PDF変換において、Eclipseから実行した場合問題なく動作しますが、
同一サーバー上のTomcatから起動した場合、プロセスを開始できないエラーが発生します。
プログラム開始後、netstatで確認すると、起動されている?ようです。
解決方法をご教示頂けないでしょうか。

【ソース】
public InputStream convertOfficeToPdf(InputStream stream) throws Exception {

	OfficeManager officeManager = LocalOfficeManager.builder()
			.workingDir(new File("C:\\work\\infoshare\\temp"))
			.hostName("127.0.0.1")
			.portNumbers(2002)
			.processTimeout(300_000L)
			.processRetryInterval(5_000L)
			.taskExecutionTimeout(240_000L)
			.templateProfileDir(new File("C:\\work\\infoshare\\temp\\lo-profile"))
			.officeHome(Const.LIBRE_OFFICE_HOME)
			.build();

	officeManager.start();

	File outputFile = new File("C:\\work\\infoshare\\temp\\temp.pdf");
	System.out.println(Const.LIBRE_OFFICE_HOME);
	
	try {
		LocalConverter.builder()
			.officeManager(officeManager)
			.build()
			.convert(stream)
			.to(outputFile)
			.execute();
	}finally {
		officeManager.stop();
	}
	stream = new FileInputStream(outputFile);
	outputFile.delete();
	return stream;
}

=================================================
【エラー】
2025-09-02 12:37:40.855 INFO 7804 — [io-8080-exec-56] i.controller.ItemAddController : getPdfData開始:staffCD=0,dpi=240,rtCount=0,startPage=0,endPage=0
C:\Program Files\LibreOffice
2025-09-02 12:37:41.046 INFO 7804 — [er-offprocmng-0] o.j.local.office.OfficeDescriptor : soffice info (from exec path): Product: LibreOffice - Version: ??? - useLongOptionNameGnuStyle: true
2025-09-02 12:37:41.219 DEBUG 7804 — [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : Checking existing process done; no process running with --accept ‘socket,host=127.0.0.1,port=2002,tcpNoDelay=1;urp;StarOffice.ServiceManager’
2025-09-02 12:37:41.387 DEBUG 7804 — [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : ProcessBuilder command: C:\Program Files\LibreOffice\program\soffice.exe --accept=socket,host=127.0.0.1,port=2002,tcpNoDelay=1;urp;StarOffice.ServiceManager --headless --invisible --nocrashreport --nodefault --nofirststartwizard --nolockcheck --nologo --norestore -env:UserInstallation=file:///C:/work/infoshare/temp/.jodconverter_socket_host-127.0.0.1_port-2002_tcpNoDelay-1
2025-09-02 12:37:41.387 DEBUG 7804 — [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : OFFICE HOME: C:\Program Files\LibreOffice
2025-09-02 12:37:41.387 INFO 7804 — [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : Starting process with --accept ‘socket,host=127.0.0.1,port=2002,tcpNoDelay=1;urp;StarOffice.ServiceManager’ and profileDir ‘C:\work\infoshare\temp.jodconverter_socket_host-127.0.0.1_port-2002_tcpNoDelay-1’
2025-09-02 12:42:45.382 ERROR 7804 — [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : Could not start the office process.

org.jodconverter.core.office.OfficeException: An error prevents us to start a process with --accept ‘socket,host=127.0.0.1,port=2002,tcpNoDelay=1;urp;StarOffice.ServiceManager’
at org.jodconverter.local.office.LocalOfficeProcessManager.executeStartProcessAndConnect(LocalOfficeProcessManager.java:442) ~[jodconverter-local-4.4.7.jar:4.4.7]
at org.jodconverter.local.office.LocalOfficeProcessManager.startProcessAndConnect(LocalOfficeProcessManager.java:395) ~[jodconverter-local-4.4.7.jar:4.4.7]
at org.jodconverter.local.office.LocalOfficeProcessManager.lambda$start$1(LocalOfficeProcessManager.java:213) ~[jodconverter-local-4.4.7.jar:4.4.7]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: org.jodconverter.core.office.RetryTimeoutException: org.jodconverter.local.office.OfficeConnectionException: Connection failed: ‘socket,host=127.0.0.1,port=2002,tcpNoDelay=1’; null
at org.jodconverter.core.office.AbstractRetryable.execute(AbstractRetryable.java:101) ~[jodconverter-core-4.4.7.jar:4.4.7]
at org.jodconverter.core.office.AbstractRetryable.execute(AbstractRetryable.java:60) ~[jodconverter-core-4.4.7.jar:4.4.7]
at org.jodconverter.local.office.LocalOfficeProcessManager.executeStartProcessAndConnect(LocalOfficeProcessManager.java:428) ~[jodconverter-local-4.4.7.jar:4.4.7]
… 5 common frames omitted
Caused by: org.jodconverter.local.office.OfficeConnectionException: Connection failed: ‘socket,host=127.0.0.1,port=2002,tcpNoDelay=1’; null
at org.jodconverter.local.office.OfficeConnection.connect(OfficeConnection.java:130) ~[jodconverter-local-4.4.7.jar:4.4.7]
at org.jodconverter.local.office.StartProcessAndConnectRetryable.attempt(StartProcessAndConnectRetryable.java:106) ~[jodconverter-local-4.4.7.jar:4.4.7]
at org.jodconverter.core.office.AbstractRetryable.execute(AbstractRetryable.java:86) ~[jodconverter-core-4.4.7.jar:4.4.7]
… 7 common frames omitted
Caused by: com.sun.star.lang.IllegalArgumentException: null
at com.sun.star.comp.bridgefactory.BridgeFactory.createBridge(BridgeFactory.java:151) ~[jurt-3.2.1.jar:na]
at org.jodconverter.local.office.OfficeConnection.createBridge(OfficeConnection.java:247) ~[jodconverter-local-4.4.7.jar:4.4.7]
at org.jodconverter.local.office.OfficeConnection.connect(OfficeConnection.java:112) ~[jodconverter-local-4.4.7.jar:4.4.7]
… 9 common frames omitted

2025-09-02 12:47:41.213 INFO 7804 — [io-8080-exec-56] o.j.l.office.LocalOfficeProcessManager : Restarting due to task timeout…
2025-09-02 12:47:41.215 INFO 7804 — [io-8080-exec-56] o.j.l.office.LocalOfficeProcessManager : Trying to forcibly terminate process: ‘socket,host=127.0.0.1,port=2002,tcpNoDelay=1;urp;StarOffice.ServiceManager’; pid: 6424
2025-09-02 12:47:41.407 INFO 7804 — [io-8080-exec-56] o.j.c.office.AbstractOfficeManagerPool : Stopping the office manager pool…
2025-09-02 12:47:41.408 DEBUG 7804 — [io-8080-exec-56] o.j.l.office.LocalOfficeProcessManager : Submitting stop task…
2025-09-02 12:47:41.408 DEBUG 7804 — [io-8080-exec-56] o.j.l.office.LocalOfficeProcessManager : Waiting for stop task to complete (301000 millisecs)…
2025-09-02 12:47:41.409 DEBUG 7804 — [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : Stopping the office process with deleteInstanceProfileDir set to true…
2025-09-02 12:47:41.409 INFO 7804 — [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : Trying to forcibly terminate process: ‘socket,host=127.0.0.1,port=2002,tcpNoDelay=1;urp;StarOffice.ServiceManager’; pid: 6424
2025-09-02 12:47:41.409 INFO 7804 — [ter-poolentry-1] o.j.local.task.LocalConversionTask : Executing local conversion task [? → pdf]…
2025-09-02 12:47:41.624 INFO 7804 — [er-offprocmng-0] o.j.l.office.LocalOfficeProcessManager : Process exited with code 1
2025-09-02 12:47:41.717 DEBUG 7804 — [io-8080-exec-56] o.j.l.office.LocalOfficeProcessManager : Stop task executed successfully.
2025-09-02 12:47:41.722 ERROR 7804 — [io-8080-exec-56] i.controller.ItemAddController : Task did not complete within timeout (600000 ms): LocalConversionTask{source=SourceDocumentSpecsFromInputStream{file=null, format=null}, loadProperties={ReadOnly=true, Hidden=true, UpdateDocMode=0}, target=TargetDocumentSpecsFromFile{file=temp.pdf, format=pdf}, storeProperties=null, useStreamAdapters=false}
2025-09-02 12:47:41.722 INFO 7804 — [io-8080-exec-56] i.controller.ItemAddController : getPdfData終了

====================
C:\Program Files\LibreOffice>netstat -ano | find “2002”
TCP 127.0.0.1:2002 0.0.0.0:0 LISTENING 3144
TCP 127.0.0.1:49588 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49590 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49591 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49592 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49593 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49594 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49595 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49598 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49599 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49601 127.0.0.1:2002 TIME_WAIT 0
TCP 127.0.0.1:49603 127.0.0.1:2002 TIME_WAIT 0

私にはこのあたりの知識がなくてわかりませんが、
OSやLibreOfficeのバージョン、再現手順を書かれた方が、他の方が状況を理解しやすいと思います。

知識がないので、chatGPTに聞きました。
tomcatで使用する時にはjodconverter-localではなく、jodconverter-remoteが必要なのでは?とのことです。

今まで動いていたのにバージョンアップしたら起動しなくなったというわけではないんですよね?

環境はWindows11
LibreOffice 25.2.5.2 を使用しております。

Eclipseから実行した場合問題なく動作します。
Eclipseを停止し、Tomcatのサービスを有効にする。
Eclipseで作成した、warファイルをTomcatに配置して実行

ありがとうございます。
jodconverter-remoteについて調査してみます。

jodconverter-remoteに変更しました。
LibreOffice を手動起動し、プログラムを起動すると通信は行われている様です。
.socketTimeoutが未設定(デフォルト2分)の時は、、Read timed outエラーが発生
.socketTimeout(600_000L)を設定したところ、Connection resetのエラーが発生しました。
アドバイスをお願い致します。

=======================================================
【ソース】
public InputStream convertOfficeToPdf(InputStream stream) throws Exception {
OfficeManager officeManager = RemoteOfficeManager.builder()
.workingDir(new File(“C:\work\infoshare\temp\lo-profile”))
.urlConnection(“http://127.0.0.1:2002”)
.taskExecutionTimeout(800_000L)
.connectTimeout(600_000L)
.socketTimeout(600_000L)
.build();
officeManager.start();

	File outputFile = new File("C:\\work\\infoshare\\temp\\temp.pdf");
	System.out.println(stream);
	File inFile = new File("C:\\work\\infoshare\\temp\\sampleエクセル.xlsx");
	
	try {
		RemoteConverter.builder()
			.officeManager(officeManager)
			.build()
			.convert(inFile)
			.to(outputFile)
			.execute();
	}finally {
		officeManager.stop();
	}
	stream = new FileInputStream(outputFile);
	outputFile.delete();
	return stream;
}

=======================================================
【エラー_Read timed out】
2025-09-05 19:23:11.027 INFO 24700 — [io-8080-exec-54] i.controller.ItemAddController : getPdfData開始:staffCD=0,dpi=240,rtCount=0,startPage=0,endPage=0
java.io.FileInputStream@79c720fa
C:\work\infoshare\temp\sampleエクセル.xlsx
2025-09-05 19:23:11.360 INFO 24700 — [ter-poolentry-0] o.j.remote.task.RemoteConversionTask : Executing remote conversion task…
2025-09-05 19:25:11.619 ERROR 24700 — [ter-poolentry-0] o.j.remote.task.RemoteConversionTask : Remote conversion failed.

java.net.SocketTimeoutException: Read timed out
at java.base/java.net.SocketInputStream.socketRead0(Native Method) ~[na:na]
at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115) ~[na:na]
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168) ~[na:na]
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) ~[na:na]
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.client.fluent.Request.internalExecute(Request.java:173) ~[fluent-hc-4.5.13.jar:4.5.13]
at org.apache.http.client.fluent.Executor.execute(Executor.java:262) ~[fluent-hc-4.5.13.jar:4.5.13]
at org.jodconverter.remote.task.RemoteConversionTask.execute(RemoteConversionTask.java:148) ~[jodconverter-remote-4.4.7.jar:4.4.7]
at org.jodconverter.remote.office.RemoteOfficeManagerPoolEntry.doExecute(RemoteOfficeManagerPoolEntry.java:302) ~[jodconverter-remote-4.4.7.jar:4.4.7]
at org.jodconverter.core.office.AbstractOfficeManagerPoolEntry.lambda$execute$0(AbstractOfficeManagerPoolEntry.java:81) ~[jodconverter-core-4.4.7.jar:4.4.7]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

=======================================================
【エラー_Connection reset】
2025-09-05 19:32:08.095 INFO 24700 — [io-8080-exec-67] i.controller.ItemAddController : getPdfData開始:staffCD=0,dpi=240,rtCount=0,startPage=0,endPage=0
java.io.FileInputStream@346b7f02
C:\work\infoshare\temp\sampleエクセル.xlsx
2025-09-05 19:32:08.560 INFO 24700 — [ter-poolentry-0] o.j.remote.task.RemoteConversionTask : Executing remote conversion task…
2025-09-05 19:38:50.590 INFO 24700 — [io-8080-exec-62] i.controller.ItemAddController : itemAdd開始:staffCD=0
2025-09-05 19:38:50.600 INFO 24700 — [io-8080-exec-62] i.controller.ItemAddController : itemAdd終了:staffCD=0
2025-09-05 19:38:50.860 INFO 24700 — [io-8080-exec-62] i.controller.ItemAddController : showItemAddContents開始:staffCD=0
2025-09-05 19:38:50.917 INFO 24700 — [io-8080-exec-62] i.controller.ItemAddController : showItemAddContents終了:staffCD=0
2025-09-05 19:41:12.623 ERROR 24700 — [ter-poolentry-0] o.j.remote.task.RemoteConversionTask : Remote conversion failed.

java.net.SocketException: Connection reset
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:186) ~[na:na]
at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) ~[na:na]
at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(SessionInputBufferImpl.java:137) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(SessionInputBufferImpl.java:153) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.io.SessionInputBufferImpl.readLine(SessionInputBufferImpl.java:280) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:138) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125) ~[httpcore-4.4.14.jar:4.4.14]
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) ~[httpclient-4.5.13.jar:4.5.13]
at org.apache.http.client.fluent.Request.internalExecute(Request.java:173) ~[fluent-hc-4.5.13.jar:4.5.13]
at org.apache.http.client.fluent.Executor.execute(Executor.java:262) ~[fluent-hc-4.5.13.jar:4.5.13]
at org.jodconverter.remote.task.RemoteConversionTask.execute(RemoteConversionTask.java:148) ~[jodconverter-remote-4.4.7.jar:4.4.7]
at org.jodconverter.remote.office.RemoteOfficeManagerPoolEntry.doExecute(RemoteOfficeManagerPoolEntry.java:302) ~[jodconverter-remote-4.4.7.jar:4.4.7]
at org.jodconverter.core.office.AbstractOfficeManagerPoolEntry.lambda$execute$0(AbstractOfficeManagerPoolEntry.java:81) ~[jodconverter-core-4.4.7.jar:4.4.7]
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

=======================================================
【ソケット】
C:\Windows\System32>netstat -ano | find “2002”

C:\Windows\System32>soffice.exe --headless --accept=“socket,host=127.0.0.1,port=2002;urp;” --nologo --nofirststartwizard

C:\Windows\System32>netstat -ano | find “2002”
TCP 127.0.0.1:2002 0.0.0.0:0 LISTENING 24164

C:\Windows\System32>netstat -ano | find “2002”
TCP 127.0.0.1:2002 0.0.0.0:0 LISTENING 24164
TCP 127.0.0.1:2002 127.0.0.1:60194 ESTABLISHED 24164
TCP 127.0.0.1:60194 127.0.0.1:2002 ESTABLISHED 24700

Tomcatについてはよく知りませんので的はずれでしたら申し訳ないですが、LibreOfficeへの通信ができてるならファイルの読み書きの時点で問題が起きてるのかもしれませんね。
当該フォルダへのファイルアクセスに問題がないか見直しされてみるのはいかがでしょうか?(tomcat環境でのアクセス権、また絶対パスでなく確実に読み書きできるところからの相対パス指定にしてみる等)

余談ですが、参考までの情報です。jodconverと同様のコンバータにunoconvというものもあるようですね。

Collabora Onlineでもできるそうです。

1 Like

以下に説明がありました。
https://sdk.collaboraonline.com/docs/conversion_api.html

1 Like

ポート番号2002ではなく8100と書いてあるサイトがあります。
的外れだったらすみません。

https://home.hiroshima-u.ac.jp/keita/kai/linux/pdf.html

https://www.brainsellers.com/blog/inastream/2010/07/jodconverteroffice.html