如何使用Flying Saucer项目创建TOC或索引?

Dan*_*iuk 5 java flying-saucer xhtmlrenderer

我使用The Flying Saucer Project将HTML文件转换为PDF格式.这是包含重复信息的文档 - 前提及其地址,我们称之为元素.在文档的最后我需要创建一个索引.每个索引条目都应该有一个页码,指向添加元素的页面.可以放在一个页面上的元素数量会有所不同.

如何创建文档索引?或者,当库将特定类型的HTML元素添加到PDF文档时,如何通知我?

小智 7

试试这个:

在CSS中

ol.toc a::after {  content: leader('.') target-counter(attr(href), page);}
Run Code Online (Sandbox Code Playgroud)

在HTML中

<h1>Table of Contents</h1>
<ol class='toc'>
<li><a href=\"#chapter1\">Loomings</a></li>
<li><a href=\"#chapter2\">The Carpet-Bag</a></li>
<li><a href=\"#chapter3\">The Spouter-Inn</a></li>
</ol>

<div id="chapter1">Loomings</div>
Run Code Online (Sandbox Code Playgroud)

  • CSS缺少参数。使用:`{内容:leader('。')target-counter(attr(href url),页面,十进制);}后的ol.toc a ::}`参见[Link](https://www.w3.org / TR / css-gcpm-3 /#target-counter)以获取更多信息。 (2认同)

Dan*_*iuk 1

我找到了可能的答案。你必须开始在org.xhtmlrenderer.render.BlockBox课堂上玩耍。一种方法public void layout(LayoutContext c, int contentStart)用于正确放置 PDF 文档中的任何 HTML 元素。此方法会迭代一个元素几次。最后一次迭代后,将设置有效的页码。

如果您标记要索引的元素(例如使用类属性),则可以使用以下代码获取页码:

String cssClass = getElement().getAttribute("class");
if(!cssClass.equals("index")) {
    int pageNumber = c.getRootLayer().getPages().size();
    /* ... */
}
Run Code Online (Sandbox Code Playgroud)