とりあえず自分が使いやすいようにポータブルにしておくとよいかも? くらいの思いつきでやってみましたが、たとえば開発チームのメンバーにちょっとしたツールを渡したいとき(そのためだけに LibreOffice をインストールしてもらわなくて済む)とか、サーバの環境を汚さずに使いたいときに都合が良いかもしれませんね。
(※ 2019-11-03 に書いた記事のクロス投稿です)
下記では例として 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
--convert-to
で指定するフィルタの調べ方Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント