質問: Ruby, Rails初心者で独学しています。 PDF出力する際に様々な言語で出力する機能を実装していて、Thinreportsというgemを用いています。 韓国語や中国語をテキストとして表示させたいのですが、_ _ _のように文字ばけしてしまいます。中国語は日本の漢字であれば出力されるようです。 日本語や英語はちゃんと出力できています。 表示するために何か良い方法はないでしょうか。 よろしくお願いいたします。 詳細 Issues https://github.com/thinreports/thinreports-generator/issues/51
回答: まず,rubyで取り込む文字列を適切な文字列コードでEncodingします。これとpdfに出力する文字列としてあげればうまく動くと思います。 これが前提でさらにpdfリーダー側に文字コードを指定させなければならないようで,こちらは,rubyのコードではどうにもならないのでで,読む側に委ねるしかないでしょう。 追記 最初pdfの仕様を調べてすぐにご返答しようと思っていたのですが,ttfのバイナリをコピペしてファイルを移植したら,ttfがコピペした時にファイルが壊れることに気づかずハマってしまっていました。データサイズが増大していたので,nil文字に空白が挿入されてしまったのかもしれません。 !画像1 こちらの方がNOTO SANS CJKのttfファイルを公開していたので,使わせていただき,私の方でも再現できました。 otf から ttfに正常に変換できれば上手くいくみたいですね。ネット上の怪しいファイルを使うのが嫌であるなら自分で変換するツールが多々あるみたいなので,そちらを調べてみるのもよろしいかと思います。 こんないいgemがあるのを知れてよかったです。また何かあればよろしくお願いします。 解決方法は以下のコードをcontrollerに挿入し,指定パスにttfファイルを入れました。どこでもいいですが,controllerだとなんども呼ばれて複数指定の時困るので,config.application.rbで書くのがいいかもしれないです。 ``` ThinReports.configure do |config| config.fallback_fonts = File.join(Rails.root, 'app', 'views','tasks' ,'NotoSansCJKtc-DemiLight.ttf') end ```