Таблица рендеринга WicketPDF неправильно выровнена, а нижний колонтитул находится на последней странице

Я создаю отчет в формате pdf из html-страницы, я создал макет с верхним и нижним колонтитулом отдельно, мне нужен верхний колонтитул только для первой страницы и нижний колонтитул на последней странице, я пробовал некоторые сценарии для этого, но он не работает, и как избежать разрыва страницы внутри строки таблицы, и мне нужна граница для каждой страницы без разрыва строки таблицы, как показано на рисунке.

введите здесь описание изображения

respond_to do |format|
  format.html
  format.pdf {
     render :pdf => "Report",
            :template => 'layouts/pdf_layout.pdf.erb',
            :layout => 'pdf_layout.pdf.erb',
            :margin => {:bottom => 35},
            :page_size => 'A4',
            :header => {:content => render_to_string({:template => 'layouts/header.pdf.erb'})},
            :footer => {:content => render_to_string({:template => 'layouts/footer.pdf.erb'})}
  }
end

Любое другое предложение

заранее спасибо


person prabu    schedule 28.07.2014    source источник
comment
Можете ли вы опубликовать соответствующий code? а что не работает?   -  person Pavan    schedule 28.07.2014
comment
Пожалуйста, посмотрите пример кода рендеринга, который я добавил.   -  person prabu    schedule 28.07.2014


Ответы (1)


Проблемы с разрывом страницы обычно можно решить с помощью нескольких правил css, которые удачно размещены:

div.alwaysbreak { page-break-before: always; }
div.nobreak:before { clear:both; }
div.nobreak{ page-break-inside: avoid;
  /* http://code.google.com/p/wkhtmltopdf/issues/detail?id=9#c21 */
}

Итак, одна из интересных вещей заключается в том, что эти правила не работают с элементами таблицы, поэтому, если у вас есть таблица и вы хотите предотвратить разделение ячеек пополам, вы можете обернуть каждую строку таблицы символом <div>.

Это, конечно, не чисто и семантически, но вы можете сделать это так:

<table>
  <thead>
    <div class='nobreak'>
      <tr>
        <th>One</th><th>Two</th>
      </tr>
    </div>
  </thead>
  <tbody>
    <div class = 'nobreak'>
      <tr>
        <td>Uno</td><td>Dos</td>
      </tr>
    </div>
  </tbody>
</table>

Чтобы границы вашей страницы идеально выровнялись, вам, вероятно, придется установить фиксированную высоту с помощью CSS с .awaysbreak, а затем иметь некоторый javascript, который вычисляет высоту таблицы и разбивает ее на куски в зависимости от высоты.

Может быть, это просто потому, что ваша таблица до сих пор такая простая, но похоже, что это может быть хорошим кандидатом, чтобы попробовать использовать prawn< /а> с. У вас будет лучший контроль над этими типами макетов.

Для этого есть railscast здесь.

person Unixmonkey    schedule 30.07.2014