Prawn :: Errors :: CannotFit: ширина таблицы была слишком мала, чтобы вместить ее содержимое - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь создать таблицу в Prawn, используя следующий код, однако ширина столбцов не подходит для меня с шириной столбцов, которую я имею сейчас. Учитывая, что у меня все еще есть свободное пространство, я хочу немного расширить второй и последний столбцы, поэтому я увеличил их до 55.mm и 20.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'

1 Ответ

0 голосов
/ 03 января 2019

Ширина таблицы была слишком мала, чтобы вместить ее содержимое (минимальная ширина 450,7, запрошенное 442), что означает, что общая ширина столбца должна быть ниже 442, а общая сумма в настоящее время составляет 450,7, вам следует изменить ее на значение ниже 442

у вас есть код линии, который устанавливает 442

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

, если вы хотите установить больше, чем мое предложение, вы должны сначала изменить его

...