2010-07-07 4 views
1

J'essaie de générer un document docx en utilisant poi-ooxml. Le code suivant produit presque le document que je veux, mais pour une raison quelconque, il supprime les espaces de fin et de début du texte.Génération DOCX: POI OOXML supprime les espaces de la chaîne

XWPFDocument document = new XWPFDocument(); 

XWPFParagraph paragraph1 = document.createParagraph(); 
XWPFRun para1run1 = paragraph1.createRun(); 
para1run1.setText("Dette er ein tekst med space på slutten. Den har ein "); 

XWPFRun para1run2 = paragraph1.createRun(); 
para1run2.setText("utheva tekst"); 
para1run2.setBold(true); 

XWPFRun para1run3 = paragraph1.createRun(); 
para1run3.setText(" før ein tekst med space i byrjinga. Denne paragrafen skal også ha litt tekst slik at den blir ganske lang og går over fleire linjer."); 

XWPFParagraph paragraph2 = document.createParagraph(); 
XWPFRun para2run1 = paragraph2.createRun(); 
para2run1.setText("Dette er ein tekst med space på slutten. Den har ein "); 

XWPFRun para2run2 = paragraph2.createRun(); 
para2run2.setText("kursiv tekst"); 
para2run2.setItalic(true); 

XWPFRun para2run3 = paragraph2.createRun(); 
para2run3.setText(" før ein tekst med space i byrjinga. Denne paragrafen skal også ha litt tekst slik at den blir ganske lang og går over fleire linjer."); 

document.write(new FileOutputStream("c:/tmp/doc/docxtest.docx")); 

Le code génère le document, mais les espaces avant et après les textes "utheva tekst" et "kursiv tekst" sont supprimés, et le résultat final ressemble à ceci:


Dette er l'espace médiatique et le slutten. Den har einutheva tekstfør ein tekst espace med i byrjinga. Denne fait partie de l'équipe de slik à den blir ganske lang og går sur linjer fleire.

Désactivez-vous dans l'espace médiatique. Den har einkursiv tekstfør ein tekstf ein tekst med espace i byrjinga. Denne fait partie de l'équipe de slik à den blir ganske lang og går sur linjer fleire. Où "utheva tekst" est en gras et "kursiv tekst" est en italique.

Toute aide à ce sujet sera très utile.

Répondre

2

Que vous utilisiez poi ou docx4j, je vous attendre besoin @xml: espace-à-dire

<w:t xml:space="preserve"> 

En docx4j, il y a une méthode setspace (valeur String) pour régler cela.

2

Je sais que c'est une question vraiment ancienne, mais j'ai juste eu un problème similaire et j'ai réussi à le comprendre en utilisant l'indice donné par JasonPlutext.

Au lieu de mettre le texte sur la course directement, vous devez utiliser:

XWPFRun firstBit = para.createRun(); 
CTText firstBitText = linkPrefix.getCTR().addNewT(); 
linkPrefixText.setStringValue("This is the first half of text with trailing space "); 
linkPrefixText.setSpace(SpaceAttribute.Space.PRESERVE); 

para.createRun().setText("and here is more text that doesn't need space preserved"); 

qui vous donnera

C'est la première moitié du texte avec l'espace de fuite et est ici plus de texte qui n'a pas besoin d'espace préservé

plutôt que

C'est la première moitié du texte avec queue spaceand ici est plus de texte qui n'a pas besoin d'espace préservé

Vous devriez toujours être en mesure de définir la mise en forme sur la piste directement.

Questions connexes