2017-09-14 9 views
0

Je veux modifier la marge de la page entière du document par apache-poi et je veux que toutes les sections soient changées. Ceci est mon code:Comment régler la marge pour le document entier et toutes les sections par 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")); 

Mais seule la dernière section est modifiée, pas toutes les sections et pas tout le document. Que dois-je faire pour modifier la marge de toutes les sections et la marge de l'ensemble du document?

+0

@Punit Votre modification introduit démarquage inutile et une nouvelle erreur; à l'avenir, essayez de corriger * tous * les problèmes dans un article lors de l'édition et revérifiez si tous les changements sont corrects. OP: Veuillez accepter uniquement les modifications qui améliorent réellement votre message. –

+0

Vous avez raison. J'ai accepté les modifications par erreur et j'ai été regretté après cela. Je vous remercie. @Baum mit Augen –

Répondre

2

Si le document est divisé en sections, les SectPr pour les premières sections sont en PPr éléments dans les paragraphes qui sont les séparateurs de section. Seul le SectPr pour la dernière section se trouve directement dans le Body. Nous avons donc besoin de boucler tous les paragraphes pour obtenir tous les SectPr s.

Exemple:

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(); 
} 

}