POW XWPF Как установить текст в абзаце без переноса слов - PullRequest
0 голосов
/ 26 декабря 2018

XWPF Абзац POI - я хочу создать абзац, но в последней или последней строке этого абзаца без переноса слов.Как настроить ..... Спасибо ....

String kalimat="Aaaa bbb ccc ddd eee fffffff ggg hhh. Jjjjj kkk lll mmm nnnn oo pppppp qqqqq rrrr sssssssss tt uuu.";   
paragraph = document.createParagraph();
paragraph.setAlignment(ParagraphAlignment.BOTH);
paragraph.setSpacingBefore(0);
paragraph.setSpacingAfter(0);
paragraph.setSpacingBetween(1.5);

run = paragraph.createRun();
run.setFontFamily("Bookman Old Style");
run.setFontSize(12);
run.addTab();
run.setText(kalimat);

paragraph = document.createParagraph();
**//paragraph.setWordWrap(false);**
//paragraph.setWordWrapped(false);

paragraph.setAlignment(ParagraphAlignment.BOTH);
paragraph.setSpacingBefore(0);
paragraph.setSpacingAfter(0);
paragraph.setSpacingBetween(1.5);
run = paragraph.createRun();
run.setFontFamily("Bookman Old Style");
run.setFontSize(12);
run.setText("---------------------------------------------------------------------------------------------------------------------------------------------");

1 Ответ

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

Word, как правило, не может установить перенос слов без переноса.Он никогда не будет печатать что-либо на полях страницы, за исключением случаев, когда установлены отступы, которые входят в границы страницы.Конечно, он также никогда не печатает что-либо за пределами самого размера страницы.

Так что единственной возможностью будет установка отступа абзаца, что означает переход к полям страницы.Например, установка правого отступа абзаца -6 дюймов означает, что этот отступ уходит на 6 дюймов в правое поле страницы.

Но в вашем примере я подозреваю, что вы хотите подчеркнуть абзац.Это не должно быть сделано с использованием ASCII art (----------), но лучше с использованием соответствующих настроек абзаца.

Но из ваших предыдущих вопросов я вижу, что вы также хотите иметь выровненный абзац с выравниванием по буквам (начальные символы)до правого поля страницы в последней строке.Это может быть достигнуто с помощью табуляции в позиции правого поля страницы.Но тогда размер страницы и поля страницы должны быть установлены явно.И это не полностью поддерживается apache poi до сих пор.Поэтому необходимо использовать классы низкого уровня ooxml-schemas.

Пример (с использованием apache poi 4.0.1), который показывает все это:

import java.io.FileOutputStream;

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


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

  XWPFDocument document = new XWPFDocument();

  XWPFParagraph paragraph = document.createParagraph();
  XWPFRun run=paragraph.createRun();  
  run.setText("Following paragraph has right indent set going into right page margin:");

  paragraph = document.createParagraph();
  paragraph.setIndentationRight(-1440*6); // measurement unit is Twips (Twentieth of an inch point)
  // 1 inch = 72 pt = 72 * 20 = 1440 Twips; -1440*6 = -6 inches right indention
  run=paragraph.createRun();  
  run.setText("This text goes into the page margin. This text goes into the page margin. This text goes into the page margin. This text goes into the page margin. ");

  paragraph = document.createParagraph();
  paragraph.setBorderBottom(Borders.SINGLE);
  run=paragraph.createRun();  
  run.setText("This is a paragraph which is bottom underlined.");

  paragraph = document.createParagraph();
  paragraph.setAlignment(ParagraphAlignment.BOTH); // alingment justify
  // set tab stop at position 6.5 inches 
  // (right page margin for page size letter and 1 inch left and right page margin)
  paragraph.getCTP().getPPr().addNewTabs().addNewTab();
  paragraph.getCTP().getPPr().getTabs().getTabArray(0).setVal(
   org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabJc.LEFT);
  paragraph.getCTP().getPPr().getTabs().getTabArray(0).setLeader(
   org.openxmlformats.schemas.wordprocessingml.x2006.main.STTabTlc.HYPHEN);
  paragraph.getCTP().getPPr().getTabs().getTabArray(0).setPos(java.math.BigInteger.valueOf(Math.round(6.5 * 1440))); 
  run=paragraph.createRun();  
  run.setText("This is justify aligned paragraph having fill characters (leaders) up to tab stop in last line. This is justify aligned paragraph having fill characters (leaders) up to tab stop in last line. This is justify aligned paragraph having fill characters (leaders) up to tab stop in last line.");
  run.addTab();

  // set page size letter format (8.5 x 11 inches)
  document.getDocument().getBody().addNewSectPr().addNewPgSz();
  document.getDocument().getBody().getSectPr().getPgSz().setW(java.math.BigInteger.valueOf(Math.round(8.5 * 1440)));
  document.getDocument().getBody().getSectPr().getPgSz().setH(java.math.BigInteger.valueOf(Math.round(11 * 1440)));
  // set 1 inch left and right page marign
  document.getDocument().getBody().getSectPr().addNewPgMar();
  document.getDocument().getBody().getSectPr().getPgMar().setLeft(java.math.BigInteger.valueOf(1440));
  document.getDocument().getBody().getSectPr().getPgMar().setRight(java.math.BigInteger.valueOf(1440));

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

 }
}

Результат:

enter image description here

...