使用Flying Saucer,如何在页脚的每个页面上生成包含页码和页面总数的pdf?

问题描述 投票:24回答:4

我花了更多的研究比我自己想要的更多,所以我将在这里发布一个全面的答案。似乎这样做的信息分散在许多不同的网站上,我想把它放在一个地方。 This answer可能是同一个东西,但我的眼睛茫然,因为它在Java字符串而不是在html模板中。这是问题:

我正在渲染PDF,我想在页面底部写一个页脚,上面写着“Page n of m”,其中“n”是您所在的页码,“m”是文档中的总页数。我怎么做?

java css pdf flying-saucer xhtmlrenderer
4个回答
32
投票

在你的html中,你需要把它放在body标签的某个地方:

<div id="footer">
    page <span id="pagenumber"></span> of <span id="pagecount"></span>
</div>

这应该是你的CSS /风格:

    #footer {
        position: running(footer);
        text-align: right;
    }

    @page {
        @bottom-right {
            content: element(footer);
        }
    }

    #pagenumber:before {
        content: counter(page);
    }

    #pagecount:before {
        content: counter(pages);
    }

你可以了解更多关于@bottom-right选项here的信息。


22
投票

您还可以尝试稍微简洁的方法:

@page {
  @bottom-right {
    content: "Page " counter(page) " of " counter(pages);
  }
}

您需要将其放在css / style中,并且不需要添加额外的页脚HTML元素。


2
投票

@John Mark的解决方案对我有用。在我的应用程序中,我需要在HTML中嵌入样式信息,所以我将它包装在<style>标签中并将其放在<head>之前的<title>中。也许这些信息对其他人有用。


1
投票

重要错误和解决方案!

对于Starters,使用下面的John Mark的解决方案是使其正常工作的正确方法:

@page {
  @bottom-right {
    content: "Page " counter(page) " of " counter(pages);
  }
}

但是,许多人可能遇到了以下问题:PDF已停止生成!

这可以通过更新你的飞行SAUCER版本来解决。

由于@page和@右下角的css代码,当我的PDF停止生成时,我正在运行9.1.4。

这是飞碟中的一个小故障,已在9.1.5版本中修复!

确保更新到9.1.5并使用John Mark的答案。

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