Изменение стиля счетчика работающих элементов CSS после нескольких страниц
Я создаю PDF-документ, используя FlyingSaucer с номерами страниц в рабочем заголовке. Я пытаюсь добиться того, чтобы изменить стиль счетчика, примененного к элементу запуска, используемому для заголовка.
Так как CSS применяется FlyingSaucer, я не могу использовать JavaScript.
Пример HTML:
<body>
<div id="right-header"/>
<div id="title-page"></div> <!-- page i -->
<div id="toc-page"></div> <!-- page ii -->
<div id="content"> <!-- counter reseted -->
<div id="chapter1">
<!-- page i ( should display 1 instead of i )-->
<!-- page ii ( should display 2 )-->
</div>
<div id="chapter1">
<!-- page iii ( should display 3 )-->
<!-- page iv ( should display 4 )-->
</div>
</div>
</body>
CSS:
#right-header {
display: block;
text-align: right;
position: running(right-header);
}
#right-header:after {
content: counter(page, lower-roman)
}
@page:right {
@top-right {
content: element(right-header);
}
}
Этот кусок CSS правильно применяет заголовки ко всему документу после
<div class="right-header"></div>
размещен.
Я пытаюсь начать свой документ с вышеуказанным стилем страницы (нижнеримский) и после определенного места в моем документе - скажем, я хотел бы либо изменить содержимое заголовка справа, либо заменить содержимое @page другим рабочим элементом для остальной части документ со стилем, установленным на десятичные числа.
Я знаю, что FlyingSaucer имеет ограниченную поддержку CSS3, но я не могу найти никакого решения (не ограничиваясь только FlyingSaucer) для такой проблемы.
Содержимое текущего заголовка может быть изменено без влияния на предыдущие заголовки, так как FlyingSaucer позволяет сбросить счетчик в любой точке документа, используя правило css.
-fs-page-sequence: start;
и изменения видны только после этого момента.
Таким образом, мой текущий статус таков, что у меня есть страницы, пронумерованные нижним римским i-iv (для титульного листа, оглавления и т. Д.), А затем я возвращаюсь к i и увеличиваю до конца документа. Все, что мне нужно сделать, это изменить
#right-header:after {
content: counter(page, lower-roman)
}
в
.right-header:after {
content: counter(page)
}
или переключите отображаемый бегущий элемент на новый.
Другое решение, которое я пробовал, добавляет еще одну возможность решить эту проблему:
<div id="right-header">
<div id="before"/>
<div id="forcontent"/>
</div>
#forcontent {
display: none <!-- initially not displayed for a few first pages -->
}
#before:after {
content: counter(page, lower-roman)
}
#forcontent:after {
content: counter(page)
}
с этим кодом я думаю, что решение было бы включить #forcontent и отключить #before в начале #content. Я пытался работать с ~ селектором, но он не работает для изменения предыдущих элементов.
Кто-нибудь знает, как это может быть достигнуто или может указать мне на различные решения, которые я мог бы попробовать?
1 ответ
Работая над чем-то другим, я обнаружил, что FlyingSaucer поддерживает именованные страницы css3 ( https://www.w3.org/TR/css3-page/), которые позволяют элементам иметь другое определение @page с другим набором элементов. как бегущие колонтитулы.
Ниже приведен краткий пример того, как с помощью этого метода можно добиться разных стилей для "вводных" страниц.
HTML:
<html>
...
<div id="introduction-right-header-placeholder">...</div>
<div id="content-right-header-placeholder">...</div>
<div class="introduction">
<!-- these pages will have roman letters as page numbers -->
...
</div>
<div class="content">
<!-- these pages will have decimal page numbers -->
...
</div>
...
</html>
CSS:
#introduction-right-header-placeholder {
text-align: right;
position: running(introduction-right-header);
}
#introduction-right-header-placeholder:after {
content: counter(page, lower-roman)
}
#content-right-header-placeholder {
text-align: right;
position: running(content-right-header);
}
#content-right-header-placeholder:after {
content: counter(page);
}
.introduction {
page: introduction-page;
}
.content{
page: content-page;
}
@page introduction:right {
@top-right {
content: element(introduction-right-header);
}
}
@page content:right {
@top-right {
content: element(content-right-header);
}
}
В этом примере показано, как добавить номера страниц с разным стилем в FlyingSaucer для правых страниц (я удалил левую сторону, чтобы уменьшить объем кода).