在Word中添加由Maven项目中的apache poi生成的BORDURE页面

时间:2018-12-05 09:23:48

标签: java apache ms-word apache-poi frame

我创建了一个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 :(得分:0)

从您之前的问题中,您已经知道主体的截面属性。您知道已经设置了页面大小和方向。还可以设置页面边框和页面边框线。

不幸的是,没有公开的有关ooxml模式(apache poi的低级基本对象)的任何文档。因此,我们需要下载ooxml-schemas的源,然后从这些源中进行javadoc以获得API文档。在那里我们找到了CTSectPrCTPageBorders,它们是页面边界线。

注意ooxml-schemas版本1.4apache 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();

 }
}