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 が日本語表示できなかった。
参考
CSS で指定できる? みたいな話あったんだけど、今回実装を担当しているわけじゃないのでなんか面倒そうなのはパス!という感じにした。
Noto フォントの導入
あとから考えて気づいたのだけど、 SVG ファイルはテキスト情報を持たないのでレンダリング (閲覧) する環境に依存する。 いままでローカルの macOS や Windows 環境で 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 9月 26 17:16 . drwxr-xr-x 5 root root 72 9月 26 17:16 .. -rw-r--r-- 1 ec2-user ec2-user 4.3K 10月 24 2017 LICENSE_OFL.txt -rw-r--r-- 1 ec2-user ec2-user 17M 6月 15 2015 NotoSansCJKjp-Black.otf -rw-r--r-- 1 ec2-user ec2-user 17M 6月 15 2015 NotoSansCJKjp-Bold.otf -rw-r--r-- 1 ec2-user ec2-user 16M 6月 15 2015 NotoSansCJKjp-DemiLight.otf -rw-r--r-- 1 ec2-user ec2-user 16M 6月 15 2015 NotoSansCJKjp-Light.otf -rw-r--r-- 1 ec2-user ec2-user 16M 6月 15 2015 NotoSansCJKjp-Medium.otf -rw-r--r-- 1 ec2-user ec2-user 16M 6月 15 2015 NotoSansCJKjp-Regular.otf -rw-r--r-- 1 ec2-user ec2-user 15M 6月 15 2015 NotoSansCJKjp-Thin.otf -rw-r--r-- 1 ec2-user ec2-user 17M 6月 15 2015 NotoSansMonoCJKjp-Bold.otf -rw-r--r-- 1 ec2-user ec2-user 16M 6月 15 2015 NotoSansMonoCJKjp-Regular.otf -rw-r--r-- 1 ec2-user ec2-user 305 10月 24 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
手順はまるまる以下を参考にした。
すっぴん? のフォント一覧
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