質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

3976閲覧

railsでThinReportsを用いて韓国語、中国語を出力する際に文字化けする

shoheiyokoyam

総合スコア9

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

PDF

PDF(Portable Document Format)とはISOによって国際標準として制定されている電子ドキュメント用の拡張子です。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/04/10 09:32

編集2016/04/13 01:34

Ruby, Rails初心者で独学しています。
PDF出力する際に様々な言語で出力する機能を実装していて、Thinreportsというgemを用いています。
韓国語や中国語をテキストとして表示させたいのですが、_ _ _のように文字ばけしてしまいます。中国語は日本の漢字であれば出力されるようです。

日本語や英語はちゃんと出力できています。
表示するために何か良い方法はないでしょうか。
よろしくお願いいたします。

詳細 Issues
https://github.com/thinreports/thinreports-generator/issues/51

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まず,rubyで取り込む文字列を適切な文字列コードでEncodingします。これとpdfに出力する文字列としてあげればうまく動くと思います。
これが前提でさらにpdfリーダー側に文字コードを指定させなければならないようで,こちらは,rubyのコードではどうにもならないのでで,読む側に委ねるしかないでしょう。

追記

最初pdfの仕様を調べてすぐにご返答しようと思っていたのですが,ttfのバイナリをコピペしてファイルを移植したら,ttfがコピペした時にファイルが壊れることに気づかずハマってしまっていました。データサイズが増大していたので,nil文字に空白が挿入されてしまったのかもしれません。

画像1

こちらの方がNOTO SANS CJKのttfファイルを公開していたので,使わせていただき,私の方でも再現できました。
otf から ttfに正常に変換できれば上手くいくみたいですね。ネット上の怪しいファイルを使うのが嫌であるなら自分で変換するツールが多々あるみたいなので,そちらを調べてみるのもよろしいかと思います。
こんないいgemがあるのを知れてよかったです。また何かあればよろしくお願いします。

解決方法は以下のコードをcontrollerに挿入し,指定パスにttfファイルを入れました。どこでもいいですが,controllerだとなんども呼ばれて複数指定の時困るので,config.application.rbで書くのがいいかもしれないです。

ruby

1ThinReports.configure do |config| 2 config.fallback_fonts = File.join(Rails.root, 'app', 'views','tasks' ,'NotoSansCJKtc-DemiLight.ttf') 3end

投稿2016/04/13 10:17

編集2016/04/17 19:00
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shoheiyokoyam

2016/04/15 02:00

回答ありがとうございます。 いろいろ試してみたのですが、 Encodeした文字列を渡すと、PDFを生成する際にPrawn::Errors::IncompatibleStringEncodingが発生してしまいます。 -- コード -- respond_to do |format| format.html format.pdf do report = ThinReports::Report.create do # generaterで生成したレイアウトファイルを指定 use_layout "#{Rails.root}/app/pdfs/pdf_pdf.tlf", :id => :pdf start_new_page :layout => :pdf st = "안녕" encorded_st = st.encode("EUC-KR") page.item(:test).value(encorded_st) end send_data( report.generate, encording: "EUC-KR", filename: "file.pdf", type: "application/pdf", ) end end generateの際に Arguments to text methods must be UTF-8 encoded のエラーです。 http://stackoverflow.com/questions/15089496/i-just-want-to-write-a-simple-%C2%B5-in-ruby-and-prawn を参考に encorded_st = st.encode("EUC-KR")の部分を encorded_st = st. force_encoding("EUC-KR")に変更してみたのですが今度は次のようなエラーが出ました ArgumentError invalid byte sequence in EUC-KR 何か対処方法はないでしょうか
退会済みユーザー

退会済みユーザー

2016/04/17 18:38 編集

Thin-ReportsはUTF-8だけしか対応していないのですね。といいつつUTF-8は韓国語中国語サポートしているので問題なかったみたいですが。リンク先見ました。私も現在進行形でリンク先の情報を参考にフォント埋め込みに挑戦してました。あまりお役に立てませんでしたが,解決したみたいでなによりです。 追記 解決済みだとは思いますが,こちらも再現取れたので,情報を追記しました。
shoheiyokoyam

2016/04/21 06:11

回答ありがとうございます。フォントをダウンロードする手順でうまくいきました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問