使用itextsharp检查添加元素是否会创建新页面

时间:2018-12-14 12:45:30

标签: c# pdf itext

嗨,我正在生成PDF文件(用于合同)。内容是动态的,我不知道将要生成多少页面。文档末尾有一个“签名”部分。该部分可能会在页面上单独出现。我想检查一下是否也将上一节移到了新页面。

让我用图片澄清一下。我想如果发生像Image 1这样的情况,那么文档将被转换为Image 2。

图片1: Image 1

图片2: Image 2

如果发生图3中所示的情况,则完全可以保持这种状态。

图片3: Image 3

我正在使用ITextSharp。你能给我什么线索怎么回事吗?

2 个答案:

答案 0 :(得分:1)

感谢mkl找到了解决方案。

我将两个段落都放在表格的第二行 中,将表格的 KeepTogether 属性设置为 true 并隐藏表格的边框。

Document pdf = new Document();
var previousParagraph = new Paragraph();
/* fill content of previousParagraph*/
var signHere = new Paragraph();
/* fill content of signHere*/

var signatureTable = new PdfPTable(1)
{
    KeepTogether = true,
    WidthPercentage = 100f
};
signatureTable.DefaultCell.Border = Rectangle.NO_BORDER;

signatureTable.AddCell(previousParagraph);
signatureTable.AddCell(signHere);

pdf.Add(signatureTable);

答案 1 :(得分:0)

确定页面大小,最后放置的元素的坐标以及新元素的尺寸。

如果新元素的高度之和在放置在与最后放置的元素相邻的坐标处时超过页面的尺寸,则将创建一个新页面。

通过数学运算,您可以通过将页面的剩余空间总量保留为变量并将其递减,例如通过放置元素时新添加的元素的高度,来找到差异。

然后,您将知道页面上剩余了多少空间,并且在添加新内容时将导致另一个页面出现。

请注意页眉页脚和页边距也会影响页面的面积。

考虑到iTextSharp API提供的现有对象之一,在Document或Page对象上可能还可以使用一些方法,甚至可以创建自己的扩展方法来实现此目的。 >