How to remove extra space between page and footer poi java

孤者浪人 提交于 2021-01-29 17:29:51

问题


I am creating a poi word document . I have setup page margin 0 but their is extra space between bottom and footer image i want to remove this space. I have used this code which did not work

  addNewPgMar.setLeft(BigInteger.valueOf(0));
  addNewPgMar.setRight(BigInteger.valueOf(210));
  addNewPgMar.setGutter(BigInteger.valueOf(0));
  addNewPgMar.setFooter(BigInteger.valueOf(0));
  addNewPgMar.setHeader(BigInteger.valueOf(0));

I want to remove this footer below space which is showing in image.


回答1:


Your problem has nothing to do with the page margins but with the paragraph settings in the footer. A Word paragraph has settings for spacing after each paragraph as well as for spacing between the lines in the paragraph. If the picture in your footer is inline in a paragraph in the footer, then the spacing after the paragraph must be 0 and the spacing between must be 1 to avoid the spacing you are facing.

Using apache poi 4.1.0 this can be set using:

...
XWPFParagraph paragraph...
...
paragraph.setSpacingAfter(0);
paragraph.setSpacingBetween(1d, LineSpacingRule.AUTO);
...

Complete example:

import java.io.FileOutputStream;
import java.io.FileInputStream;

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

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

import java.math.BigInteger;

public class CreateWordHeaderFooterNullMargin {

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

  XWPFDocument document = new XWPFDocument();

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

  // create header start
  XWPFHeader header = document.createHeader(HeaderFooterType.DEFAULT);
  paragraph = header.getParagraphArray(0);
  if (paragraph == null) paragraph = header.createParagraph();
  paragraph.setSpacingAfter(0);
  paragraph.setSpacingBetween(1d, LineSpacingRule.AUTO);
  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.CENTER);
  paragraph.setSpacingAfter(0);
  paragraph.setSpacingBetween(1d, LineSpacingRule.AUTO);
  run = paragraph.createRun();
  String imgFile="Chrysanthemum.jpg";
  run.addPicture(new FileInputStream(imgFile), XWPFDocument.PICTURE_TYPE_JPEG, imgFile, Units.toEMU(500), Units.toEMU(25));

  // create page margins
  CTSectPr sectPr = document.getDocument().getBody().getSectPr();
  if (sectPr == null) sectPr = document.getDocument().getBody().addNewSectPr();
  CTPageSz pageSz = sectPr.addNewPgSz(); // paper format letter
  pageSz.setW(BigInteger.valueOf(12240)); //12240 Twips = 12240/20 = 612 pt = 612/72 = 8.5"
  pageSz.setH(BigInteger.valueOf(15840)); //15840 Twips = 15840/20 = 792 pt = 792/72 = 11"
  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(0));
  pageMar.setBottom(BigInteger.valueOf(0));
  pageMar.setFooter(BigInteger.valueOf(0));
  pageMar.setHeader(BigInteger.valueOf(0));
  pageMar.setGutter(BigInteger.valueOf(0));

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

 }
}

Disclaimer: In my opinion page settings where margins are 0 are not recommendable. Most printers are not able printing the full paper's size. There are printable areas with minimal spaces on left, right, top and/or bottom of the paper. If you set page margins 0, then Word's GUI will warn about this. If you ignore that warning then you possible can damage the printer while next printing. Most printers will not print into their not printable page ranges even if you told to do so. That is to avoid that damaging.



来源:https://stackoverflow.com/questions/57340121/how-to-remove-extra-space-between-page-and-footer-poi-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!