AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

AmazonLinux2 とかそのあたりに Noto フォントを入れる、 fontconfig で

SVG を PDF 出力する必要があるんだけど、 SVG にアウトライン化されていない日本語テキストが存在していて「こいつはどうすれば……?」となっていた。

rsvg-convert の導入

SVG -> PDF 変換で一番お手軽にやれそうなので librsvg2 をインストールして rsvg-convert コマンドを利用できるようにした。

ちなみにロケ地は AmazonLinux2 かつ x86_64 環境なので、以下のようになる。

[ec2-user@localhost ~]$ sudo yum -y install librsvg2*.x86_64

...snip...

完了しました!
[ec2-user@localhost ~]$ which rsvg-convert
/usr/bin/rsvg-convert

これで rsvg-convert が利用可能になるので、以下のようにして使う。

[ec2-user@localhost ~]$ rsvg-convert -f pdf -o ${生成する PDF ファイル名}.pdf ${素材 SVG ファイル名}.svg

これで作成した PDF が日本語表示できなかった。

参考

www.itsfullofstars.de

CSS で指定できる? みたいな話あったんだけど、今回実装を担当しているわけじゃないのでなんか面倒そうなのはパス!という感じにした。

ill-identified.hatenablog.com

Noto フォントの導入

あとから考えて気づいたのだけど、 SVG ファイルはテキスト情報を持たないのでレンダリング (閲覧) する環境に依存する。 いままでローカルの macOSWindows 環境で SVG -> PDF 出力をしていたので、変換時に適切なフォントが組み込まれていたのだろう。

ということで、結局 rsvg-convert を利用する環境に日本語フォントを導入することにした。 入れるのは安定の Noto フォント。

