とりあえず自分が使いやすいようにポータブルにしておくとよいかも? くらいの思いつきでやってみましたが、たとえば開発チームのメンバーにちょっとしたツールを渡したいとき(そのためだけに LibreOffice をインストールしてもらわなくて済む)とか、サーバの環境を汚さずに使いたいときに都合が良いかもしれませんね。
下記では例として Calc が入ったイメージを作って fods ファイルを ods ファイルに変換します。 Writer とかでも同じようにできるのではないでしょうか。
Dockerfile 書く。
関連しそうなパッケージはいくつかあるのですが、とりあえず libreoffice-calc
をインストールすれば変換処理は動きました。
FROM ubuntu:18.04 RUN apt-get update \ && apt-get -y install --no-install-recommends \ libreoffice-calc \ && apt-get clean \ && rm -rf /var/lib/apt/lists/*
イメージをビルド。
docker build -t libo_calc:test .
イメージのサイズは 426MB になりました。
コンテナ内で実行するシェルスクリプト container_fods2ods.sh
を用意。
汎用化は置いておいてひとまずベタ書きです。
あと、動作する最低限のサンプルということで --headless
だけ付けていますが、
他にも --nologo
などのオプションがあります。詳しくは
LibreOfficeでドキュメントコンバータを作ろう - Qiita
を参照してください。
temp_fods=/tmp/temp.fods temp_ods=/tmp/temp.ods # 標準入力から受け取る cat > $temp_fods cd /tmp soffice \ --headless \ --convert-to ods \ $temp_fods \ >&2 # => /tmp/temp.ods に出力される cat $temp_ods
下記のようなメッセージが標準出力に出て都合が悪いので >&2
で標準エラー出力にリダイレクトしています。
Java の実行環境がないよと言われてますが、今やろうとしている fods → ods の変換に関しては問題ないようなのでいったん無視。
javaldx: Could not find a Java Runtime Environment! Please ensure that a JVM and the package libreoffice-java-common is installed. If it is already installed then try removing ~/.libreoffice/3/user/config/javasettings_Linux_*.xml Warning: failed to read path from javaldx convert /tmp/temp.fods -> /tmp/temp.ods using filter : calc8
ホスト側でコマンドとして使うシェルスクリプト fods2ods.sh
を用意。
#!/bin/bash file_in="$1"; shift file_out="$1"; shift cat $file_in \ | docker run --rm -i \ -v "$(pwd):/root/work/" \ libo_calc:test \ bash /root/work/container_fods2ods.sh \ > $file_out
実行。
chmod u+x fods2ods.sh
./fods2ods.sh sample.fods sample_output.ods
参考
- 2019-08-29 LibreOfficeでドキュメントコンバータを作ろう - Qiita
--convert-to
で指定するフィルタの調べ方