飞碟 PDF 使用:首先使用命名页面

问题描述 投票:0回答:1

目前在 java 中,我正在生成具有适用 CSS 样式的 HTML 文档。

我已经验证我的文档是正确的,但是当我将它与命名页面结合使用时,

:first
伪选择器似乎不起作用。举个例子:

@page mainReport:first {
    @top-center {
        content: element(header);
        vertical-align: bottom;
    };

    @bottom-center {
        content: element(footer);
        vertical-align: top;
    };
}

我这样做的原因是我想使用特定命名页面上的第一页,CSS选择器是否支持分页媒体的此功能?如果没有,是否可以通过飞碟或某种 CSS 魔法来解决这个问题。

谢谢

css flying-saucer css-paged-media
1个回答
0
投票

像往常一样,我迟到了,但我自己现在正在努力使用 Flying Saucer 的确切功能(版本 9.1.22),所以我想我应该分享我在自己的探索中学到的东西。

首先,命名页面实际上是页面的特定类型,而不是特定页面。您可以拥有多个“特殊”类型页面,并多次使用每种类型。

其次,所有页面,无论其类型如何,都共享相同的页码和

page
计数器。因此,文档中实际上只有一页(即第一页)与
:first
伪类匹配。

因此,如果文档的第一页恰好是特殊类型(例如,

mainReport:first
),则会相应地设计样式。如果第一页不是任何特殊类型,它将接收
:first
页面的默认样式(或
:right
页面,如果没有
:first
的特殊样式)。

我在飞碟中注意到一件事,这让我有点头疼(而且我觉得这有点违反直觉)。而对于常规页面(即非“命名”页面),指定

:left
:right
样式就足够了(假设左页和右页页面的样式不同),我还必须在以下情况下定义
:first
样式:另外使用命名页面类型。 例如,要使用罗马数字对目录进行编号,我最终得到了这样的结果:

@page :left
{
  margin-left: 0.6in;
  margin-right: 0.9in;
  @left-bottom {content: counter(page);}
}
@page :right
{
  margin-left: 0.9in;
  margin-right: 0.6in;
  @right-bottom {content: counter(page);}
}
@page toc:first
{
  margin-left: 0.9in;
  margin-right: 0.6in;
  @right-bottom {content: counter(page, lower-roman);}
}
@page toc:right
{
  margin-left: 0.9in;
  margin-right: 0.6in;
  @right-bottom {content: counter(page, lower-roman);}
}
@page toc:left
{
  margin-left: 0.6in;
  margin-right: 0.9in;
  @left-bottom {content: counter(page, lower-roman);}
}

如果我省略

@page toc:first
部分,飞碟将在目录的第一页上应用常规页码(但目录的后续页面将正确地具有罗马数字页码)。

© www.soinside.com 2019 - 2024. All rights reserved.