J'utilise xhtmlrenderer (également connu sous le nom Flying Saucer) avec iText pour convertir du HTML en PDF. Comment créer des signets avec ceci? Est-ce que quelqu'un avec un petit exemple?Marque-pages avec xhtmlrenderer (iText)
Merci d'avance.
J'utilise xhtmlrenderer (également connu sous le nom Flying Saucer) avec iText pour convertir du HTML en PDF. Comment créer des signets avec ceci? Est-ce que quelqu'un avec un petit exemple?Marque-pages avec xhtmlrenderer (iText)
Merci d'avance.
Il semble que des signets ont été ajoutés dans R6, mais le guide de l'utilisateur ne leur donne qu'une référence. avec un TODO à l'auteur pour ajouter un exemple plus tard.
Recherche dans les forums, j'ai trouvé this example:
<html>
<head>
<bookmarks>
<bookmark name="A bookmark" href="#bm" />
<bookmark name="A bookmark 2" href="#bm2" />
<bookmark name="A bookmark 3" href="#bm3" />
<bookmark name="A bookmark 4" href="#bm4" />
<bookmark name="A bookmark invalid" href="#bm99" />
</bookmarks>
</head>
<body>
<div style="line-height: 100%; font-size: 12pt; page-break-before: always;">
<a name="bm">some text</a>
</div>
<div style="line-height: 100%; font-size: 12pt; page-break-before: always;">
<a name="bm2">some text</a>
</div>
<div style="line-height: 100%; font-size: 12pt; page-break-before: always;">
<a name="bm3">some text</a>
</div>
<div style="line-height: 100%; font-size: 12pt; page-break-before: always;">
<p>some text</p> <p>some text</p> <p>some text</p> <p>some text</p> <p>some text</p> <p>some text</p>
<p><a name="bm4">and some more text</a></p>
</div>
</body>
</html>`
Il semble donc que l'ajout de signets est plus que de déclarer les signets dans le <head>
et les référencer comme points d'ancrage dans le <body>
.
Cela devrait fonctionner avec votre conversion XHTML-> PDF existante sans nécessiter de modifications de code.
Il est correct que l'approche ci-dessus fonctionne.
exemple échantillon de flyingsaucer-R8-src modifié pour BookMarks démonstration
public class PDFRenderToMultiplePages {
public static void main(String[] args) throws Exception {
OutputStream os = null;
try {
final String[] inputs = new String[] { newPageHtml(1, "red"),
newPageHtml(2, "blue"), newPageHtml(3, "green") };
final File outputFile = File.createTempFile("FlyingSacuer", ".pdf");
os = new FileOutputStream(outputFile);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocumentFromString(inputs[0]);
renderer.layout();
renderer.createPDF(os, false);
BlockBox rootBox = renderer.getRootBox();
for (int i = 1; i < inputs.length; i++) {
renderer.setDocumentFromString(inputs[i]);
renderer.layout();
renderer.writeNextDocument();
}
renderer.finishPDF();
System.out.println("Sample file with " + inputs.length
+ " documents rendered as PDF to " + outputFile);
} finally {
if (os != null) {
try {
os.close();
} catch (IOException e) { /* ignore */
}
}
}
}
private static String newPageHtml(int pageNo, String color) {
return "<html><head><bookmarks>"
+ "<bookmark name=\"bookmark"
+ pageNo
+ "\" href=\"#bookMark\"/></bookmarks></head>"
+ "<body><div style=\"color:"
+ color
+ ""
+ ";\"><a name=\"bookMark\">Book Mark Example</a></div></body></html>";
}
}
Salut, quelque chose ne va pas avec les marques thebook, l'exemple ci-dessus produit - bookmark1, bookmark1, bookmark2, bookmark1, bookmark2, bookmark3 - au lieu de seulement trois signets. Est-ce quelque chose à voir avec la boucle for? Merci. – usertest
Merci, mais je ne veux pas un en-tête ou le pied de page sur la première page et que vous souhaitez qu'il commence à compter de la deuxième page . Comment pourrais-je modifier votre exemple pour le faire? Merci. – usertest
Désolé, je ne comprends pas. Pouvez-vous me dire comment l'en-tête/pied de page est connecté avec les signets? – mdma
Salut, ignorer cette dernière question, je l'ai eu le travail merci. – usertest