2017-07-28 3 views
0

Ich versuche Überschrift Titel in einem Wort (.docx) Dokument zu erstellen, mit Apache-Poi.Apache POI Word mit benutzerdefinierten Stilen für Titel

Ich habe eine Vorlage, die nur benutzerdefinierte Stile UND Beispiel für Überschrift Titel mit den benutzerdefinierten Stilen enthält.

XWPFDocument document=new XWPFDocument(new FileInputStream("template.docx")); 

Meine benutzerdefinierten Stil „CUSTOM_YNP“ genannt wird (ich es direkt in Word erstellt wurde), aber wenn ich die Linie unten verwenden, gibt es falsche

document.getStyles().styleExist("CUSTOM_YNP") 

Und natürlich, wenn ich versuche, diese Art zu verwenden, funktioniert es nicht, es tatsächlich meine Zeichenfolge in „normal“ drucken

XWPFParagraph paragraph=document.createParagraph(); 
paragraph.setStyle("CUSTOM_YNP"); 
XWPFRun run=paragraph.createRun(); 
run.setText("TEST"); 

Nur für das Protokoll, meine Linie „Dokument speichern“:

document.write(new FileOutputStream("myDoc.docx")); 

ich diese Frage gelesen haben, aber eine Lösung für mein Problem eigentlich nicht finden können ... How can I use predefined formats in DOCX with POI?

EDIT: Es funktioniert, wenn ich meinen eigenen Stil mit Apache-POI .... Noch erstelle ich Wir würden gerne vorhandene Stile aus dem Word-Dokument verwenden.

Antwort

2

A *.docx ist ein ZIP Archiv. Sie können es entpacken und in das /word/styles.xml schauen. Dort sehen Sie, dass die w:styleId="CUSTOMYNP" ohne den Unterstrich. Der Name lautet "CUSTOM_YNP" <w:name w:val="CUSTOM_YNP"/>. Also:

+0

Das ist es! Der Name des "realen" Stils kann sich von dem Namen des "angezeigten" Stils in Word unterscheiden. Außerdem habe ich bemerkt, dass ich meinen Stil nicht bereits in meiner Vorlage verwenden musste, was eine gute Sache ist. – IronRabbit

1

Achten Sie darauf, zuerst den Stil erstellen und fügen Sie ihn in Ihr Dokument:

XWPFDocument document = new XWPFDocument(); 
XWPFStyles styles = document.createStyles(); 

String heading1 = "My Heading 1"; 
addCustomHeadingStyle(document, styles, heading1, 1, 36, "4288BC"); 

XWPFParagraph paragraph = document.createParagraph(); 
paragraph.setStyle(heading1); 

Mit dem addCustomHeadingStyle Wesen:

private static void addCustomHeadingStyle(XWPFDocument docxDocument, XWPFStyles styles, String strStyleId, int headingLevel, int pointSize, String hexColor) { 

    CTStyle ctStyle = CTStyle.Factory.newInstance(); 
    ... 
    //create your style 
    ... 
    XWPFStyle style = new XWPFStyle(ctStyle); 

    style.setType(STStyleType.PARAGRAPH); 
    styles.addStyle(style); 
} 
+0

Danke, aber was ich will, ist eine vorhandene Stil verwenden, die bereits in meiner Vorlage.docx ... Ist es möglich? – IronRabbit

+0

Sind Sie absolut sicher, dass die docx-Datei den Style enthält? Enthält die docx-Datei einen beliebigen Text? _Es scheint, dass das Wort nicht verwendete Stile aus dem Vorlagendokument verwirft. Sie müssen im Dokument vorhandenen Text mit diesen Stilen_ haben. –