问题描述
在带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,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 text.include?('>') && text.include?('</')
styled_text text,leading: 9
else
text text,leading: 9
end
与ArgumentError (wrong number of arguments (given 2,expected 1)):
对应的行出现错误styled_text text,leading: 9
。那是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
宝石)。
此外,styled_text
方法仅接受单个参数,因此您不能像使用size: 7,leading: 9
那样提供其他选项。
如果要更改字体大小和行距,则必须自己修改HTML片段。我想如果您这样做而不是整个if
子句,它应该会起作用:
styled_text("<div style='font-size: 7; line-height: 9'>#{text}</div>")