Ruby - 如何在Prawn中使用不同的字体?

时间:2016-05-17 22:04:43

标签: ruby pdf prawn

我有一个小型的Ruby程序,我可以使用Prawn将一些文本打印成PDF,但文本的一小部分是非英文字符。 (其中一些是中文,有些是希腊文等)。当我运行我的程序时,我当然会收到错误Your document includes text that's not compatible with the Windows-1252 character set. (Prawn::Errors::IncompatibleStringEncoding) If you need full UTF-8 support, use TTF fonts instead of PDF's built-in fonts。我知道我需要使用TTF字体,但我怎么做呢?我需要在线安装吗?如果是这样,我将把它保存到哪里?我知道这可能是一个愚蠢的问题,但我是Ruby和Prawn的新手。谢谢!

3 个答案:

答案 0 :(得分:7)

ttf是一种常见的格式,您可以在Google font下载字体,例如,将字体放在项目的某个目录中,例如/assets/fonts/

然后您可以定义一个新的字体系列:

Prawn::Document.generate("output.pdf") do
  font_families.update("Arial" => {
    :normal => "/assets/fonts/Arial.ttf",
    :italic => "/assets/fonts/Arial Italic.ttf",
  })
  font "Arial"
end

然后,您可以在整个文档中使用该字体。

答案 1 :(得分:0)

如果您使用普通Range,可以尝试这种方式:

Ruby

答案 2 :(得分:0)

要避免此错误,一种快速而肮脏的解决方法是在将文本写入pdf文件之前将其编码为Windows-1252。

text = text.encode("Windows-1252", invalid: :replace, undef: :replace, replace: '')

此方法的缺点是,如果要转换的字符在Windows-1252编码中无效或未定义,则将其替换为空字符串'' 根据您的原始文本,此解决方案可能效果很好,或者您最终可能会在PDF中丢失一些字符。