2016-04-11 16 views
1

RORとPrawnを使用してPDFを生成しています。 PDFは英語(フォームラベル)と日本語またはその他のFE言語(ユーザーが入力したデータ)の両方にあります。Prawn PDFは、英語とJapenese/Chinese/Thai/Koreanを同じPDFファイルでサポートします

私はipamp.ttfが提案されたところでこれに関連する質問を見つけました。私はそのフォントをインストールし、美しく日本語を印刷します。問題は、英語をサポートしていないことです!私は両方が必要です。

重要な場合は、ipampをインストールした方法です。

font("lib/assets/ipamp.ttf") 

私はGoogleの能登フォントを見つけましたが、彼らはエビを使用することはできませんTTC形式である:私はちょうどinitializeメソッド内のフォントと呼ばれます。

私は表示しようとしているテキストがEU /ラテンまたは極東であるかどうかを判断するためのロジックを一切使用せずに、すべてのEUと極東言語を同時にサポートするソリューションを探しています(そしてそれに基づいてフォントを切り替える)。それはかなり脆いように思える。

PDFがサーバー上でレンダリングされ、PDFとしてクライアントに送信されるため、フォントファイルのサイズは問題になりません。

ありがとうございます!

答えて

2

ここには、この投稿(this post)といくつかの試行錯誤からまとめた解決策があります。

重要な点は、Prawnがフォールバックフォントをサポートしていることです。プロジェクトにそれらをダウンロードしてから、それらを含むようにPrawnのフォントファミリを更新してから、Prawnがレンダリング方法がわからないUnicode文字があることを認識すると、 "fallback_fonts"というメソッドをインクルードする必要があります。

class ResultsPdf < Prawn::Document 

    def initialize(device) 
    super() 
    @device = device 
    set_fallback_fonts 
    page_title   #typically English 
    persons_name  #typically Japanese 
    end 

def set_fallback_fonts 
    ipamp_path = "lib/assets/ipamp.ttf" 
    ipamp_spec = { file: ipamp_path, font: 'IPAPMincho'} 

    #don't use a symbol to define the name of the font! 
    font_families.update("ipamp" => {normal: ipamp_spec, 
            bold: ipamp_spec, 
            italic: ipamp_spec, 
            bold_italic: ipamp_spec}) 
    end 

    def fallback_fonts 
    ["ipamp"] 
    end 

    def page_title 
    # device name is typically in English 
    text "#{@device.name}", :size => 15, :style => :bold, :align => :center 
    end 

    def persons_name 
    # owner name can be in any language, including Japanese 
    # you don't have to specify :fallback_font here. Prawn will use your method. 
    text "Name: #{@device.owner_last_name}" 
    end 

end 
関連する問題