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
Любая помощь в этом была бы отличной. Или любой другой способ сделать это?
С наилучшими пожеланиями Рик
4 ответа
4 года спустя...:)
Как писал @mx, откат был отключен по соображениям безопасности, например "группа", и до сих пор не реализован. Итак, вот как я работаю со страницами разрыва для таблиц:
Большая и простая таблица (одна строка на данные)
Просто используйте опцию заголовка
pdf.table @data,
header: true, # You can use 'header: 2' if your header take two rows
font_size: 12,
border_style: :grid,
horizontal_padding: 10,
vertical_padding: 3,
border_width: 2,
position: :left,
row_colors: ["FFFFFF","DDDDDD"]
Столик или столик
- сделать стол
- проверьте, нужна ли вам страница разрыва
- рисовать стол
С вашим примером:
t = pdf.make_table @data,
font_size: 12,
border_style: :grid,
horizontal_padding: 10,
vertical_padding: 3,
border_width: 2,
position: :left,
row_colors: ["FFFFFF","DDDDDD"]
if cursor - t.height < 0
start_new_page
end
t.draw
надеюсь, это поможет
@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
Я надеюсь, что это работает для вас, как и для меня:-)
Я новичок в креветках, так что это может быть не лучшим решением, но оно должно работать.
Вы можете получить высоту таблицы, если учесть размер шрифта и вертикальное заполнение, а также количество записей в @data
и вы можете получить текущую позицию курсора, вызвав Prawn::Document.cursor
метод.
Имея эти два числа, вы сможете проверить, подходит ли таблица на этой странице или нет. Если нет, просто начните новый (позвонив по Prawn::Document.start_new_page
метод).
В противном случае таблица будет разбита автоматически и продолжится на следующей странице.
Спасибо Игорь
Я в настоящее время устанавливаю текущую страницу и затем в транзакции после того, как новая таблица была отрисована и перед откатом установил переменную new_page. Затем я могу откатиться назад и проверить, есть ли новая страница 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'