2015-03-05 4 views
2

Мне нужно вставить разрыв страницы после печати некоторых абзацев. Я нашел функцию для вставки разрыва страницы, но она вставляет только пустой абзац, а не разрыв страницы.Как вставить разрыв страницы?

Это функция:

private static void addPageBreak() { 
    MainDocumentPart documentPart = wp.getMainDocumentPart(); 

    Br breakObj = new Br(); 
    breakObj.setType(STBrType.PAGE); 

    P paragraph = factory.createP(); 
    paragraph.getContent().add(breakObj); 
    documentPart.getJaxbElement().getBody().getContent().add(paragraph); 
} 

Как я могу исправить эту функцию, чтобы вставить полный разрыв страницы?

+0

Я сделал некоторые улучшения грамматики, удаляемые метки из заголовка вопроса, и перефразировать название. – skrrgwasme

ответ

1

Убедитесь, что вы правильно вызываете метод addPageBreak(). Попробуйте следующий код, чтобы проверить свой метод:

public class AddingAPageBreak { 
    private static ObjectFactory factory; 
    private static WordprocessingMLPackage wordMLPackage; 

    public static void main (String[] args) throws Docx4JException { 
     wordMLPackage = WordprocessingMLPackage.createPackage(); 
     factory = Context.getWmlObjectFactory(); 

     wordMLPackage.getMainDocumentPart().addParagraphOfText("Hello Word!"); 

     addPageBreak(); 

     wordMLPackage.getMainDocumentPart().addParagraphOfText("This is page 2!"); 
     wordMLPackage.save(new java.io.File("src/main/files/HelloWord11.docx")); 
    } 

    /** 
    * Adds a page break to the document. 
    */ 
    private static void addPageBreak() { 
     MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart(); 

     Br breakObj = new Br(); 
     breakObj.setType(STBrType.PAGE); 

     P paragraph = factory.createP(); 
     paragraph.getContent().add(breakObj); 
     documentPart.getJaxbElement().getBody().getContent().add(paragraph); 
    } 
} 
+0

Спасибо за ваш ответ. Я тестировал его, но он не работает. Он по-прежнему печатает только пустой абзац, а не разрыв страницы. Я развиваюсь в дистрибутиве Ubuntu, и я тестирую его с помощью LibreOffice. Должна быть эта проблема? – temerariomalaga

4

Добавить ш: ш в перспективе, а не непосредственно в ш: р

P p = wmlObjectFactory.createP(); 
    // Create object for r 
    R r = wmlObjectFactory.createR(); 
    p.getContent().add(r); 
     // Create object for br 
     Br br = wmlObjectFactory.createBr(); 
     r.getContent().add(br); 
      br.setType(org.docx4j.wml.STBrType.PAGE); 

Вы можете создать такой код с помощью docx4j веб-приложение, если у вас есть docx, содержащий то, что вы хотите воспроизвести.

+0

Спасибо. Я пробовал, что он все еще не работает, теперь он ничего не делает. Я попробую с помощью webapp. – temerariomalaga

0

Путь documentPart.getJaxbElement().getBody().getContent().add(paragraph); не работает вообще.

Вы пытались использовать documentPart.addObject(paragraph);?

См полного примера, который вставляет разрыв страницы между двумя пунктами:

public class PageBreakExample { 

    private static ObjectFactory objectFactory = new ObjectFactory(); 

    public static void main(String[] args) throws InvalidFormatException, 
     Docx4JException { 
     WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage(); 

     // create new paragraph with a run containing text and add it to the document. 
     P paragraph1 = objectFactory.createP(); // create new paragraph 
     R run1 = objectFactory.createR(); // create new run 
     Text text1 = objectFactory.createText(); // create text 

     text1.setValue("This is text in paragraph 1"); 
     run1.getContent().add(text1); // add text ton the run 
     paragraph1.getContent().add(run1); // add run to paragraph 
     wordMLPackage.getMainDocumentPart().addObject(paragraph1); 

     addPageBreak(wordMLPackage.getMainDocumentPart()); 

     // proceed to create another paragraph with a run containing text. 
     P paragraph2 = objectFactory.createP(); // create new paragraph 
     R run2 = objectFactory.createR(); // create new run 
     Text text2 = objectFactory.createText(); // create text 

     text2.setValue("This is text in paragraph 2"); 
     run2.getContent().add(text2); // add text ton the run 
     paragraph2.getContent().add(run2); // add run to paragraph 
     wordMLPackage.getMainDocumentPart().addObject(paragraph2); // add to main document part 


     wordMLPackage.save(new java.io.File("two_paragraphs_page_break.docx")); // save 
    } 

    private static void addPageBreak(MainDocumentPart documentPart) { 
     P paragraph = objectFactory.createP(); 
     R run = objectFactory.createR(); 
     P p = objectFactory.createP(); 
     // Create object for r 
     R r = objectFactory.createR(); 
     p.getContent().add(r); 
     // Create object for br 
     Br br = objectFactory.createBr(); 
     r.getContent().add(br); 
     br.setType(org.docx4j.wml.STBrType.PAGE); 
     documentPart.addObject(p); 
    } 
}