C# PDF iTextSharp,将PDF行写入不同页面

C# PDF iTextSharp,将PDF行写入不同页面,c#,asp.net,pdf,itextsharp,C#,Asp.net,Pdf,Itextsharp,我正在处理前一个员工的错误代码 (我多么喜欢处理别人的代码),他正在用iTextSharp ASP framework 4.0,c创建一个pdf# 他正在使用: if (yindex <= 100) { Cb.PdfDocument.NewPage(); Cb.SetCMYKColorStroke(100, 60, 0, 18); yindex = 770; } Cb.BeginText(); Cb.SetFontAndSize(Font, FontSize); Cb.ShowTextA

我正在处理前一个员工的错误代码 (我多么喜欢处理别人的代码),他正在用iTextSharp ASP framework 4.0,c创建一个pdf#

他正在使用:

if (yindex <= 100)
{
Cb.PdfDocument.NewPage();

Cb.SetCMYKColorStroke(100, 60, 0, 18);
yindex = 770;
}
Cb.BeginText();
Cb.SetFontAndSize(Font, FontSize);
Cb.ShowTextAligned(Alignment, text, xPos, yindex, rotation);
Cb.EndText();

if(yindex我会扔掉写标题的代码和其他数据,并引入一个页面事件,在
OnEndPage()事件中添加标题

为了解决这样一个事实,即当到达第X页时,您才知道总数,而在第X-1页、第X-2页上,您可能需要该总数……我将使用
PdfTemplate
(正如mkl建议的那样)

这在示例中得到了证明,例如(参见C#对应项)


使用页面事件的好处是,您不需要跟踪页面,您可以将绘制页眉的代码与其他业务逻辑分开。有关更多示例,请参阅。

一旦执行
NewPage
,前一个页面就会写入文件。因此,您不能简单地返回到该页面向其添加内容。但是,您可以做的是,在开始一个节时创建一个空的
PdfTemplate
,并将其包含在当前页面的顶部。完成该节时,在该模板中绘制页眉文本行并存储它。或者,您可以在某个集合中存储页码和页眉行;如果没有页眉的pdf完成后,只需在
PdfStamper
中打开它,并将标题添加到指定的页面中。无论是谁编写了
Cb.PdfDocument.NewPage();
都会在他够不到的地方发痒。这确实是一些非常糟糕的代码!