gpt4 book ai didi

ruby-on-rails - 任何用于生成 pdf 的字体可以处理中文、西里尔文...?

转载 作者:行者123 更新时间:2023-12-03 16:10:54 24 4
gpt4 key购买 nike

我正在 中创建 pdf 文档生成器Ruby on Rails Prawn gem 和我想出了一个问题,当我有中文、日文和西里尔字母时,它们显示不正确。
我用谷歌搜索,这是因为“当我生成字体时,我需要指定,pdf文本应该用什么字体呈现”。

现在这不是问题,但事实上我的文档将包含gTLD supports 的所有不同可能的字符。 .

问题一:

您知道用于生成包含尽可能多字符(亚洲、欧洲、符号等)的 pdf 文档的任何字体吗?理想情况下,gTLD 支持的所有字符。

我知道 Prawn 默认情况下包括 gkai00mp.ttf 但它专注于中文字符,我正在寻找允许将它们全部包括在内(就像 PokeMon,必须捕获它们;我知道我要求太多但仍然......)

另一个问题是当客户打开此文档时:

问题 2

Prawn 生成的pdf是不是在pdf文件中包含了我的字体,所以当其他电脑打开时,字体会出现?这是默认标准吗?或者我需要确保/强制执行此功能?

最佳答案

好吧,我自己来回答。在 SuperUser我问了类似的问题(侧重于更理论化的答案),主要结论是:

There is no single font that supports the whole of Unicode.



不过好在pdf支持回退字体,还有 Prawn gem 也是。

这是我的解决方案:

1/设置你的后备字体
  kai = "#{Prawn::BASEDIR}/data/fonts/gkai00mp.ttf"
action_man_path = "#{Prawn::BASEDIR}/data/fonts/Action Man.dfont"
dejavu = "#{Prawn::BASEDIR}/data/fonts/DejaVuSans.ttf"

font_families.update("dejavu" => {
:normal => dejavu,
:italic => dejavu,
:bold => dejavu,
:bold_italic => dejavu
})

#Times is defined in prawn
font_families.update("times" => {
:normal => "Times-Roman",
:italic => "Times-Italic",
:bold => "Times-Bold",
:bold_italic => "Times-BoldItalic"
})

font_families.update("action_man" => {
:normal => { :file => action_man_path, :font => "ActionMan" },
:italic => { :file => action_man_path, :font => "ActionMan-Italic" },
:bold => { :file => action_man_path, :font => "ActionMan-Bold" },
:bold_italic => { :file => action_man_path, :font => "ActionMan-BoldItalic" }
})

font_families.update(
"kai" => {
:normal => { :file => kai, :font => "Kai" },
:bold => kai,
:italic => kai,
:bold_italic => kai
}
)


def fallback_fonts
["dejavu", "times", 'kai', 'action_man']
end

2/电话
 font("Helvetica", size: 14) do  #keyword "Helvetica" is specified in Prawn by default
text "址 foo", :fallback_fonts => fallback_fonts
end

现在,在这里我只是使用默认情况下包含在 Prawn 中的字体,但是这样您可以添加具有不同字符集的几种字体,并将它们指定为后备

例如,您可以将字体放在 Rails 根目录中的某个位置,然后从那里包含它们

备注 在“Kai”字体中,我为普通、斜体、粗体、bold_italic 指定了相同的字体,没有样式。我是故意这样做的。从我遇到的情况来看,gkai00mp 字体没有粗体字符或斜体字符。因此,当斜体/粗体字符被渲染时,它将以正常样式打印(这比根本不渲染要好)。

如果我没有为字体指定粗体/斜体(例如“Kai”)。
  font_families.update(
"kai" => {
:normal => { :file => kai, :font => "Kai" }
}
)

.. 并且您尝试渲染将回退到 kai 的样式字符...
 text "<b>址 foo</b>", :fallback_fonts => fallback_fonts, :inline_format=>true 

...我去拿
Prawn::Errors::UnknownFont in Foo

is not a known font.

注 2:如果要将非 ascii 字符放入 ruby​​ 文件,则需要将编码放在文件顶部
# coding: utf-8

class Foo
...
end

然而,这适用于 ruby​​ 1.9。 Ruby 1.8.x 源代码只能处理 ASCII(更多信息请参见 ruby 1.9 walkthrough by P.C.
但在 Rails 中你应该使用 I18n(国际化)

注释 3

Prawn 有非常好的文档,只需从 github 上 git clone prawn 并检查 ./manuals

关于ruby-on-rails - 任何用于生成 pdf 的字体可以处理中文、西里尔文...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11081212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com