apache-poi - 如何删除页面和页脚 poi java 之间的额外空间
问题描述
我正在创建一个 poi word 文档。我已经设置了页边距 0,但它们是底部和页脚图像之间的额外空间,我想删除这个空间。我使用了这段代码,但它不起作用
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));
我想删除图像中显示的空间下方的此页脚。
解决方案
您的问题与页边距无关,而与页脚中的段落设置有关。段落具有每个Word
段落之后的间距以及段落中各行之间的间距的设置。如果你的页脚中的图片在页脚的一个段落中是内联的,那么段落之后的间距必须为 0,并且之间的间距必须为 1,以避免你面对的间距。
可以使用apache poi 4.1.0
以下方法设置使用它:
...
XWPFParagraph paragraph...
...
paragraph.setSpacingAfter(0);
paragraph.setSpacingBetween(1d, LineSpacingRule.AUTO);
...
完整示例:
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();
}
}
免责声明:在我看来,不推荐页边距为 0 的页面设置。大多数打印机无法打印整张纸的尺寸。在纸张的左侧、右侧、顶部和/或底部有空间最小的可打印区域。如果您将页边距设置为 0,则Word
'sGUI
将对此发出警告。如果您忽略该警告,则可能会在下次打印时损坏打印机。即使您要求这样做,大多数打印机也不会打印到其不可打印的页面范围内。那是为了避免这种破坏。
推荐阅读
- html - 有没有办法在来自 SQL Server 的电子邮件中更改 html 表的单元格背景颜色?
- javascript - Angular - 修改innerHTML
- python - Numpy 无法导入模块 _get_ndarray_c_version
- hibernate - 由于 bytea 转换错误,使用 Kotlin 可空类型时,本机 JPA 查询不起作用
- angular - 如何在本机和网络之间共享 Firebase 服务?
- php - T-dah Webmail 允许的内存大小
- google-apps-script - Google Script:在新的相邻单元格中添加结果
- java - 将值添加到链表而不是特定值 - JAVA
- python-3.x - 用于确定 3 维矩阵中一组索引的平均值的 Numpy 功能
- r - sprintf 在本地运行,但在 shinyapps.io 服务器上中断