大虾PDF更改字号和行高自html_text

Prawn PDF change font size and line height from html_text

在带有 Ruby 2.7 的 Rails 6 应用程序中,我使用 gem prawn 生成 pdf 文件。到目前为止,一切都相当简单。我在 html_text 中定义行高时遇到问题。就像下面的方法一样:

  def invoice_notes_section
    invoice_notes.each { |note| html_text(note) }
  end

  def invoice_notes
    @invoice_notes ||= begin
      notes = []
      notes << (invoice.display_service_period? ? invoice.service_period_text : I18n.t('pdf.no_service_period'))
      notes << invoice.discount_text if invoice.display_discount_text?
      notes << invoice.notes
      notes << I18n.t('pdf.small_entrepreneur_hint') if invoice.customer.company.small_entrepreneur?
      notes.compact
    end

我想将字体大小更改为 7pt,将行高更改为 9pt。怎么做,因为我不能简单地添加例如:

      notes << invoice.notes, size: 7, leading: 9

哪个给我 SyntaxError:

error, unexpected ',', expecting `end'
      notes << invoice.notes, size: 7, leading: 9
                            ^
):

在本节中,我将尝试实现如下所示的文本块:

编辑:

  def html_text(text)
    return if strip_tags(text).strip.empty?

    if text.include?('>') && text.include?('</')
      styled_text
    else
      text text
    end
  rescue Prawn::Errors::UnknownFont
    text text, size: BODY_FONT_SIZE
  end

如果我将 if 块行替换为:

if text.include?('>') && text.include?('</')
  styled_text text, size: 7, leading: 9
else
  text text, size: 7, leading: 9
end

styled_text text, size: 7, leading: 9 行出现错误 ArgumentError (wrong number of arguments (given 2, expected 1)):。那是什么styled_text?如果我将其更改为 text 我将得到:

Das Leistungsdatum entspricht dem Rechnungsdatum sofern nichts anderes erwähnt wird.
    
<p>Bitte überweisen Sie den Betrag bis zum oben angegebenen Fälligkeitsdatum auf das angegebene Bankkonto unter Angabe

der Rechnungsnummer</p>

而不是:

Das Leistungsdatum entspricht dem Rechnungsdatum sofern nichts anderes erwähnt wird.
    
Bitte überweisen Sie den Betrag bis zum oben angegebenen Fälligkeitsdatum auf das angegebene Bankkonto unter Angabe
der Rechnungsnummer

我认为您已经回答了关于 styled_text 是什么的问题(因为它来自 prawn-styled-text gem)。

此外,styled_text 方法只接受一个参数,因此您不能像 size: 7, leading: 9 那样提供额外的选项。

如果要更改字体大小和行距,则必须自己修改 HTML 片段。我想如果你做这样的事情而不是整个 if 子句,它应该会起作用:

styled_text("<div style='font-size: 7; line-height: 9'>#{text}</div>")