Избегайте отображения в Word пустой страницы в начале .doc, сгенерированного Apache POI - PullRequest
0 голосов
/ 05 декабря 2018

Я использую Apache POI в проекте Java.Я работал над альбомной страницей со следующим кодом:

private void changeOrientation (XWPFDocument document, String orientation) 
{
CTDocument1 doc = document.getDocument ();
CTBody body = doc.getBody ();
CTSectPr section = body.addNewSectPr ();
XWPFParagraph para = document.createParagraph ();
CTP ctp = para.getCTP ();
CTPPr br = ctp.addNewPPr ();
br.setSectPr (section);
CTPageSz pageSize;
if (section.isSetPgSz ()) {
pageSize = section.getPgSz ();
}   else {
pageSize = section.addNewPgSz ();
}
pageSize.setOrient (STPageOrientation.LANDSCAPE);
if (orientation.equals ( "landscape")) {
pageSize.setOrient (STPageOrientation.LANDSCAPE);
pageSize.setW (BigInteger.valueOf (842 * 20));
pageSize.setH (BigInteger.valueOf (595 * 20));
}
 else {
pageSize.setOrient (STPageOrientation.PORTRAIT);   
pageSize.setH (BigInteger.valueOf (842 * 20));
pageSize.setW (BigInteger.valueOf (595 * 20));
}
}

Я вызываю метод после создания документа

private void dipl()
{
XWPFDocument document = new XWPFDocument ();
String landscape = "landscape";
changeOrientation (document, landscape);
} // ......

Проблема в том, что Word отображает пустую портретную страницу наначало документа перед альбомной страницей.Итак, как мне избежать создания пустой страницы?

1 Ответ

0 голосов
/ 05 декабря 2018

Свойства раздела по умолчанию для документа Word задаются только в теле, а не в абзаце.Если свойства раздела находятся в абзаце, то это свойства для дополнительных разделов, например, если документ содержит части в альбомной ориентации и части в портретном формате.

Минимальный рабочий пример для создания документа Word, имеющего буквуРазмер бумаги только в альбомном формате:

import java.io.FileOutputStream;

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

import org.openxmlformats.schemas.wordprocessingml.x2006.main.*;

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

  XWPFDocument document= new XWPFDocument();

  CTDocument1 ctDocument = document.getDocument();
  CTBody ctBody = ctDocument.getBody();
  CTSectPr ctSectPr = (ctBody.isSetSectPr())?ctBody.getSectPr():ctBody.addNewSectPr();
  CTPageSz ctPageSz = (ctSectPr.isSetPgSz())?ctSectPr.getPgSz():ctSectPr.addNewPgSz();
  ctPageSz.setOrient(STPageOrientation.LANDSCAPE);
  //paper size letter
  ctPageSz.setW(java.math.BigInteger.valueOf(Math.round(11 * 1440))); //11 inches
  ctPageSz.setH(java.math.BigInteger.valueOf(Math.round(8.5 * 1440))); //8.5 inches

  XWPFParagraph paragraph = document.createParagraph();
  XWPFRun run=paragraph.createRun();  
  run.setText("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");

  FileOutputStream out = new FileOutputStream("CreateWordLandscape.docx");  
  document.write(out);
  out.close();
  document.close();

 }
}
...