Also ... im Grunde habe ich eine docx-Datei. Und ich muss einige Formatierungsänderungen in einigen Absätzen vornehmen und dann in einer neuen Datei speichern. Was ich tue, folgt im Wesentlichen.Unendliche gefälschte Seiten in Outpout docx mit Apache Poi
import scala.collection.JavaConversions._
import org.apache.poi.xwpf.usermodel._
def format(sourceDocumentPath: String, outputDocumentPath: String) {
val sourceXWPFDocument = new XWPFDocument(new FileInputStream(sourcePath))
// lets say I have a list of paragraph numbers... I want to format
val parasToFormat = List(2, 10, 15, 20)
val allParagraphs = sourceXWPFDocument.getParagraphs
for ((paragraph, index) <- allParagraphs.zipWithIndex) {
if(parasToFormat.contains(index)) {
formatParagraph(paragraph)
}
}
val outputDocx = new FileOutputStream(new File(outputDocumentPath));
xwpfDocument.write(outputDocx)
outputDocx.close()
}
def formatParagraph(paragraph: XWPFParagraph): Unit = {
// Do some color changing to few runs
// Add few runs with new text.
}
Zum größten Teil funktioniert alles gut. Die Ausgabe docx öffnet alles in LibreOffice auf meinem Ubuntu.
Aber, wenn ich diese Ausgabe docx auf ein Windows-System übertrage, und versuche, diese Ausgabe docx in MS Word zu öffnen, bekomme ich unendliche (immer wachsende) Müllseiten.
Alle Vermutungen von den Weisen der Poi-Gemeinschaft sind willkommen.
Auch ... Einer meiner Vermutungen ist - Möglicherweise sind die Zeilenenden in den Dateien MS Word verwirrend. Als Ubuntu verwendet (LF - \n
) Zeilenenden, während Windows verwendet (CRLF - \r\n
). Wenn das tatsächlich das Problem ist ... wie kann ich das beheben?
Obwohl ... Mein Code ist in Scala ... Ich denke, die ähnliche sollte auch für Java-Code gelten ... und die meisten Poi-Benutzer werden in Java-Community sein ... Also ich bin auch Java-Tag hinzufügen.
Wer etwas raten ... ?? –
haben Sie versucht, die Zeilenenden auf die Windows-Version zu ändern? Es bestätigt oder leugnet Ihren Verdacht, dass die Zeilenenden das Problem sind. Auf diese Weise können Menschen entweder durch eine Bestätigung auf den richtigen Weg gebracht werden, oder keine Zeit verschwenden, die auf einen falschen Weg geht, wenn das Problem etwas anderes ist. –
Nun ... obwohl wir wissen, dass 'docx' Dateien praktisch Zip-Dateien sind, die verschiedene' xml's enthalten. Jetzt ... obwohl ich das in allen xml-Dateien ändern kann. Ich bin nicht wirklich sicher, wie man eine 'docx' Datei aus diesen modifizierten' xml's korrekt erstellt. Was bedeutet ... wir müssen die Zeilenenden irgendwie erzwingen, während wir in den Dateiausgabestream schreiben. –