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

发布于 2024-09-26 14:26:29 字数 248 浏览 1 评论 0原文

我使用飞碟项目将 HTML 文件转换为 PDF 格式。这些文档包含重复信息 - 场所及其地址,我们将其称为元素。在文档的末尾,我需要创建一个索引。每个索引条目应该有一个页码,引用添加元素的页面。一页上可以容纳的元素数量会有所不同。

如何创建文档索引?或者当库向 PDF 文档添加某种类型的 HTML 元素时我如何收到通知?

I convert HTML files to PDF format using The Flying Saucer Project. This are documents containing repetitive information - premises and their addresses, let's call them elements. At the end of a document I need to create an index. Each index entry should have a page number referring to the page where element was added. The number of elements that can fit on one page will vary.

How can I create a document index? Or how can I get notified while library adds certain type of HTML element to the PDF document?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

白云悠悠 2024-10-03 14:26:29

试试这个:

在 CSS 中

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

在 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>

Try this:

In CSS

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

In 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>
人事已非 2024-10-03 14:26:29

我找到了可能的答案。您必须开始使用 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();
    /* ... */
}

I found possible answer. You have to start playing with org.xhtmlrenderer.render.BlockBox class. A method public void layout(LayoutContext c, int contentStart) is used to place properly any HTML element in the PDF document. This method iterates through an element a few times. After the last iteration a valid page number is set.

If you mark an element you want to index, by for example using a class attribute, then you can get a page number using following code:

String cssClass = getElement().getAttribute("class");
if(!cssClass.equals("index")) {
    int pageNumber = c.getRootLayer().getPages().size();
    /* ... */
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文