2017-10-13 12 views

Répondre

1

Dans Word Office OpenXML, les paramètres de césure automatique sont définis pour l'ensemble du document et peuvent être supprimés pour les paragraphes simples. Les paramètres pour l'ensemble du document sont en /word/settings.xml partie du package. Ceci est XWPFSettings mais il n'est pas possible d'obtenir cela en utilisant les objets de haut niveau de apache poi jusqu'à maintenant. Nous avons donc besoin d'utiliser des objets de bas niveau et de réflexion pour obtenir ceci et avoir accès à CTSettings.addNewAutoHyphenation.

La suppression possible de la césure automatique pour les paragraphes individuels est effectuée en CTPPrBase.addNewSuppressAutoHyphens et n'est pas possible en utilisant le niveau élevé apache poi.

Exemple:

import java.io.FileOutputStream; 

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

import org.apache.poi.POIXMLDocumentPart; 

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSettings; 
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STSectionMark; 

import java.lang.reflect.Field; 

import java.math.BigInteger; 

public class CreateWordAutoHyphenation { 

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

    XWPFDocument document = new XWPFDocument(); 

    POIXMLDocumentPart part = null; 
    for (int i = 0; i < document.getRelations().size(); i++) { 
    part = document.getRelations().get(i); 
    if (part instanceof XWPFSettings) break; 
    } 
    if (part instanceof XWPFSettings) { 
    XWPFSettings settings = (XWPFSettings)part; 
    Field _ctSettings = XWPFSettings.class.getDeclaredField("ctSettings"); 
    _ctSettings.setAccessible(true); 
    CTSettings ctSettings = (CTSettings)_ctSettings.get(settings); 
    ctSettings.addNewAutoHyphenation(); 
    } 

    String testtext = "This text tests whether automatic hyphenation opportunities are set on for this document and not are suppressed for this paragraph. Since in Word Office OpenXML the automatic hyphenation settings are set for the whole document and may be suppressed for single paragraphs."; 

    XWPFParagraph paragraph = document.createParagraph(); 
    paragraph.setAlignment(ParagraphAlignment.BOTH); 
    XWPFRun run = paragraph.createRun(); 
    run.setFontSize(18); 
    run.getCTR().getRPr().addNewLang().setVal("en-US"); 
    run.setText(testtext); 

    paragraph = document.createParagraph(); 
    run=paragraph.createRun(); 
    run.addBreak(BreakType.COLUMN); 

    paragraph.setAlignment(ParagraphAlignment.BOTH); 
    paragraph.getCTP().addNewPPr().addNewSuppressAutoHyphens(); 
    run = paragraph.createRun(); 
    run.setFontSize(18); 
    run.getCTR().getRPr().addNewLang().setVal("en-US"); 
    run.setText(testtext); 

    document.getDocument().getBody().addNewSectPr().addNewType().setVal(STSectionMark.CONTINUOUS); 
    document.getDocument().getBody().getSectPr().addNewCols().setNum(BigInteger.valueOf(2)); 

    document.write(new FileOutputStream("CreateWordAutoHyphenation.docx")); 
    document.close(); 

} 
} 
+0

Il fonctionne parfaitement! Merci mec, tu m'as sauvé quelques heures! Btw CTSettings contient beaucoup d'autres choses utilisables, va creuser dedans. – amseager