2010-10-11 23 views
5

Je convertis des fichiers HTML au format PDF en utilisant The Flying Saucer Project. Ce sont des documents contenant des informations répétitives - locaux et leurs adresses, appelons-les éléments. À la fin d'un document, j'ai besoin de créer un index. Chaque entrée d'index doit avoir un numéro de page se référant à la page où l'élément a été ajouté. Le nombre d'éléments pouvant tenir sur une page varie.Comment créer une table des matières ou un index à l'aide du projet Flying Saucer?

Comment puis-je créer un index de document? Ou comment puis-je être averti pendant que la bibliothèque ajoute un certain type d'élément HTML au document PDF?

Répondre

1

J'ai trouvé une réponse possible. Vous devez commencer à jouer avec la classe org.xhtmlrenderer.render.BlockBox. Une méthode public void layout(LayoutContext c, int contentStart) est utilisée pour placer correctement tout élément HTML dans le document PDF. Cette méthode itère à travers un élément plusieurs fois. Après la dernière itération, un numéro de page valide est défini.

Si vous marquez un élément que vous souhaitez indexer, par exemple en utilisant un attribut de classe, alors vous pouvez obtenir un numéro de page en utilisant le code suivant:

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

Essayez ceci:

En CSS

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

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