Как разбить страницу с помощью CSS в PDF

#html #css #ruby-on-rails

#HTML #css #ruby-on-rails

Вопрос:

Как я могу избежать обрезки стикеров qrcodes посередине? Я создаю PDF с помощью awesome gem wicked pdf Я пытался добавить page-break-after, но я не понимаю, как это работает…. Буду признателен за помощь

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

Вот стиль для pdf, он находится в vendor /assets /pdf.scss

 .sticker {
    border: 1px dashed #111;
    padding: 10px;
    height: 260px;
    width: 170px;
}

table.qrcode {
  border-width: 0;
  border-style: none;
  border-color: #0000ff;
  border-collapse: collapse;
  margin-top: 12px;
  margin-bottom: 10px;

  td {
    border-width: 0;
    border-style: none;
    border-color: #0000ff;
    border-collapse: collapse;
    padding: 0;
    margin: 0;
    width: 4px;
    height: 4px;

    amp;.black {
      background-color: #000 !important
    }

    amp;.white {
      background-color: #fff !important
    }
  }
}
  

И вот мое приложение / views / stickers /show.pdf.erb

 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" />

<div class="content">
    <div id="stickers">
        <div class="row">
        <% @sticker.quantity.times do  %>
            <div class="col-xs-3">
                <div class="sticker">
                    <div class="row">
                        <div class="col-xs-12">
                            <%= render_qr_code_small("https://super-shop.herokuapp.com/admin/products/#{@sticker.product}") %>  
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-xs-12">
                            <ul class="list list-unstyled">
                                <li><strong><%= number_to_currency_euro @sticker.product.price %></strong></li>
                                <li><%= @sticker.product.title %> - <%= @sticker.product.color %></li>
                                <li><%= @sticker.product.brand %></li>
                            </ul>
                        </div>
                    </div>
                </div>
            </div>
        <% end %>
    </div>  
    </div>
</div>
  

Ответ №1:

Для избежания разрывов есть css:

 .nobreak {
  page-break-inside: avoid !important;
}
  

и добавьте nobreak в divs, которые вы не хотите разделять