отображающиеся таблицы prawnto, которые не повреждаются когда новая страница

У меня есть переменное количество таблиц с переменным количеством строк, и я хочу иметь их отображающийся один за другим, но если таблица не соответствует на текущей странице, помещает его на следующее, затем продвигаются. Я поместил таблицу в транзакцию, таким образом, я могу прокрутиться, тогда печатают его, если высота будет соответствовать на текущей странице, но как я получаю высоту таблицы?

У меня есть этот код в данный момент

pdf.transaction do 

pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]

pdf.move_down 20

#pdf.rollback 
end

Любая справка на этом была бы большой. Или какой-либо другой способ сделать это?

Наилучшие пожелания Rick

5
задан John Topley 17 January 2010 в 17:03
поделиться

3 ответа

Я начинающий креветки, так что это может быть не лучшим решением, но он должен работать.

Вы можете получить высоту таблицы, если рассмотреть размер шрифта и вертикальной прокладки и количество записей, которые у вас есть в @data , и вы можете получить текущую позицию курсора по телефону Crawn :: Document.Cursor метод.

Наличие этих двух чисел, вы сможете проверить, подходит ли таблица на этой странице или нет. Если нет, просто начните новый (призывая креветки :: document.start_new_page метод).

В противном случае таблица будет автоматически сломаться и будет продолжаться на следующей странице.

0
ответ дан 13 December 2019 в 19:27
поделиться

Спасибо IGOR

В настоящее время я устанавливаю текущую страницу, а затем в транзакцию после того, как новая таблица была отображена и перед настройкой возврата ROLL NEW_PAGE. Затем я могу откатить назад и chek, если новая страница var> текущая страница var и если она начнется новая страница и распечатать таблицу. Смотрите код ниже.

Проблема в настоящее время в PDF.Start_new_Page говорит, что ошибка, но если я просто возьму на себя выручку PDF.Rollback. См. Ошибка ниже.

Любые идеи любой или любым простым способам, должно быть один!

Спасибо Рик

@current_page = pdf.page_count

pdf.transaction do 
  pdf.move_down 20

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]

  @the_next_page = pdf.page_count
  pdf.rollback

end 

if @the_next_page > @current_page

  pdf.start_new_page

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]
end 

Ошибка

> You have a nil object when you didn't expect it!
The error occurred while evaluating nil.identifier

Extracted source (around line #158): 

155: end



RAILS_ROOT: C:/InstantRails/rails_apps/Macrotec-Application

Application Trace | Framework Trace | Full Trace 
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document.rb:302:in `go_to_page'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:128:in `finalize_all_page_contents'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:127:in `each'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document/internals.rb:127:in `finalize_all_page_contents'
c:/InstantRails/ruby/lib/ruby/gems/1.8/gems/prawn-core-0.7.1/lib/prawn/document.rb:344:in `render'
C:/InstantRails/rails_apps/Macrotec-Application/app/views/quotations/show.pdf.prawn:158:in `_run_prawn_app47views47quotations47show46pdf46prawn'
0
ответ дан 13 December 2019 в 19:27
поделиться
  • Что касается основного предела, вы можете сделать это самостоятельно в C, позвонив по setrlimit .
  • В системе GNU (glibc) или BSD можно получить обратную трассировку, вызвав обратную трассировку и связанные системные вызовы. Затем необходимо преобразовать адреса функций в имена функций путем выполнения addr2line (или дублирования его функциональных возможностей).
  • Только не используйте -g , вы по-прежнему можете получить обратную трассировку (за исключением того, что встроенные функции не появятся).
-121--2695348-

Вы не можете сделать это с помощью системной консоли, так как на данный момент это невозможно сделать с помощью мультиплатформенного пути.

Можно использовать подменное окно в качестве консоли или найти подход на основе JNI, но он может не работать на некоторых платформах.

Можно использовать JCurses . Он может работать, он основан на JNI и поддерживает Windows и Linux.

-121--4083044-

@ current _ page = pdf.page_count

@roll = pdf.transaction do 
  pdf.move_down 20

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]

  pdf.rollback if pdf.page_count > @current_page

end 

if @roll == false

  pdf.start_new_page

  pdf.table @data,
    :font_size  => 12, 
    :border_style => :grid,
    :horizontal_padding => 10,
    :vertical_padding   => 3,
    :border_width       => 2,
    :position           => :left,
    :row_colors => ["FFFFFF","DDDDDD"]
end

I надеюсь, это сработает для вас, как для меня: -)

5
ответ дан 13 December 2019 в 19:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: