Prawn PDF& PUA unicode

时间:2013-11-01 22:08:29

标签: pdf unicode prawn

我正在尝试在Prawn文档中包含一个私有使用区域unicode,但无法使其工作。

我查看了这个帖子Prawn:Print unicode string in PDF,但无法完成原始工作。我收到这个错误:

pdf.rb:90:in `block in <main>': undefined method `raw' for #<Prawn::Document:0x007fa579adfef0> (NoMethodError)

没有原始的,它不会渲染雕文。

font("#{Prawn::DATADIR}/fonts/icons-webfont.ttf") do
text raw "unicode_for_\e501"
end 

由于

1 个答案:

答案 0 :(得分:1)

'raw'方法不是Prawn方法;它是来自Rails的OutputSafetyHelper method。我得到了与你相同的错误(我在模型中运行Prawn代码,而不是视图)但在查看#raw的源代码后,我意识到它所做的只是调用String#html_safe。我替换了你的原文:

text raw "unicode_for_\e501"

text "unicode_for_\uE501".html_safe

请注意以下事项:

  1. 您希望我们使用E501的Unicode代码,您需要在\ u之前使用\ u进行转义。
  2. 您必须在字符串周围使用双引号,以确保\ u被正确拾取。
  3. .html_safe是一个可以在字符串上调用的方法。
  4. 双引号和\ u擒纵是很重要的,但我发现(为了我的目的)我不需要.html_safe调用,因为我能够在没有它的情况下打印Unicode字符。

    这是我的文本调用,它会加载一个字形图标:

    pdf.font("vabicons") do
      pdf.text "\uE61d"
    end
    

    作为参考,我从IcoMoon.io加载自定义字体,所有可打印字符必须由Unicode引用。请记住,您需要正确声明您的字体,否则即使格式正确的文本也可能无法显示。

    这是我的字体声明:

    sym = Pathname.new( Rails.root.join('app', 'assets', 'stylesheets', 'fonts', 'vabicons.ttf').to_s )
    pdf.font_families["vabicons"] = {
      :normal  => { :file => sym, :font => "Regular" }
    }