2010-09-07 21 views
1

J'essaie d'imprimer du texte en utilisant ma soucoupe volante (https://xhtmlrenderer.dev.java.net). Le document est généré à l'aide de DOM-API, mais lorsque l'impression commence, il y a une exception 'contenu non autorisé dans prolog'. Quelle est la raison de cette exception?contenu interdit dans le prologue du document créé par DOM lors de l'impression à l'aide d'une soucoupe volante

Mon code est le suivant:

DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); 
DocumentBuilder documentBuilder; 
documentBuilder = documentBuilderFactory.newDocumentBuilder(); 
Document document = documentBuilder.newDocument(); 
Element html = document.createElement("html"); 
document.appendChild(html); 
Element body = document.createElement("body"); 
html.appendChild(body); 
for (String paragraph : paragraphs) { 
    Element paragraphTag = document.createElement("p"); 
    paragraphTag.setTextContent(paragraph); 
    body.appendChild(paragraphTag); 
} 
XHTMLPanel panel = new XHTMLPanel(); 
panel.setDocument(document); 

print(new XHTMLPrintable(panel)); 

La méthode d'impression prend imprimable et met en PrintJob.

+1

Je n'ai pas vraiment de réponse, car cela ne semble pas être le cas, mais le "contenu non autorisé en prologue" est généralement causé par un espace qui est inséré avant le balisage. Je ne vois pas pourquoi cela se produirait ici, puisque vous travaillez avec un DOM. – erickson

+0

Cela peut également être dû à l'apparition d'une marque d'ordre d'octets et à un problème comme la méthode d'impression qui ne le gère pas. Essayez de définir les options d'encodage. – xcut

+0

@xcut Comment dois-je définir les options de nomenclature ou d'encodage? Le document n'est jamais sérialisé dans une chaîne ou un fichier par mon code. Les options d'encodage ont-elles vraiment de l'importance? – Wienczny

Répondre

0

Le XHTMLPrintable ne fonctionne pas avec les documents qui existent uniquement dans la RAM. Le XHTMLPrintable essaie de générer une URL en utilisant le document donné. Cet 'URL' est ensuite utilisé un document pour le Graphics2DRenderer - échouer. J'ai alors écrit mon propre XHTMLPrintable qui prend un document au lieu d'un XHTMLPanel.