我在生成报告的Rails应用程序中使用 gem wiked_pdf 。
但是,当我有超过1页时,我无法解决数据中断问题。
我尝试了很多时间来调整边距或间距,但仍然无法修复它。
respond_to do |format|
format.html
format.pdf do
render title: @report_title,
pdf: @report_title,
template: 'applicants/generate_report.pdf.erb',
encoding: 'UTF-8',
orientation: 'Landscape',
layout: 'pdf_template.html',
footer: {
center: '[page] of [topage]',
right: "",
font_name: 'Arial',
font_size: 8
},
margin: {
top: 10, # default 10 (mm)
bottom: 12,
left: 7,
right: 7
},
spacing: 0
end
end
我还尝试应用 CSS ,例如:
@media print {
td, tr {page-break-inside: avoid; }
table.full_report_table>tbody>tr>td {page-break-inside: avoid !important; }
}
没有任何作用!
请帮忙!
答案 0 :(得分:3)
<强>解决强>
是,
page-break-inside:avoid;
它在 div 标记中正常工作。
但我花了一段时间进行粗略研究,找出如何使其与长桌一起使用。
添加一些 CSS 样式可以帮助我。
与文档W3 page-break一样,它将与块元素一起使用。
我所做的是将显示样式与其一起添加。
<tr style="page-break-inside: avoid; display: inline-table;">
inline-table 或 inline-block 适用于我的情况。
我希望这会帮助遇到与我相同的错误的其他人。
答案 1 :(得分:0)
您需要创建一个类并在其下面应用CSS:
div.alwaysbreak { page-break-before: always; }
例如,在我的情况下:
<div class="alwaysbreak">
// My PDF Template
</div>
希望这会有所帮助..!
答案 2 :(得分:0)
我过去通过使用css div
将每个表格行包裹在page-break-inside: avoid;
中来解决此问题。
我知道它在语义上并不正确,但它确实有用。
这应该确保它在不中断行中间的表内容的情况下转换页面:
<style>
.nobreak:before {
clear: both;
}
.nobreak {
page-break-inside: avoid;
}
</style>
<table>
<div class="nobreak">
<tr>
<td>First row</td>
</tr>
</div>
<div class="nobreak">
<tr>
<td>Second row</td>
</tr>
</div>
</table>
答案 3 :(得分:0)
简单地在你的 html 代码的最后放一个 div。喜欢
<% @questions.each do |question| %>
<% if question.id == @questions.last.id %>
<div></div>
<% end %>
<% end %>
在你的 html.put 中添加一个分区后,在你的 css 中添加以下行:
div.alwaysbreak { page-break-before: always; }
div.nobreak:before { clear:both; }
div.nobreak{ page-break-inside: avoid; }
它对我有用