PDF页面上的剩余空间

时间:2019-08-20 13:43:52

标签: c# itext7

我目前正在为客户设计报告,我必须在最后一页的底部放置一个文本。我必须在生成每个季度的16k pdf时执行此操作。

使用了iText 7.1.5,但将在下一版本中升级到最新版本。

在每页上都没有页脚是不可能的,因为该段落最多可以包含14行文本。在文档末尾添加普通段落也不是解决方案,因为我的客户要求文本位于页脚顶部。

预期结果:

https://imgur.com/a/wn3lxEr

当前生成的PDF

PdfADocument pdf = new PdfADocument(...)
...
// handler for adding header and footer on every page
pdf.AddEventHandler(PdfDocumentEvent.END_PAGE, headerFooterHandler);

Document doc = new Document(pdf);
doc.SetTopMargin(ConversionUtility.MillimeterToPoint(48));
doc.SetLeftMargin(ConversionUtility.MillimeterToPoint(26));
doc.SetRightMargin(ConversionUtility.MillimeterToPoint(18));
doc.SetBottomMargin(ConversionUtility.MillimeterToPoint(26));

... Some customer specific code

// paragraphs and data table is added
foreach(var feeLine in feeList.Values) {
    switch (feeLine.Type) {
        case "U":
        case "T1":
        case "T2":
        case "BS":
            doc.Add(GenerateTextBlock(feeLine, CheckSameType(feeLine.Type, feeList, i)));
            break;
        case "U3":
            doc.Add(GenerateTextBlock(feeLine, CheckSameType(feeLine.Type, feeList, i)));
            GenerateTableBlockStart(GetColumnCount(feeList[i + 1]));
            break;
        default:
            if (CheckEndOfTable(feeList, i)) {
                var table = GenerateTableBlock(feeLine, ColumnCount, true);
                doc.Add(table);
                table.Complete();
            } else {
                GenerateTableBlock(feeLine, ColumnCount, false);
            }
            break;
    }
}

headerFooterHandler.WritePageTotal(pdf);
doc.Close();

我需要一些建议/代码,如何找到最后一页上的剩余空间。放置和书写文字没问题。

2 个答案:

答案 0 :(得分:1)

您可以使用绝对定位将文本放置在最后一页所需的位置。您只需要找到要放置该段落的位置即可。这可以通过在PDF阅读器(例如Adobe / Foxit Reader)中打开任何pdf并将标尺更改为磅来完成。现在,您所需要做的就是放大并找到要放置文本的位置。例如

site_Foo

答案 1 :(得分:0)

由于仅使用带有默认Document的{​​{1}}来填充主页区域,因此您只需查询文档渲染器的当前区域即可。

例如这段代码在绘制有问题的行之前将可用空间的边界框写入每行:

DocumentRenderer

输出:

screen shot

因此

  

我需要一些建议/代码,如何找到最后一页上的剩余空间。放置和书写文字没问题。

在将所有常规内容添加到文档之后,只需按上述方式查询文档渲染器的当前区域。