如何避免某些内容单独放置在带有iText7的页面上?

时间:2019-01-24 10:10:52

标签: java itext7

在最后一页的末尾,我想打印一个签名。在某些情况下,文档的长度会形成签名,只有签名才能打印到下一页上。当所有报告都在前几页中时,整个页面上只有一个签名是不好的。

有人曾经遇到过这些问题并找到了可行的解决方案吗?

预先感谢

Toutoudakis Michail

1 个答案:

答案 0 :(得分:0)

关于第二个问题,请考虑使用setKeepTogethersetKeepWithNext方法。

让我们看看这两种方法:

1)setKeepTogether旨在将容器的子级尽可能地保持在一起。这意味着iText不会拆分容器,除非将容器也不能放置在网页上,否则它将整个容器移动到网页上。

        for (int i = 0; i < 28; i++) {
        doc.add(new Paragraph("\n"));
    }

    Div div = new Div();
    div.add(new Paragraph("Please, keep me with the next element").setKeepWithNext(true));
    div.add(new Paragraph("I don't want to be alone!"));

    div.setKeepTogether(true);

    doc.add(div);

结果pdf如下所示(请注意,第一页上的“请” paragrapg有足够的空间): enter image description here

2)setKeepWithNext旨在将第一个元素的末尾和下一个同胞的开始保留在同一区域。 (!)请注意,这仅适用于高级元素,即添加到根元素的元素。

        for (int i = 0; i < 28; i++) {
        doc.add(new Paragraph("\n"));
    }

    doc.add(new Paragraph("Please, keep me with the next element").setKeepWithNext(true));
    doc.add(new Paragraph("I don't want to be alone!"));

结果是相同的。

关于你的第一个问题,我真的很想看看你写的是什么。我相信通过使用事件,您将能够实现自己想要的目标。请查看下一个iText示例:特别是https://github.com/itext/i7js-examples/tree/develop/src/test/java/com/itextpdf/samples/sandbox/eventshttps://github.com/itext/i7js-examples/blob/develop/src/test/java/com/itextpdf/samples/sandbox/events/VariableHeader.java

对于更智能的布局,我建议您使用Canvas(因此使用高级api),而不要使用PdfCanvas(如上述示例)。 还是觉得这是一个不同的问题。