Создание верхних и нижних колонтитулов страниц с использованием CSS для печати
Я создаю PDF с помощью Flying Saucer (который выводит CSS/HTML в iText в PDF) и пытаюсь использовать CSS3, чтобы применить верхний и нижний колонтитулы к каждой странице.
Я хотел бы поместить этот div в верхнем левом углу каждой страницы:
<div id="pageHeader">
<img src="..." width="250" height="25"/>
</div>
Мой CSS выглядит примерно так:
@page {
size: 8.5in 11in;
margin: 0.5in;
@top-left {
content: "Hello";
}
}
Есть ли способ для меня, чтобы поместить этот div в content
?
2 ответа
Поместить элемент в верхней части каждой страницы:
@page {
@top-center {
content: element(pageHeader);
}
}
#pageHeader{
position: running(pageHeader);
}
См. http://www.w3.org/TR/css3-gcpm/ (работает в "Летающей тарелке").
Чтобы включить верхний и нижний колонтитулы на страницах (уточняющий отличный ответ от @Adam):
<style>
@page {
margin: 100px 25px;
size: letter portrait;
@top-left {
content: element(pageHeader);
}
@bottom-left {
content: element(pageFooter);
}
}
#pageHeader{
position: running(pageHeader);
}
#pageFooter{
position: running(pageFooter);
}
</style>
<body>
<header id="pageHeader">something from above</header>
<footer id="pageFooter">lurking below</footer>
<div>meaningful rambling...</div>
</body>
ПРИМЕЧАНИЕ. Чтобы нижний колонтитул повторялся на каждой странице, может потребоваться определить его ДО другого основного содержимого (для многостраничного содержимого).
Я потратил много времени, чтобы заставить это работать в современных Chrome, Firefox и Safari. Я использую это для создания PDF-файла из HTML. Вы получите фиксированный верхний и нижний колонтитулы на каждой странице без перекрытия содержимого страницы. Попробуй это:
CSS
<style>
@page {
margin: 10mm;
}
body {
font: 9pt sans-serif;
line-height: 1.3;
/* Avoid fixed header and footer to overlap page content */
margin-top: 100px;
margin-bottom: 50px;
}
#header {
position: fixed;
top: 0;
width: 100%;
height: 100px;
/* For testing */
background: yellow;
opacity: 0.5;
}
#footer {
position: fixed;
bottom: 0;
width: 100%;
height: 50px;
font-size: 6pt;
color: #777;
/* For testing */
background: red;
opacity: 0.5;
}
/* Print progressive page numbers */
.page-number:before {
/* counter-increment: page; */
content: "Page: " counter(page);
}
</style>
HTML
<body>
<header id="header">Header</header>
<footer id="footer">footer</footer>
<div id="content">
Here your long long content...
<p style="page-break-inside: avoid;">This text will not be broken between the pages</p>
</div>
</body>