Je suis novice dans l'utilisation d'iText et je n'arrive pas à comprendre le fonctionnement de la classe XMLWorkerHelper. J'essaye de créer une méthode qui prend une chaîne contenant un document html, convertit le html en document pdf, et renvoie le pdf comme tableau d'octets. Si quelqu'un peut signaler l'erreur dans le code suivant, je l'apprécierais vraiment.Utilisation de XMLWorkerHelper avec IText
Document document = new Document();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter pdfWriter = PdfWriter.getInstance(document, baos);
document.open();
StringReader stringReader = new StringReader(articleString);
StringWriter stringWriter = new StringWriter();<br/>
Tidy tidy = new Tidy();
tidy.setXHTML(true);
tidy.parse(stringReader, stringWriter);
System.out.println("Before XMLWorkerHelper");
XMLWorkerHelper xwh = XMLWorkerHelper.getInstance();
xwh.parseXHtml(pdfWriter, document, new StringReader(stringWriter.toString()));
System.out.println("After XMLWorkerHelper");
document.close();
stringReader.close();
result = baos.toByteArray();
Le code que j'utilise est ci-dessus. Le code html est dans la variable, articleString. La partie importante est entre les deux instructions System.out.println. Cela fait partie d'une application Web et System.out écrit dans le journal du serveur avec tous les messages d'erreur ou d'exception, mais ce qui se passe, c'est que l'application semble se terminer sans aucune exception entre les deux instructions println. Ainsi, la ligne "Before XMLWorkerHelper" s'imprime, mais pas la ligne "After XMLWorkerHelper".
Les fichiers jar que je utilise sont itextpdf-5.4.0.jar, itext-pdfa-5.4.0.jar, itext-xtra-5.4.0.jar, xmlworker-5.4.0.jar
le fichier html que je suis en train de convertir est simplement « Tester l'article » et il est converti par JTidy à
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
</head>
<body>
Tester Article
</body>
</html>
J'ai essayé d'utiliser l'ancienne classe HTMLWorker d'un pot iText 5.0 à la place du code XMLWorkerHelper et Tout a bien fonctionné. Le code HTMLWorker je en place des lignes de XMLWorkerHelper ci-dessus étaient:
HTMLWorker htmlWorker = new HTMLWorker(document);
htmlWorker.parse(new StringReader(stringWriter.toString()));