如何使用Apache POI在Word文档中定义窄边距?

时间:2018-11-01 10:21:04

标签: java jsf apache-poi

我正在使用Apache POI创建docx文档,并且希望将边距设置为窄,就像在MS Word中使用“布局”>“边距”>“窄”一样。

我还看到了其他一些建议RecordInputStream的答案,但是我不知道如何将其集成到我的代码中,因为它使用FileInputStream作为参数。

我使用ByteArrayOutputStream是因为我正在用全能表导出它,并且我想找到一种使其工作的方法。

这是我的代码:

ByteArrayOutputStream output = new ByteArrayOutputStream();
XWPFDocument document = new XWPFDocument();
XWPFParagraph titleParagraph = document.createParagraph();
//some code here...
document.write(output);
document.close();    
Faces.sendFile(output.toByteArray(), wordFilename, true);

请帮助。预先感谢!

1 个答案:

答案 0 :(得分:2)

到目前为止,XWPFDocument中都没有用于设置页边距的内容。因此,我们需要使用低级bean org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSectProrg.openxmlformats.schemas.wordprocessingml.x2006.main.CTPageMar

word所说的窄边距就是周围0.5英寸的边距。

import java.io.FileOutputStream;

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

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

import java.math.BigInteger;

public class CreateWordPageMargins {

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

  XWPFDocument document = new XWPFDocument();

  XWPFParagraph paragraph = document.createParagraph();

  XWPFRun run = paragraph.createRun();  
  run.setText("Text");

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

 }
}