Generate PDF with prawn

2023-12-26 ruby

Prawnで様々なフォントを使う方法。ttf形式のIPAフォントはボールドやイタリックが使えません。otf形式のNotoSerifJPは、半角文字や他のフォントと組み合わせるとうまくいかない?(単体で使ってる時は表示されたりもするのですが、不具合が出るタイミングがよく分かっていません)

一番下はおまけで、最初からfont_familiesに登録されているフォントの使用例です(英語は楽だなぁ…)。

require 'prawn'

pdf = Prawn::Document.new

ipamp_path = "./ipamp.ttf"
pdf.font_families.update("ipamp" => {normal: ipamp_path,
                            bold: ipamp_path,
                            italic: ipamp_path,
                            bold_italic: ipamp_path})

ipaexg_path = "./ipaexg.ttf"
pdf.font_families.update("ipaexg" => {normal: ipaexg_path,
                            bold: ipaexg_path,
                            italic: ipaexg_path,
                            bold_italic: ipaexg_path})


pdf.font_families.update("noto-serif" => {normal: "./NotoSerifJP-Regular.otf",
                            bold: "./NotoSerifJP-Bold.otf",
                            italic: "./NotoSerifJP-Regular.otf",
                            bold_italic: "./NotoSerifJP-Regular.otf"})                            

pdf.font "ipamp"
pdf.text "Prawnで日本語出力。IPA明朝"
pdf.formatted_text [{text: "ボールド", styles: [:bold]}, {text: "イタリック", styles: [:italic]}]

pdf.font "ipaexg"
pdf.text "Prawnで日本語出力。IPAゴシック"
pdf.formatted_text [{text: "ボールド", styles: [:bold]}, {text: "イタリック", styles: [:italic]}]

pdf.font "noto-serif" # Not working with prawn 2.4.0
pdf.text "Prawnで日本語出力。Noto Serif JP"
pdf.formatted_text [{text: "ボールド", styles: [:bold]}, {text: "イタリック", styles: [:italic]}]

pdf.font "Helvetica" # Courier, Times-Roman are also available
pdf.text "Prawn with embedded font. Helvetica"
pdf.formatted_text [{text: "bold", styles: [:bold]}, {text: "italic", styles: [:italic]}]

pdf.render_file "hello.pdf"

出力結果(hello.pdf)

/snippets/ruby.htmlにも同じコード例を載せています。