Принудительное разбиение <div /> на несколько страниц при печати - PullRequest
0 голосов
/ 05 сентября 2018

Я пишу приложение JSP, которое специализируется на создании стандартной документации EDI. Сейчас у меня проблемы с форматированием вывода.

Следующий фрагмент JSP создаст проблемный PDF:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    <title></title>
    <style>
    @page {
        size: 7in 9.25in;
        margin: 0.25in 0.25in 0.25in 0.25in;
    }

    p:first-child {
        margin-top: 0;
    }

    .main-container {
        display: block;
        margin: 0 auto;
    }

    .main-container .row .left {
        display: inline-block;
        width: 29%;
        text-align: right;
        vertical-align: top;
        padding: 0.1em 0.2em;
        font-weight: bold;
    }

    .main-container .row .right {
        display: inline-block;
        width: 69%;
        text-align: left;
        vertical-align: top;
        padding: 0.1em 0.2em;
    }
    </style>
</head>
<body>
    <div class="main-container">
        <div class="row">
            <div class="left">
                Label1:
            </div><div class="right">
                <% for(int i = 0; i < 10; i++) { %>
                    <p>First 10 lines will fit on the first page.</p>
                <% } %>
            </div>
        </div>
        <div class="row">
            <div class="left">
                Label2:
            </div><div class="right">
                <% for(int i = 0; i < 24; i++) { %>
                    <p><%= i %>Test line goes here. Let's make a 1000.</p>
                <% } %>
            </div>
        </div>
    </div>
</body>
</html>

Проблема в том, что когда я открываю JSP в Chrome и нажимаю кнопку Печать, в окне предварительного просмотра отображается первая <div class="row"> на первой странице со списком из 10 строк, а вторая <div class="row"> появляется на следующей странице, где она может поместиться в целом.

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

До сих пор я пробовал различные свойства CSS, а именно: для разрыва страницы до / после / внутри задано несколько комбинаций auto/avoid/always/etc. Эти решения не сработали, к сожалению. Я попытался выполнить рендеринг с помощью flyingsaucer, но там тоже не нашел решения. Я действительно не хочу прибегать к расчету расстояния вручную, поскольку это далеко выходит за рамки того, что должно было быть быстрым и грязным инструментом.

Я пытался найти решение этой проблемы, но, поскольку наиболее распространенный случай - делать именно то, чего я хочу, трудно найти ответ (если он есть). Возможно, один из вас знает надежный способ достижения этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...