【问题标题】:How to create TOC or index using the Flying Saucer project?如何使用飞碟项目创建 TOC 或索引?
【发布时间】:2010-10-11 10:10:30
【问题描述】:

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

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

【问题讨论】:

    标签: java flying-saucer xhtmlrenderer


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • CSS 缺少参数。使用:ol.toc a::after { content: leader('.') target-counter(attr(href url), page, decimal);} 更多信息请参见Link
    • 显然 pageCount 没有出现。它只是生成一个带有可点击链接的列表以导航到相应的内容。
    • 它只在使用attr(href) 而不是attr(href url) 而没有leader('.') 时有效,但是您会在链接名称之后获得页码。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-28
      • 2017-11-10
      • 2013-05-14
      • 1970-01-01
      • 2013-07-30
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      相关资源
      最近更新 更多