[ec2-user@localhost ~]$ wget https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip
[ec2-user@localhost ~]$ unzip NotoSansCJKjp-hinted.zip -d NotoSansCJKjp
[ec2-user@localhost ~]$ sudo mv NotoSansCJKjp /usr/share/fonts/NotoSansCJKjp
[ec2-user@localhost ~]$ sudo chmod 644 /usr/share/fonts/NotoSansCJKjp/*
[ec2-user@localhost ~]$ ls -lha /usr/share/fonts/NotoSansCJKjp
合計 142M
drwxrwxr-x 2 ec2-user ec2-user  336  926 17:16 .
drwxr-xr-x 5 root     root       72  926 17:16 ..
-rw-r--r-- 1 ec2-user ec2-user 4.3K 1024  2017 LICENSE_OFL.txt
-rw-r--r-- 1 ec2-user ec2-user  17M  615  2015 NotoSansCJKjp-Black.otf
-rw-r--r-- 1 ec2-user ec2-user  17M  615  2015 NotoSansCJKjp-Bold.otf
-rw-r--r-- 1 ec2-user ec2-user  16M  615  2015 NotoSansCJKjp-DemiLight.otf
-rw-r--r-- 1 ec2-user ec2-user  16M  615  2015 NotoSansCJKjp-Light.otf
-rw-r--r-- 1 ec2-user ec2-user  16M  615  2015 NotoSansCJKjp-Medium.otf
-rw-r--r-- 1 ec2-user ec2-user  16M  615  2015 NotoSansCJKjp-Regular.otf
-rw-r--r-- 1 ec2-user ec2-user  15M  615  2015 NotoSansCJKjp-Thin.otf
-rw-r--r-- 1 ec2-user ec2-user  17M  615  2015 NotoSansMonoCJKjp-Bold.otf
-rw-r--r-- 1 ec2-user ec2-user  16M  615  2015 NotoSansMonoCJKjp-Regular.otf
-rw-r--r-- 1 ec2-user ec2-user  305 1024  2017 README
[ec2-user@localhost ~]$ sudo fc-cache -fv
/usr/share/fonts: caching, new cache contents: 0 fonts, 3 dirs
/usr/share/fonts/NotoSansCJKjp: caching, new cache contents: 9 fonts, 0 dirs
/usr/share/fonts/dejavu: caching, new cache contents: 9 fonts, 0 dirs
/usr/share/fonts/urw-base35: caching, new cache contents: 69 fonts, 0 dirs
/usr/share/X11/fonts/Type1: skipping, no such directory
/usr/share/X11/fonts/TTF: skipping, no such directory
/usr/local/share/fonts: skipping, no such directory
/root/.local/share/fonts: skipping, no such directory
/root/.fonts: skipping, no such directory
/usr/share/fonts/NotoSansCJKjp: skipping, looped directory detected
/usr/share/fonts/dejavu: skipping, looped directory detected
/usr/share/fonts/urw-base35: skipping, looped directory detected
/usr/lib/fontconfig/cache: cleaning cache directory
/root/.cache/fontconfig: not cleaning non-existent cache directory
/root/.fontconfig: not cleaning non-existent cache directory
/usr/bin/fc-cache-64: succeeded

手順はまるまる以下を参考にした。

blog.codebase.co.jp

すっぴん? のフォント一覧

Noto フォント導入前のフォント一覧はこんな感じ。

[ec2-user@localhost ~]$ fc-list : file
/usr/share/fonts/urw-base35/URWBookman-LightItalic.otf:
/usr/share/fonts/urw-base35/NimbusMonoPS-BoldItalic.otf:
/usr/share/fonts/urw-base35/NimbusRoman-Bold.otf:
/usr/share/fonts/urw-base35/C059-Bold.t1:
/usr/share/fonts/urw-base35/NimbusRoman-Regular.otf:
/usr/share/fonts/urw-base35/NimbusSansNarrow-BoldOblique.t1:
/usr/share/fonts/urw-base35/URWBookman-Demi.t1:
/usr/share/fonts/dejavu/DejaVuSans-ExtraLight.ttf:
/usr/share/fonts/urw-base35/URWBookman-Demi.otf:
/usr/share/fonts/dejavu/DejaVuSansCondensed-BoldOblique.ttf:
/usr/share/fonts/urw-base35/NimbusSans-Bold.t1:
/usr/share/fonts/urw-base35/C059-Italic.otf:
/usr/share/fonts/urw-base35/NimbusSansNarrow-Regular.otf:
/usr/share/fonts/urw-base35/NimbusRoman-BoldItalic.t1:
/usr/share/fonts/urw-base35/URWBookman-Light.otf:
/usr/share/fonts/urw-base35/URWGothic-Book.t1:
/usr/share/fonts/urw-base35/C059-Bold.otf:
/usr/share/fonts/urw-base35/NimbusSansNarrow-Bold.otf:
/usr/share/fonts/dejavu/DejaVuSans-BoldOblique.ttf:
/usr/share/fonts/urw-base35/URWBookman-DemiItalic.otf:
/usr/share/fonts/urw-base35/NimbusRoman-Italic.otf:
/usr/share/fonts/urw-base35/StandardSymbolsPS.t1:
/usr/share/fonts/dejavu/DejaVuSansCondensed.ttf:
/usr/share/fonts/urw-base35/NimbusSansNarrow-Oblique.otf:
/usr/share/fonts/urw-base35/Z003-MediumItalic.otf:
/usr/share/fonts/urw-base35/NimbusSans-BoldItalic.t1:
/usr/share/fonts/urw-base35/D050000L.otf:
/usr/share/fonts/urw-base35/URWGothic-Book.otf:
/usr/share/fonts/urw-base35/P052-Bold.otf:
/usr/share/fonts/urw-base35/NimbusSans-BoldItalic.otf:
/usr/share/fonts/urw-base35/NimbusRoman-Bold.t1:
/usr/share/fonts/urw-base35/Z003-MediumItalic.t1:
/usr/share/fonts/urw-base35/NimbusMonoPS-BoldItalic.t1:
/usr/share/fonts/urw-base35/NimbusSansNarrow-Bold.t1:
/usr/share/fonts/urw-base35/NimbusSansNarrow-BoldOblique.otf:
/usr/share/fonts/urw-base35/NimbusMonoPS-Italic.t1:
/usr/share/fonts/urw-base35/D050000L.t1:
/usr/share/fonts/urw-base35/C059-Roman.t1:
/usr/share/fonts/urw-base35/NimbusRoman-Regular.t1:
/usr/share/fonts/urw-base35/NimbusSansNarrow-Oblique.t1:
/usr/share/fonts/urw-base35/P052-BoldItalic.otf:
/usr/share/fonts/urw-base35/NimbusMonoPS-Bold.t1:
/usr/share/fonts/urw-base35/NimbusMonoPS-Regular.otf:
/usr/share/fonts/urw-base35/C059-Italic.t1:
/usr/share/fonts/urw-base35/URWBookman-DemiItalic.t1:
/usr/share/fonts/urw-base35/C059-BdIta.otf:
/usr/share/fonts/urw-base35/P052-Roman.t1:
/usr/share/fonts/urw-base35/URWGothic-Demi.otf:
/usr/share/fonts/urw-base35/P052-Italic.t1:
/usr/share/fonts/dejavu/DejaVuSans-Bold.ttf:
/usr/share/fonts/urw-base35/NimbusSans-Italic.t1:
/usr/share/fonts/urw-base35/NimbusMonoPS-Bold.otf:
/usr/share/fonts/urw-base35/URWGothic-Demi.t1:
/usr/share/fonts/urw-base35/URWBookman-LightItalic.t1:
/usr/share/fonts/urw-base35/P052-Roman.otf:
/usr/share/fonts/urw-base35/C059-BdIta.t1:
/usr/share/fonts/urw-base35/P052-Italic.otf:
/usr/share/fonts/urw-base35/NimbusSans-Italic.otf:
/usr/share/fonts/urw-base35/P052-Bold.t1:
/usr/share/fonts/dejavu/DejaVuSans.ttf:
/usr/share/fonts/urw-base35/C059-Roman.otf:
/usr/share/fonts/urw-base35/URWGothic-BookOblique.otf:
/usr/share/fonts/urw-base35/P052-BoldItalic.t1:
/usr/share/fonts/urw-base35/URWGothic-BookOblique.t1:
/usr/share/fonts/urw-base35/URWGothic-DemiOblique.t1:
/usr/share/fonts/urw-base35/NimbusSans-Bold.otf:
/usr/share/fonts/urw-base35/NimbusMonoPS-Regular.t1:
/usr/share/fonts/urw-base35/NimbusSans-Regular.otf:
/usr/share/fonts/dejavu/DejaVuSans-Oblique.ttf:
/usr/share/fonts/urw-base35/NimbusSansNarrow-Regular.t1:
/usr/share/fonts/urw-base35/URWGothic-DemiOblique.otf:
/usr/share/fonts/urw-base35/NimbusRoman-BoldItalic.otf:
/usr/share/fonts/urw-base35/NimbusMonoPS-Italic.otf:
/usr/share/fonts/dejavu/DejaVuSansCondensed-Oblique.ttf:
/usr/share/fonts/dejavu/DejaVuSansCondensed-Bold.ttf:
/usr/share/fonts/urw-base35/NimbusRoman-Italic.t1:
/usr/share/fonts/urw-base35/NimbusSans-Regular.t1:
/usr/share/fonts/urw-base35/URWBookman-Light.t1:
Noto フォントのダウンロード先

検索して出てくる Noto JP のページからダウンロードできる一式と内容物に差異があるので、適時選択して、と思ったんだけど判断つかねえな! という風情だった。 前述の通り、 CJKjp のみ採用した。

ちなみに Noto-hinted では存在する全言語向けのフォントが入っているのでむちゃ重いのであった。

# 全部入り (CJK は言うに及ばず諸外国向けのフォントも入ってる、 1.1GB)
https://noto-website-2.storage.googleapis.com/pkgs/Noto-hinted.zip
# JP 向けのみ (121MB)
https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip