Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何更改对虾的字体_Ruby On Rails_Pdf_Prawn - Fatal编程技术网

Ruby on rails 如何更改对虾的字体

Ruby on rails 如何更改对虾的字体,ruby-on-rails,pdf,prawn,Ruby On Rails,Pdf,Prawn,我想做的是使用Prawn生成一个PDF,同时使用一些特定于语言的字符 因此,我得到以下错误: raise Prawn::Errors::IncompatibleStringEncoding, "Your document includes text that's not compatible with the Windows-1252 character set.\n" \ "If you need full UTF-8 support, use TTF fonts instead

我想做的是使用Prawn生成一个PDF,同时使用一些特定于语言的字符

因此,我得到以下错误:

raise Prawn::Errors::IncompatibleStringEncoding,
   "Your document includes text that's not compatible with the  Windows-1252 character set.\n" \
   "If you need full UTF-8 support, use TTF fonts instead of PDF's built-in fonts\n."
因此,我尝试通过以下操作更改字体:

# app/models/prawn/change_font_decorator.rb

Prawn::Document.generate("output.pdf") do
  font_families.update("Arial" => {
    :normal => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
    :italic => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
    :bold => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
    :bold_italic => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf")
  })
  font "Arial"
end
然而,我在尝试生成PDF文件时也遇到了同样的错误

关于如何解决这个问题有什么想法吗?

这是一个很好的参考资料,包括关于字体使用的章节。“外部字体”部分与您的问题特别相关

虽然不支持粗体和斜体,但这里有一个基本情况应该可以使用:

Prawn::Document.generate("output.pdf") do
  font Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf")
  text "Euro €"
end
要同时使用粗体和斜体,最好注册一个与标准PDF字体不冲突的字体系列:

Prawn::Document.generate("output.pdf") do
  font_families.update("OpenSans" => {
    :normal => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
    :italic => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
    :bold => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf"),
    :bold_italic => Rails.root.join("app/assets/fonts/OpenSans-Regular.ttf")
  })
  font "OpenSans"
  text "Euro €"
end
我应该把上面的代码放在哪里? 如果您是从
Prawn::Document
继承的,可以尝试以下操作:

class SpreeInvoicePdf < Prawn::Document
  require 'prawn'

  def initialize(quote, line_items)
    self.font_families.update("OpenSans" => {
                                :normal => Rails.root.join("vendor/assets/fonts/Open_Sans/OpenSans-Regular.ttf"),
                                :italic => Rails.root.join("vendor/assets/fonts/Open_Sans/OpenSans-Italic.ttf"),
                                :bold => Rails.root.join("vendor/assets/fonts/Open_Sans/OpenSans-Bold.ttf"),
                                :bold_italic => Rails.root.join("vendor/assets/fonts/Open_Sans/OpenSans-BoldItalic.ttf")
    })

    font "OpenSans"

  # etc.
class SpreeInvoicePdf{
:normal=>Rails.root.join(“vendor/assets/font/Open\u Sans/OpenSans Regular.ttf”),
:italic=>Rails.root.join(“供应商/资产/字体/Open\u Sans/OpenSans italic.ttf”),
:bold=>Rails.root.join(“供应商/资产/字体/Open\u Sans/OpenSans bold.ttf”),
:bold_italic=>Rails.root.join(“供应商/assets/font/Open_Sans/OpenSans BoldItalic.ttf”)
})
字体“OpenSAN”
#等等。

当然,您需要转到Google fonts并下载字体,然后将其放在
供应商/assets/fonts/Open_Sans/
目录中。

如果您使用initialize构建PDF,只需使用initialize方法更新字体族,然后设置所需字体即可

class InvoicePdf < Prawn::Document

  def initialize()
    super()
    self.font_families.update("DejaVuSans" => {:normal => "#{Rails.root}/public/DejaVuSans.ttf"})
    font "DejaVuSans"
    business_logo
    invoice_items
    footer
  end

  def business_logo
    ##stuff here
  end

end
classinvoicepdf{:normal=>“{Rails.root}/public/DejaVuSans.ttf})
字体“DejaVuSans”
商业标志
发票和其他项目
页脚
结束
def商务标志
##这里的东西
结束
结束

我实际上进入了gems文件夹和Prawn/font.rb

我发现了以下功能:

def font_families
  @font_families ||= Hash.new { |h,k| h[k] = {} }.merge!(
    { "Courier"     => { :bold        => "Courier-Bold",
                         :italic      => "Courier-Oblique",
                         :bold_italic => "Courier-BoldOblique",
                         :normal      => "Courier" },

      "Times-Roman" => { :bold         => "Times-Bold",
                         :italic       => "Times-Italic",
                         :bold_italic  => "Times-BoldItalic",
                         :normal       => "Times-Roman" },

      "Helvetica"   => { :bold         => "Helvetica-Bold",
                         :italic       => "Helvetica-Oblique",
                         :bold_italic  => "Helvetica-BoldOblique",
                         :normal       => "Helvetica" }              
    })
end
我将其编辑为包含Arial:

def font_families
  @font_families ||= Hash.new { |h,k| h[k] = {} }.merge!(
    { "Courier"     => { :bold        => "Courier-Bold",
                         :italic      => "Courier-Oblique",
                         :bold_italic => "Courier-BoldOblique",
                         :normal      => "Courier" },

      "Times-Roman" => { :bold         => "Times-Bold",
                         :italic       => "Times-Italic",
                         :bold_italic  => "Times-BoldItalic",
                         :normal       => "Times-Roman" },

      "Helvetica"   => { :bold         => "Helvetica-Bold",
                         :italic       => "Helvetica-Oblique",
                         :bold_italic  => "Helvetica-BoldOblique",
                         :normal       => "Helvetica" },

            "Arial" => { :normal => "public/fonts/arial.ttf",
                          :italic => "public/fonts/ariali.ttf.ttf",
                          :bold => "public/fonts/arialbd.ttf",
                          :bold_italic => "public/fonts/arialbi.ttf"}              
    })
end

还有维奥拉!成功了

如何在table cell中实现这一点?你的回答完全解决了一个我已经绞尽脑汁两周的问题。特别是你的第二段。关键是将所有fontfaces映射到“常规”。在我的例子中,我将“:normal”映射为“regular”,将“:bold”映射为“bold”,等等,完全不知道我做错了什么。谢谢如何使用默认字体?我收到了相同的错误,但我没有设置任何字体
Prawn::Document.new(页面大小:'LETTER',边距:0)