如何防止文本与页面底部的元素重叠

Posted

技术标签:

【中文标题】如何防止文本与页面底部的元素重叠【英文标题】:How to prevent iText from overlaping with elements a the bottom of my page 【发布时间】:2021-11-17 01:33:29 【问题描述】:

我在 iText 中有一个表格,可以从我的 Jtable 中添加元素,但是无论有多少单元格,我添加信息的单元格始终位于页面底部,我使用的是 itext 版本 7.1.16。这是我的代码和它的样子

PdfDocument pdf = new PdfDocument(new PdfWriter("/home/user/Desktop/out.pdf"));
Document document = new Document(pdf,PageSize.A4);
PdfFont headFont = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);
PdfFont cellFont = PdfFontFactory.createFont(StandardFonts.TIMES_ROMAN);

Table table1 = new Table(5);
table1.setFixedPosition(0f, 0f, 595);
table1.setHeight(550);

table1.addHeaderCell(new Cell()
    .setTextAlignment(TextAlignment.CENTER)
    .setBackgroundColor(ColorConstants.LIGHT_GRAY)
    .add(new Paragraph("Ime"))
    .setFont(headFont));
table1.addHeaderCell(new Cell()
    .setTextAlignment(TextAlignment.CENTER)
    .setBackgroundColor(ColorConstants.LIGHT_GRAY)
    .add(new Paragraph("Šifra"))
    .setFont(headFont));
table1.addHeaderCell(new Cell()
    .setTextAlignment(TextAlignment.CENTER)
    .setBackgroundColor(ColorConstants.LIGHT_GRAY)
    .add(new Paragraph("Opis"))
    .setFont(headFont));
table1.addHeaderCell(new Cell()
    .setTextAlignment(TextAlignment.CENTER)
    .setBackgroundColor(ColorConstants.LIGHT_GRAY)
    .add(new Paragraph("Mjerna Jedinica"))
    .setFont(headFont));
table1.addHeaderCell(new Cell()
    .setTextAlignment(TextAlignment.CENTER)
    .setBackgroundColor(ColorConstants.LIGHT_GRAY)
    .add(new Paragraph("Kolicina"))
    .setFont(headFont));

for(int i = 0;i<Table.getRowCount();i++)

    table1.addCell(new Cell()
        .add(new Paragraph(ime.toString()))
        .setFont(cellFont)
        .setMinHeight(0));
    table1.addCell(new Cell()
        .add(new Paragraph(sif.toString()))
        .setFont(cellFont));
    table1.addCell(new Cell()
        .add(new Paragraph(op.toString()))
        .setFont(cellFont));
    table1.addCell(new Cell()
        .add(new Paragraph(mj.toString()))
        .setFont(cellFont));
    table1.addCell(new Cell()
        .add(new Paragraph(kol1.toString()))
        .setFont(cellFont));

【问题讨论】:

【参考方案1】:
Table table1 = new Table(5);
table1.setFixedPosition(0f, 0f, 595);
table1.setHeight(550);

在您的 setFixedPosition 调用中,您明确地将表格定位在左下角 (0f, 0f) 并使其与页面一样宽 (595)。

因此,如果您不希望表格无论有多少单元格都移到页面底部,不要将其置于底部。

在您的setHeight 调用中,您明确将表格设置得相当高(550),远高于这几个条目的要求。

因此,如果您不希望单元格过大,请不要将表格设置得那么高。

我不知道你的用例,你明确设置表格的位置、宽度和高度可能是有原因的。但是,如果没有这样的原因,则根本不要设置这些值,让 iText 进行布局。

【讨论】:

是的,但是如果我不使用 setFixedPosition() 来设置表格的精确坐标和 with,它会将 i 设置在右上角。我希望它处于的首选位置是在那个特定的高度,而不是与我在底部的元素重叠。另一方面,如果我使用 setFixedPosition() 将其设置在我想要的位置,则单元格会正常运行,但随后表格会被向上推并离开页面,我如何将表格设置在特定坐标但使行走朝向底部并离开页面跳过底部的元素? table1.setFixedPosition(0f, 50f, 595); table1.setHeight(500); 怎么样? 是的,高度为 150f 和 400,它不再越过页脚,但在 150f 处,有一定数量的组件消失在空隙中,有没有办法转移这些元素低于 150f 到下一页?还有一种删除边界的方法,因为它们仍然会拉伸

以上是关于如何防止文本与页面底部的元素重叠的主要内容,如果未能解决你的问题,请参考以下文章

如何防止手机键盘覆盖html输入

WPF中如何让一个元素与另一个元素重叠?

如何使视图与键盘对齐

防止重叠的 UIScrollView 滚动

如何防止子视图重叠标签栏?

当其他元素居中对齐时,使用 Flexbox 将页脚与页面底部对齐