Установить размер вкладки с помощью Apache-POI - PullRequest
0 голосов
/ 25 сентября 2018

Я бы хотел установить размер вкладки через Apache-POI в документе Word.

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

|    filed1                  ->                   field2    |

Вертикальные линии представляют края страницы.Я хочу, чтобы вкладка между обоими полями была большой, чтобы первое поле было выровнено по левому краю страницы, а правое поле - по правому краю страницы.

Это довольно легко сделать с помощью самого Word, ноЯ только узнал, как добавить вкладку с POI, но не о том, как установить ширину вкладки.

Я пытался исследовать файлы Word с помощью инструмента Apache tika, но не видел, где вкладкаразмер скрыт в файле.

Любая помощь приветствуется, Maik

1 Ответ

0 голосов
/ 26 сентября 2018

Вкладки табуляции - это настройки в абзацах Word.И хотя использование табуляции является очень распространенной вещью, а также очень старой процедурой в обработке текста, это невозможно без использования низкоуровневых объектов ooxml-схемы apache poi.

Пример:

Примечание: единица измерения для позиции табуляции - двойная (двадцатая дюйма).

import java.io.FileOutputStream;

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

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTabStop;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabJc;

import java.math.BigInteger;

public class CreateWordHeaderWithTabStops {

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

  XWPFDocument doc = new XWPFDocument();

  // the body content
  XWPFParagraph paragraph = doc.createParagraph();
  XWPFRun run = paragraph.createRun();  
  run.setText("The Body...");

  // create header
  XWPFHeader header = doc.createHeader(HeaderFooterType.FIRST);

  // header's first paragraph
  paragraph = header.getParagraphArray(0);
  if (paragraph == null) paragraph = header.createParagraph();
  paragraph.setAlignment(ParagraphAlignment.LEFT);

  // create tab stops
  int twipsPerInch = 1440; //measurement unit for tab stop pos is twips (twentieth of an inch point)

  CTTabStop tabStop = paragraph.getCTP().getPPr().addNewTabs().addNewTab();
  tabStop.setVal(STTabJc.CENTER);
  tabStop.setPos(BigInteger.valueOf(3 * twipsPerInch));

  tabStop = paragraph.getCTP().getPPr().getTabs().addNewTab();
  tabStop.setVal(STTabJc.RIGHT);
  tabStop.setPos(BigInteger.valueOf(6 * twipsPerInch));

  // first run in header's first paragraph, to be for first text box
  run = paragraph.createRun(); 
  run.setText("Left");
  // add tab to run
  run.addTab();

  run = paragraph.createRun(); 
  run.setText("Center");
  // add tab to run
  run.addTab();

  run = paragraph.createRun(); 
  run.setText("Right");

  FileOutputStream out = new FileOutputStream("CreateWordHeaderWithTabStops.docx");
  doc.write(out);
  doc.close();
  out.close();


 }
}
...