Wie zu kopieren-Inhalte in einem .docx zu einem anderen .docx-Format , mit POI ohne format?
Angenommen, ich habe zwei .docx-Dateien, input.docx
und output.docx
ich auswählen muss, etwas von dem Inhalt in input.docx
und kopieren Sie Sie auf output.docx
. Die newdoc
zeigt seinen Inhalt in der Konsole scheint korrekt zu sein, aber ich habe nichts bekommen in der output.docx
außer leere Zeilen. Kann jemand Ratschläge geben?
InputStream is = new FileInputStream("D:\\input.docx");
XWPFDocument doc = new XWPFDocument(is);
List<XWPFParagraph> paras = doc.getParagraphs();
List<XWPFRun> runs;
XWPFDocument newdoc = new XWPFDocument();
for (XWPFParagraph para : paras) {
runs = para.getRuns();
if(!para.isEmpty())
{
XWPFParagraph newpara = newdoc.createParagraph();
XWPFRun newrun = newpara.createRun();
for (int i=0; i<runs.size(); i++) {
newrun=runs.get(i);
newpara.addRun(newrun);
}
}
}
List<XWPFParagraph> newparas = newdoc.getParagraphs();
for (XWPFParagraph para1 : newparas) {
System.out.println(para1.getParagraphText());
}//in the console, I have the correct information
FileOutputStream fos = new FileOutputStream(new File("D:\\output.docx"));
newdoc.write(fos);
fos.flush();
fos.close();
- seien Sie vorsichtig, die in Ihrer Frage, die Sie erwähnen
output.doc
statt .docx, es kann nur ein Tippfehler
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich leicht modifiziert Ihren code kopiert der text ohne änderung der text-format.
Gibt es noch ein kleines problem mit fontSize. Manchmal POI nicht bestimmen kann, die Größe von einen Lauf (ich Schreibe Ihren Wert auf die Konsole zu verfolgen) und gibt -1. Es definiert perfekt die Größe der schriftart, wenn ich es mir (sagen, wähle ich einige Absätze in Word und legen Sie die schriftart manuell, entweder Größe oder schriftart-Familie). Aber wenn es behandelt eine andere POI-generierter text, es gibt manchmal -1. Also ich intriduce eine Standard-Schriftgröße (10 im Beispiel oben) eingestellt werden, wenn POI gibt -1.
Weiteres Problem scheint zu entstehen mit Calibri-font-Familie. Aber in meinen tests, POI legt es auf Arial standardmäßig, so dass ich nicht den gleichen trick mit Standard fontFamily, wie es war für die Schriftgröße.
Anderen font-Eigenschaften (Fett, Kursiv, etc.) arbeiten gut.
Wahrscheinlich, alle diese Schrift-Probleme sind auf die Tatsache zurückzuführen, dass in meinen tests text wurde kopiert aus .doc-Datei. Wenn Sie haben .doc als Eingabe öffnen .doc-Datei in Word, dann "Speichern unter.." wählen .docx-format. Dann in deinem Programm verwenden Sie nur
XWPFDocument
stattHWPFDocument
, und ich nehme an, es wird in Ordnung sein.output.docx
können nicht direkt geöffnet. Es sagt kann nicht öffnen Sie Office Open XML-Dokument output.docx. Die Datei hat Fehler. Zum Glück, ich kann es öffnen, indem Sie die Wiederherstellung der Datei in eine neue Datei. Anyway, ich danke Ihnen sehr für Ihre Antwort. Ich werde immer auf der Suche nach besseren Lösungen.example.docx
zuexample.zip
ist, dann entpacken es. Sie werden sehen, eine Datei-Struktur, die mit vielen Dateien document.xml, styles.xml usw. Das ist, wie Microsoft speichert Daten in .docx, es völlig anders aus .doc. Deshalb POI HWPF und XWPF sind fast unvereinbarstackoverflow
. Danke 🙂 (meine E-Mail-Adresse ist flyingmouse820 at gmail dot com)