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