Friday, September 25, 2020

Alfrescoのプレビューで日本語が文字化けする問題

こんにちは。てらしたです。今回はAlfrescoのプレビューで日本語が文字化けしてしまう問題の原因と修正方法をご紹介します。201911GAをDocker Composeで起動した場合(やり方はこちらの記事を参照)を例にご説明しますが、インストール方法によってはDocker Composeを使っていなくても起こり得る問題だと思います。

まずはどのような問題なのかを見ていきます。Alfrescoに日本語を含むテキストファイルをアップロードしてドキュメントの詳細画面を開きます。すると、プレビューでこのように日本語部分が文字化けして正常に表示されません。

試しにPowerPointのファイルをアップロードしてみても同じです。

これは、LibreOfficeが実行されているコンテナに日本語フォントがインストールされていないことが原因のようです(LibreOfficeはテキストファイルやMS Officeファイルの変換に使用されています)。そのため、このコンテナに日本語フォントをインストールしてあげれば解決するはずです。

まずLibreOffice用のコンテナにroot権限で入ります(コンテナ名やコンテナIDは docker ps で調べます)。

docker exec -it docker-compose_libreoffice_1 /bin/bash

入ったらIPAフォントをインストールします。

  yum -y install ipa-gothic-fonts ipa-pgothic-fonts ipa-mincho-fonts ipa-pmincho-fonts

インストールできたら、コンテナを再起動します。再起動するのはLibreOfficeコンテナだけで大丈夫です。起動したら先ほどと同じファイルをアップロードしてプレビューを確認してみます。

このようにテキストファイルも、

PowerPointファイルも無事に文字化けが解消されていました。

フォントをインストールすれば無事に解消できることが確認できたので、コンテナを作り直すたびに手作業でフォントをインストールしなくてもいいようにDockerfileを作ってdocker-compose.ymlをちょっと修正します。

まず、docker-compose.ymlのあるディレクトリにlibreofficeディレクトリを作成し、そこに以下の内容を記載したDockerfileを作成します。

FROM alfresco/alfresco-libreoffice:2.1.0

USER root

RUN yum install -y \
            ipa-gothic-fonts \
            ipa-pgothic-fonts \
            ipa-mincho-fonts \
            ipa-pmincho-fonts \
           &&yum clean all

USER libreoffice

元のDockerfileでは最終的にlibreofficeユーザになっているのでrootに変更してフォントをインストールしたらlibreofficeユーザに戻るという操作をしています。

次に、docker-compose.ymlの以下の部分を

libreoffice:
    image: alfresco/alfresco-libreoffice:2.1.0
    mem_limit: 1g
    ...

このように書き換えます(image名は好きにつけてもらって大丈夫です)。

libreoffice:
    image: custom-alfresco-libreoffice:2.1.0
    build:
        dockerfile: Dockerfile
        context: ./libreoffice
    mem_limit: 1g
    ...

修正して保存したらコンテナを作り直して動作確認をしてみます。LibreOfficeコンテナだけ作り直せばよいはずですが、キャッシュの影響等でうまく再構築してくれないとか、他の問題が絡んでくるとわかりにくくなってしまうので、ここでは docker-compose down でコンテナを一掃してから docker-compose up で起動し直しました。Alfrescoのデータは残しておきたいとか、状況によっては docker-compose down は使えないと思うので、状況に合わせてコマンドは適当に変えていただければと思います。

起動したら同様にファイルをアップロードして、プレビューが文字化けしていなかったら成功です(結果は上と同じなのでスクリーンショットは省略)。

No comments:

Post a Comment