Prawn::Errors::CannotFit: Table 的宽度设置得太小,无法容纳其内容

Prawn::Errors::CannotFit: Table's width was set too small to contain its contents

我正在尝试使用以下代码在 Prawn 中创建一个 table,但是列宽不适合我现在的列宽。鉴于我还有一些空闲的 space,我想稍微扩展第二列和最后一列,因此我将它们分别增加到 55.mm20.mm,但我收到了一个错误

Prawn::Errors::CannotFit: Table's width was set too small to contain its contents (min width 450.70866141732284, requested 442)

为什么扩展列宽会引发 Tabe too small 错误?

我计算了列的总宽度:

9.mm + 45.mm + 20.mm + 20.mm + 20.mm + 30.mm + 15.mm + 20.mm #=> 507.40157480314963

我不明白。我做错了什么?

bounding_box [0, 792], width: 612, height: 792 do
  bounding_box [30, 792], width: 442, height: 792 do
    line_items_table
  end
end

def line_items_table
  table line_item_rows, table_options do
    row(0).background_color = TABLE_BACKGROUND_COLOR
    columns(2..-1).align = :right
  end
end

def table_options
  {
    cell_style: { border_width: 0 },
    column_widths: TABLE_COLUMN_WIDTHS,
    header: true,
    # width: 160.mm
  }
end

def line_item_rows
  [TABLE_HEADERS]
end

TABLE_COLUMN_WIDTHS = { 0 => 9.mm, 1 => 45.mm, 2 => 20.mm, 3 => 20.mm, 4 => 30.mm, 5 => 15.mm, 6 => 15.mm }.freeze

TABLE_HEADERS  = [I18n.t('pdf.headers.row_num'), I18n.t('pdf.headers.name'),
                       I18n.t('pdf.headers.quantity'), I18n.t('pdf.headers.price_net_amount'), I18n.t('pdf.headers.net_amount'),
                       I18n.t('pdf.headers.vat'), I18n.t('pdf.headers.gross_amount')].freeze
#Table headers above are: 'No', 'Name', 'Qauntity', 'Net Sale', 'Net amount', 'Gross amount', 'VAT'

Table 的宽度设置得太小,无法容纳其内容(最小宽度 450.7,要求 442) 这意味着您的总列宽必须低于 442,而您的总列宽目前为 450.7, 你应该把它改成低于 442

您有设置 442 的线路代码

bounding_box [30, 792], width: 442, height: 792 do

如果你想设置大那么我的建议你应该先改变它