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 は使えないと思うので、状況に合わせてコマンドは適当に変えていただければと思います。

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

Monday, September 7, 2020

Liferay 7とMicrosoft365(Office365)を連携させてOfficeファイルをオンライン編集する

こんにちは。おおたにです。

今も昔も仕事でMicrosoft Officeを利用しているユーザは多いと思いますが、今やその月額/年額サブスクリプションサービスであるMicrosoft 365(旧Office 365)をご利用の会社も多いかと思います。今回はそのMicrosoft 365(旧Office 365)とLiferayのドキュメントライブラリ(ファイル管理機能)の連携機能について紹介したいと思います。
なお、この機能はLiferay DXP 7.2で新しく追加された機能になります。実際に試してみたい方はLiferayDXP 7.2以降でお試しください。

また、LiferayはGoogle Drive/Google Docsとの連携機能も備えており、これらのサービスを用いてOfficeファイルをオンライン編集することもできます。具体的な設定方法については別の記事「Liferay 7とGoogle Drive / Google Docsを連携させる」を参考にしてください。

Microsoft 365(Office365)連携機能で実現できること


LiferayのドキュメントライブラリとMicrosoft 365を連携すると、ドキュメントライブラリ上のOfficeファイルをMicrosoft 365を利用してオンライン編集できるようになります。具体的には以下のことができます。
  • Microsoft 365を使い、新規Wordファイル(.docx)、新規Excelファイル(.xlsx)、新規PowerPointファイル(.pptx)をブラウザ上で作成する
  • 作成したファイルをドキュメントライブラリに保存する
  • ドキュメントライブラリ上の以下の形式のファイルをMicrosoft 365を使ってブラウザ上で編集する。
    • Word/テキスト系ファイル(.doc, .docx, .docm, .dot, .dotx, .dotm, .html, .txt, .rtf, .odt)
    • PowerPoint/スライド系ファイル(.ppt, .pptx, .pptm, .pps, .ppsx, .ppsm, .pot, .potx, .potm)
    • Excel/シート系ファイル(.xls, .xlsx, .xlsm, .xlt, .xltx, .xltm, .ods, .csv, .tsv, .txt, .tab)
なお、Microsoft 365でファイル編集を開始するとOneDrive上にファイルがコピーされ、Microsoft 365でファイル編集を終えるとOneDrive上のファイルは削除されます。詳しい説明はLiferayヘルプセンターのこの記事この記事をご参照ください。

Azure PortalでMicrosoft 365の連携設定を行う


では早速設定方法を見ていきましょう。まずはAzure PortalでMicrosoft 365側の設定を行います。具体的には、Microsoft Graph APIをLiferayが利用できるように公開し、Liferay向けにOAuth2.0クライアントIDを発行します。

1. Azure Portalに管理者アカウントでログインする
2. Azure Active Directoryをクリックし、「アプリの登録」->「新規登録」をクリックする 
3. 「名前」にアプリケーション名を入力し(認証時に表示されます)、「アカウントの種類」を適宜選択して「登録」をクリックする
4. 作成が完了すると以下のような画面が表示されるので、「アプリケーション(クライアント)ID」「ディレクトリ(テナント)ID」の値をコピーし、「リダイレクトURIを追加する」をクリックする
5. 「プラットフォームを追加」をクリックして「Web」を選択する
6. 「リダイレクト URI」にhttp(s)://<host or IP>:<port>/o/document_library/onedrive/oauth2と入力して「構成」をクリックする
7. 「証明書とシークレット」->「新しいクライアントシークレット」をクリックし、「説明」と「有効期限」を適宜入力して「追加」をクリックする
8. クライアントシークレットが登録されたら「値」欄に表示されたクライアントシークレットをコピーする
9. 続いて「APIのアクセス許可」->「アクセス許可の追加」をクリックする
10. 「Microsoft Graph API」をクリックする
11. 「委任されたアクセス許可」を選択し、Files.Read.AllFiles.ReadWrite.Allにチェックを入れて「アクセス許可の追加」をクリックする

以上でMicrosoft 365側の設定は終わりです。

Liferayの設定を行う


続いて、Liferay側の設定を行います。

1. Liferay DXP 7.2に管理者でログインする
2. 「Control Panel」->「Configuration」->「Instance Settings」->「Documents and Media」をクリックする(この場合、インスタンス毎の設定になります。グローバルに設定する場合は「System Settings」->「Documents and Media」をクリックします)
3. 「OneDrive」を選択し、Client IDに「アプリケーション(クライアント)ID」、Client Secretに「クライアントシークレット」、Tenantに「ディレクトリ(テナント)ID」を入力して「Save」をクリックする

以上で設定完了です。Liferay側の設定はとても簡単です。

動作確認してみよう


では動作確認してみましょう。ドキュメントとメディアの新規作成メニューをクリックすると、Word、PowerPoint、Excelが表示されるようになります。

これらをクリックしてファイル名を入力すると、Microsoft 365のログイン画面が表示されるので認証情報を入力します。初回はアクセス許可の画面が表示されるので許可します(2回目以降は表示されません)。すると、OneDrive上にファイルが生成されオンラインのOfficeアプリでファイルが編集できるようになります。ファイルを保存すると、OneDrive上のファイルをLiferayに保存し、OneDrive上のファイルは削除されます。

また、アクションメニューの「Edit in Office 365」をクリックすると、OneDrive上にファイルをコピーしてOfficeアプリでのオンライン編集が始まります。

今回の紹介は以上です。Officeファイルをオンライン編集できるメリットは大きいと思いますので、組織でMicrosoft 365をお使いであれば是非お試しください。