LibreOffice Calc 5.3以降 + JODConverterでtmpファイルは使えない?

JODConverterを通してLibreOfficeでPDFを出力する場合、 
LibreOffice v5.2まではできていたことが、v5.3以降はできなくなっていたので共有します。

 

1. 前提

本件は、JODConverterを利用し、LibreOffice5.3でPDFを出力する際に発生した内容です。

準備物は以下のとおりです。

2. 発生現象

現象発生までの経緯は以下のとおりです。

  1. xlsx形式のファイルの拡張子を”.tmp”に変更
  2. JODConverterを利用し、LibreOfficeでPDFを出力する処理を実行すると、ファイル自体はxlsx形式だが作成に失敗

JODConverterを利用し、LibreOfficeでPDFを出力する処理は以下のとおりです。

 

JODConverter4.1.0 tmpファイルエラー

 

上記のソースでいえば、D:\temp以下に「test.tmp(変換前出力ファイル)」「test.pdf(変換後出力ファイル)」を配置します。

ここでtest.tmpはExcelで作成したxlsx形式ファイルをリネームしたものです。

 

LibreOffice 5.2までは、拡張子が.tmpでも ファイルがxlsx形式であれば出力に成功したのですが、
LibreOffice 5.3以降では、以下のエラーが出力されるようになりました。

 

Exception in thread "main" java.lang.NullPointerException: The source format is missing or not supportedException in thread "main" java.lang.NullPointerException: The source format is missing or not supported at org.apache.commons.lang3.Validate.notNull(Validate.java:225) at org.jodconverter.job.AbstractConversionJobWithSourceFormatUnspecified.toInternal(AbstractConversionJobWithSourceFormatUnspecified.java:109) at org.jodconverter.job.AbstractConversionJobWithSourceFormatUnspecified.to(AbstractConversionJobWithSourceFormatUnspecified.java:77) at org.jodconverter.job.AbstractConversionJobWithSourceFormatUnspecified.to(AbstractConversionJobWithSourceFormatUnspecified.java:40) at LibrePdfOutputTest.main(LibrePdfOutputTest.java:32)

 

エラーメッセージから、formatが期待するものと異なっていることが原因のようです。

v5.3からファイル形式のチェック処理が導入されたようなので、そのせいかもしれません。

 

3. 対応方法

対応としては、xlsx形式で読み込むようにするしかないですね。
OutputStreamなどで出力した場合に、一時ファイルとしてtmpとすることは多い気もしますが、無理やりxlsxに置き換えないと駄目です。

 

以上です。


2017/11/10 賢帝俊来