ONLYOFFICEの日本語フォントを綺麗にする


こんにちは。@notake です。

Webベースのオフィススイート ONLYOFFICE で Office 文書を表示すると、日本語の書体が違和感のあるものとなってしまいます。そこで、ONLYOFFICE に日本語フォントを導入し、Office 文書を綺麗に表示できるようにします。

Nextcloud

プライベートな環境に Dropbox のようなクラウドストレージを構築できる、Nextcloud というソフトウェアがあります。
Linux サーバーを用意して Docker で起動するだけで、本格的なファイルストレージを構築することができます。

この Nextcloud は写真やテキスト、PDF ファイルなどをそのままプレビューできたりと多機能で大変便利なのですが、Word や Excel のような Office 文書はブラウザでの表示・編集には対応していません。

ONLYOFFICE

そこで、Office 文書をサポートする ONLYOFFICE を導入し、Nextcloud と連携することにしました。

(当記事では Nextcloud と ONLYOFFICE の導入については触れません。導入については以下の ONLYOFFICE 公式リポジトリを参照してください。)
https://github.com/ONLYOFFICE/docker-onlyoffice-nextcloud

ところが、ONLYOFFICE で Office 文書を表示してみると、日本語が違和感のある表示となってしまいます。ひらがなと漢字のサイズが合っていませんし、 あたりの書体も怪しいです。

そこで、ONLYOFFICE に日本語フォントを導入し、文書表示における違和感を取り除きます。

日本語フォントの選定

ONLYOFFICE の公式ドキュメント

によると、対応しているフォントは *.ttf (TrueType) のみとなり、*.otf (OpenType) には対応していないようです。日本語の表示にはゴシック体と明朝体があれば十分でしょうから、以下の2種類のフォントを導入することにしました。

日本語フォントの配置

上記公式ドキュメントによると /usr/share/fonts/*.ttf ファイルを置けば良いように思いますが、残念ながらドキュメントの通りにファイルを配置しても ONLYOFFICE は配置したフォントを使用しません。

ONLYOFFICE Docker コンテナ内の /var/www/onlyoffice/documentserver/core-fonts ディレクトリに初期フォントが多数格納されており、こちらが優先的に読み込まれるようです。
そのため、本来であれば既に core-fonts ディレクトリに格納されているデフォルトのフォントを全て削除し、空になったディレクトリに日本語フォントを導入する必要がありますが、Docker を使用している場合はホストのディレクトリを ONLYOFFICE Docker コンテナの core-fonts にマウントすることで、こちらが配置したフォントを ONLYOFFICE で使用することができます。

最初に、ホストに core-fonts ディレクトリを作成し、源真ゴシックとIPAex明朝を配置します。

core-fonts
├── genshin-gothic
│   ├── GenShinGothic-Monospace-Normal.ttf
│   ├── GenShinGothic-Normal.ttf
│   └── GenShinGothic-P-Normal.ttf
└── ipaex-mincho
    └── ipaexm.ttf

続いて、docker-compose.yml を編集し、volumes にエントリを追加します。

#...

  onlyoffice-document-server:
    container_name: onlyoffice-document-server
    #...(中略)...
    volumes:
      - document_data:/var/www/onlyoffice/Data
      - document_log:/var/log/onlyoffice
      - core-fonts:/var/www/onlyoffice/documentserver/core-fonts:ro #追加

#...

この設定で docker-compose を起動し、ブラウザのキャッシュを消去することで ONLYOFFICE が新しい日本語フォントを使用するようになります。

なお、公式ドキュメントでは 「/usr/bin/documentserver-generate-allfonts.sh を実行してフォントを再生成せよ」とあるのですが、Docker コンテナ版の ONLYOFFICE はコンテナ起動時にフォント生成のスクリプトが実行されるため、コンテナ起動後に手動でスクリプトを呼び出す必要はありません。