当前位置: 首页 > 知识库问答 >
问题:

如何从左字文档给poi表边距

明利
2023-03-14

我正在使用POI创建word文档。我已经创建了一个表和一个标题。我想给表格留左边距,所以我使用了以下代码:

CTSectPr getSectPr = doc.getDocument().getBody().getSectPr();
CTPageMar addNewPgMar = getSectPr.addNewPgMar();
addNewPgMar.setLeft(BigInteger.valueOf(200));
addNewPgMar.setRight(BigInteger.valueOf(200));
addNewPgMar.setFooter(BigInteger.valueOf(0));
addNewPgMar.setHeader(BigInteger.valueOf(0));
[![enter image description here][1]][1]

但是这段代码也给标题从左到右提供了200个边距。我只想要桌子。提前感谢。

共有1个答案

后学
2023-03-14

使用所示代码设置的页边距是整个页面的边距。页眉和页脚也是页面和正文的一部分。页边距中的附加设置setFatersetHeader是页眉距页面顶部和页脚距页面底部的距离设置。没有特殊的设置来仅为正文或页眉/页脚设置左距离。所以左页边距的改变也会影响页眉和页脚。

您所能做的就是为正文中的段落和表格设置额外的缩进。

示例:

import java.io.FileOutputStream;

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

import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTblWidth;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STTblWidth;

import java.math.BigInteger;

public class CreateWordHeaderFooter {

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

  XWPFDocument document = new XWPFDocument();

  // the body content
  XWPFParagraph paragraph = document.createParagraph();
  // set indentation of the paragraph
  paragraph.setIndentationLeft(720); //720 TWentieths of an Inch Point (Twips) = 720/20 = 36 pt = 36/72 = 0.5"
  XWPFRun run=paragraph.createRun();  
  run.setText("The Body:");

  paragraph = document.createParagraph();
  // set indentation of the paragraph
  paragraph.setIndentationLeft(720);
  run=paragraph.createRun();  
  run.setText("Lorem ipsum.... page 1");

  // create table
  XWPFTable table = document.createTable(3,3);
  // set indentation of the table
  CTTblWidth tableIndentation = table.getCTTbl().getTblPr().addNewTblInd();
  tableIndentation.setW(BigInteger.valueOf(720));
  tableIndentation.setType(STTblWidth.DXA);
  for (int row = 0; row < 3; row++) {
   for (int col = 0; col < 3; col++) {
    table.getRow(row).getCell(col).setText("row " + row + ", col " + col);
   }
  }

  paragraph = document.createParagraph();
  // set indentation of the paragraph
  paragraph.setIndentationLeft(720);

  // create header start
  XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT);

  paragraph = header.getParagraphArray(0);
  if (paragraph == null) paragraph = header.createParagraph();
  paragraph.setAlignment(ParagraphAlignment.LEFT);

  run = paragraph.createRun();  
  run.setText("The Header");

  // create footer start
  XWPFFooter footer = document.createFooter(HeaderFooterType.DEFAULT);

  paragraph = footer.getParagraphArray(0);
  if (paragraph == null) paragraph = footer.createParagraph();
  paragraph.setAlignment(ParagraphAlignment.LEFT);

  run = paragraph.createRun();  
  run.setText("The Footer");

  // create page margins
  CTSectPr sectPr = document.getDocument().getBody().getSectPr();
  if (sectPr == null) sectPr = document.getDocument().getBody().addNewSectPr();
  CTPageMar pageMar = sectPr.getPgMar();
  if (pageMar == null) pageMar = sectPr.addNewPgMar();
  pageMar.setLeft(BigInteger.valueOf(720)); //720 TWentieths of an Inch Point (Twips) = 720/20 = 36 pt = 36/72 = 0.5"
  pageMar.setRight(BigInteger.valueOf(720));
  pageMar.setTop(BigInteger.valueOf(720));
  pageMar.setBottom(BigInteger.valueOf(720));
  pageMar.setFooter(BigInteger.valueOf(720));
  pageMar.setHeader(BigInteger.valueOf(720));
  pageMar.setGutter(BigInteger.valueOf(0));

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

 }
}

此代码使用ApachePOI4.1.0进行测试,需要完整的ooxml-schemas-1.4.jar,如FAQ-N10025所述。

 类似资料:
  • 如何使用Apache POI创建Word文档?

  • 问题内容: 是否有更改此文本的CSS代码 到这个 问题答案: 尝试这个 编辑:将此类应用于段落标记,您应该得到想要的结果。

  • OOXML包含以下代码: 我看到里面嵌着OLEObject。但不确定如何阅读它的内容。非常感谢任何帮助。

  • 我使用flexbox在桌面窗口屏幕中布局我的index.html,在一行中有两个div元素,在第二行中有一个长div元素,在第三行中有两个div元素,其中一个包含一个列表。我需要第一行和第三行中两个div元素之间的一些行间距。当我尝试在div元素上使用左边缘或右边缘时,div元素会相互折叠。 我试图改变每个div元素的宽度,但它们最终会互相折叠。我还尝试了在内容类上证明内容和对齐内容,但没有任何结

  • 在对一堆类型为[String, A](其中A是多种类型)的Eithers进行匹配后,我想将左侧的任何字符串累积到一个列表中。 如果我尝试元组,我最终会得到List[any]。如果我单独处理每个失败的案例(权利和左的组合),我最终会得到指数数量的案例语句。 我怎样才能在最后得到一个列表[[字符串,任何]]来传递给我的加注?或者我应该做些什么而不是比赛?

  • 我在使用Apache poi 3.9正确格式化单元格时遇到了问题。我的表中有一些英语和阿拉伯语文本,所以我需要将一些单元格的阅读顺序设置为从右到左,方法是使用 文档 一个HSSFCellStyle是用 如下所示 问题是,构造函数是受保护的,而类是final的。所以我不能延长。是否可以将单个单元格的读序设置为从右到左?我不需要将工作表的样式设置为RTL。这也不能解决问题。