2013-02-21 3 views
1

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())); 

Répondre

0

J'espère que cela est résolu déjà. Si ce n'est pas le cas, essayez de supprimer le code
. Si cela ne fonctionne pas, essayez de mettre votre stringWriter.toString() dans un InputStream, puis utilisez le flux plutôt sur parseXHtml en place du stringWriter.toString()

InputStream

InputStream stream = new ByteArrayInputStream(stringWriter.toString().getBytes("UTF-8")); 

XMLWorkerHelper:

XMLWorkerHelper.getInstance().parseXHtml(pdfWriter, document, stream); 

Espérons que cela vous aide, vous ou quelqu'un qui a le même problème, à voir ceci