0

我正在尝试在 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 

谢谢

4

1 回答 1

1

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

text raw "unicode_for_\e501"

text "unicode_for_\uE501".html_safe

请注意以下事项:

  1. 你想要我们的Unicode代码E501,你需要在它之前用\u转义。
  2. 您必须在字符串周围使用双引号以确保 \u 被正确拾取。
  3. .html_safe 是一种可以在字符串上调用的方法。

双引号和 \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" }
}
于 2014-02-14T21:43:57.870 回答