добавление страницы BORDURE в Word, созданной apache poi в проекте maven - PullRequest
0 голосов
/ 05 декабря 2018

Я создал приложение Java Maven, в котором я использую Apache Poi для генерации документов Word в качестве диплома.Все работает хорошо, за исключением того, что я не нашел никакой документации о добавлении бордюра для страницы в слове apache poi.

enter image description here

Я использую этот код:

private void diplomas () throws InvalidFormatException, 
FileNotFoundException, IOException
{
XWPFDocument document = new XWPFDocument ();
String landscape = "landscape";
changeOrientation (document, landscape);

// create header-footer
XWPFHeaderFooterPolicy headerFooterPolicy = document.getHeaderFooterPolicy ();
if (headerFooterPolicy == null) headerFooterPolicy = 
document.createHeaderFooterPolicy ();
// ....
// create header start
XWPFHeader header = headerFooterPolicy.createHeader 
(XWPFHeaderFooterPolicy.DEFAULT);
//....}

1 Ответ

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

Из вашего предварительного вопроса вы уже знаете свойства раздела body.Вы знаете, что там размер страницы и ориентация установлены.Возможны также настройки границ страницы, а также линий границ страницы.

К сожалению, нет никакой документации о схемах ooxml, базовых объектах низкого уровня apache poi, общедоступных.Таким образом, нам нужно загрузить исходные коды ooxml-схем , а затем выполнить javadoc для получения документации по API.Там мы находим CTSectPr и CTPageBorders, которые являются линиями границы страницы.

Примечание ooxml-schemas версия 1.4 предназначена для использования вместе с apache poi 4.0.0.

Простейший пример созданияWord страница с установленными линиями границы страницы:

import java.io.FileOutputStream;

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

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

public class CreateWordPageBorder {
 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();
  //paper size letter
  ctPageSz.setW(java.math.BigInteger.valueOf(Math.round(8.5 * 1440))); //8.5 inches
  ctPageSz.setH(java.math.BigInteger.valueOf(Math.round(11 * 1440))); //11 inches
  //page borders
  CTPageBorders ctPageBorders = (ctSectPr.isSetPgBorders())?ctSectPr.getPgBorders():ctSectPr.addNewPgBorders();
  ctPageBorders.setOffsetFrom(STPageBorderOffset.PAGE);
  for (int b = 0; b < 4; b++) {
   CTBorder ctBorder = (ctPageBorders.isSetTop())?ctPageBorders.getTop():ctPageBorders.addNewTop();
   if (b == 1) ctBorder = (ctPageBorders.isSetBottom())?ctPageBorders.getBottom():ctPageBorders.addNewBottom();
   else if (b == 2) ctBorder = (ctPageBorders.isSetLeft())?ctPageBorders.getLeft():ctPageBorders.addNewLeft();
   else if (b == 3) ctBorder = (ctPageBorders.isSetRight())?ctPageBorders.getRight():ctPageBorders.addNewRight();
   ctBorder.setVal(STBorder.THREE_D_EMBOSS);
   ctBorder.setSz(java.math.BigInteger.valueOf(24));
   ctBorder.setSpace(java.math.BigInteger.valueOf(24));
   ctBorder.setColor("FF0000");
  }

  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("CreateWordPageBorder.docx");  
  document.write(out);
  out.close();
  document.close();

 }
}
...