У меня есть переменное количество таблиц с переменным количеством строк, и я хочу иметь их отображающийся один за другим, но если таблица не соответствует на текущей странице, помещает его на следующее, затем продвигаются. Я поместил таблицу в транзакцию, таким образом, я могу прокрутиться, тогда печатают его, если высота будет соответствовать на текущей странице, но как я получаю высоту таблицы?
У меня есть этот код в данный момент
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
Я начинающий креветки, так что это может быть не лучшим решением, но он должен работать.
Вы можете получить высоту таблицы, если рассмотреть размер шрифта и вертикальной прокладки и количество записей, которые у вас есть в @data
, и вы можете получить текущую позицию курсора по телефону Crawn :: Document.Cursor
метод.
Наличие этих двух чисел, вы сможете проверить, подходит ли таблица на этой странице или нет. Если нет, просто начните новый (призывая креветки :: document.start_new_page
метод).
В противном случае таблица будет автоматически сломаться и будет продолжаться на следующей странице.
Спасибо 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'
setrlimit
. обратную трассировку
и связанные системные вызовы. Затем необходимо преобразовать адреса функций в имена функций путем выполнения addr2line
(или дублирования его функциональных возможностей). -g
, вы по-прежнему можете получить обратную трассировку (за исключением того, что встроенные функции не появятся). Вы не можете сделать это с помощью системной консоли, так как на данный момент это невозможно сделать с помощью мультиплатформенного пути.
Можно использовать подменное окно в качестве консоли или найти подход на основе 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 надеюсь, это сработает для вас, как для меня: -)