2017-09-14 1 views
0

Ich möchte den gesamten Dokument Seitenrand von Apache-Poi bearbeiten und ich möchte alle Abschnitte geändert werden. Das ist mein Code:So legen Sie den Rand für das gesamte Dokument und alle Abschnitte von Apache poi

XWPFDocument docx = new XWPFDocument(OPCPackage.open("template.docx")); 
CTSectPr sectPr = docx.getDocument().getBody().getSectPr(); 
CTPageMar pageMar = sectPr.getPgMar(); 
pageMar.setLeft(BigInteger.valueOf(1200L)); 
pageMar.setTop(BigInteger.valueOf(500L)); 
pageMar.setRight(BigInteger.valueOf(800L)); 
pageMar.setBottom(BigInteger.valueOf(1440L)); 
docx.write(new FileOutputStream("test2.docx")); 

Aber nur der neueste Abschnitt wird geändert, nicht alle Abschnitte und nicht das gesamte Dokument. Was muss ich tun, um den Randbereich aller Bereiche und den gesamten Rand des gesamten Dokuments zu ändern?

+0

@Punit Ihre bearbeiten nutzlos Abschlags und einen neuen Fehler eingeführt; In Zukunft sollten Sie versuchen, * alle * Probleme in einem Beitrag beim Bearbeiten zu beheben und überprüfen Sie, ob alle Änderungen korrekt sind. OP: Bitte akzeptieren Sie nur Änderungen, die Ihre Post verbessern. –

+0

Sie haben Recht. Ich habe versehentlich Änderungen akzeptiert, und danach wurde ich bereut. Vielen Dank. @Baum mit Augen –

Antwort

2

Wenn das Dokument in Abschnitte unterteilt ist, dann sind die SectPr s für die ersten Abschnitte in PPr Elemente in den Absätzen, die die Abschnittseparatoren sind. Nur der SectPr für den letzten Abschnitt ist direkt innerhalb der Body. Also müssen wir alle Absätze durchlaufen, um alle SectPr s zu erhalten.

Beispiel:

import java.io.*; 
import org.apache.poi.xwpf.usermodel.*; 

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar; 

import java.util.List; 
import java.util.ArrayList; 

import java.math.BigInteger; 

public class WordGetAllSectPr { 

public static List<CTSectPr> getAllSectPr(XWPFDocument document) { 
    List<CTSectPr> allSectPr = new ArrayList<>(); 
    for (XWPFParagraph paragraph : document.getParagraphs()) { 
    if (paragraph.getCTP().getPPr() != null && paragraph.getCTP().getPPr().getSectPr() != null) { 
    allSectPr.add(paragraph.getCTP().getPPr().getSectPr()); 
    } 
    } 
    allSectPr.add(document.getDocument().getBody().getSectPr()); 
    return allSectPr; 
} 

public static void main(String[] args) throws Exception { 

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

    List<CTSectPr> allSectPr = getAllSectPr(docx); 
System.out.println(allSectPr.size()); 

    for (CTSectPr sectPr : allSectPr) { 
    CTPageMar pageMar = sectPr.getPgMar(); 
    pageMar.setLeft(BigInteger.valueOf(1200L)); 
    pageMar.setTop(BigInteger.valueOf(500L)); 
    pageMar.setRight(BigInteger.valueOf(800L)); 
    pageMar.setBottom(BigInteger.valueOf(1440L)); 
    } 

    docx.write(new FileOutputStream("test2.docx")); 
    docx.close(); 
} 

} 
Verwandte Themen