根据我目前的代码,PDF有201页,最后一页是空白的,没有第2页
第1页:尊敬的GUY JR LANDA,-页码:1
第2页:尊敬的JOYCE JOHNSTON,-页码:3
Settings settings = SettingsFactory.GetSettings();
List<ILetter> letters = LetterFactory.GetLetters();
for (int i = 0; i < letters.Count/200; i++)
{
var group = letters.Skip(i * 200).Take(200);
using PdfWriter pdfWriter = new(Path.Combine(settings.OutputFolder, $"checks_{i + 1}.pdf"));
using PdfDocument pdfDocument = new(pdfWriter);
using Document document = new(pdfDocument);
pdfDocument.SetDefaultPageSize(iText.Kernel.Geom.PageSize.LEGAL);
Resource Resources = new();
foreach (var l in group)
{
l.SetPDF(pdfDocument, document, Resources);
l.PrintPages();
}
}
public override void PrintPages()
{
CurrentPage = PdfDocument?.AddNewPage(iText.Kernel.Geom.PageSize.LEGAL);
Greeting();
Document?.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
}
public void Greeting()
{
Paragraph P = new();
P.Add(new Text($"Dear {Data?.Address?.Name},").SetFont(Resources?.Times_Roman));
P.Add(new Text(" - Page Number:"+PdfDocument?.GetNumberOfPages().ToString()));
Document?.Add(P);
}
您的代码不是自包含的。因此,我将其简化为要点:
using (PdfWriter pdfWriter = new PdfWriter(@"PageNumberFromNumberOfPages.pdf"))
using (PdfDocument pdfDocument = new PdfDocument(pdfWriter))
using (Document document = new Document(pdfDocument))
{
for (int i = 1; i < 5; i++)
{
pdfDocument.AddNewPage(PageSize.LEGAL);
Paragraph paragraph = new Paragraph();
paragraph.Add(new Text($"This should be page {i}"));
paragraph.Add(new Text($" and PdfDocument.GetNumberOfPages is {pdfDocument.GetNumberOfPages()}"));
document.Add(paragraph);
document.Add(new AreaBreak(AreaBreakType.NEXT_PAGE));
}
}
结果与您的类似:
- 这应该是第1页,PdfDocument.GetNumberOfPages是1
- 这应该是第2页,PdfDocument.GetNumberOfPages是3
- 这应该是第3页,PdfDocument.GetNumberOfPages是4页
- 这应该是第4页,PdfDocument.GetNumberOfPages是5页
- [空]
这实际上是有道理的:
- 最初
PdfDocument
有0个页面。Document
还没有当前页面 - 对于
i == 1
AddNewPage
添加页面->PdfDocument
1页- 因此,该段包含";PdfDocument.GetNumberOfPages是1">
Add(paragraph)
使用现有的第一页进行写入。->Document
当前页面1- CCD_ 8使得CCD_。由于还没有,它首先生成一个新页面->
PdfDocument
2页;Document
当前第2页
- 对于
i == 2
AddNewPage
添加页面->PdfDocument
共3页- 因此,该段包含";PdfDocument.GetNumberOfPages是3〃
- CCD_ 15使得CCD_->
PdfDocument
3页;Document
当前第3页
- 对于
i == 3
AddNewPage
添加页面->PdfDocument
共4页- 因此,该段包含";PdfDocument.GetNumberOfPages是4〃
- CCD_ 22使得CCD_->
PdfDocument
4页;Document
当前第4页
因此,您所观察到的正是所期望的。
您可能不仅想知道为什么观察到的行为是正确的,还想知道如何检索实际的当前页码。
首先,使用PdfDocument.GetNumberOfPages
本身并不是一个坏主意,只要页面仅通过添加到Document
类来创建即可不过,只要您通过不同的机制添加页面,当前的Document
页码和PdfDocument
中的页数就会出现差异。
因此,如果您需要通过不同的机制更改页数,则需要另一种方法来查询当前的Document
页码。您可以通过查询相关的DocumentRenderer
来完成,例如,像这个
paragraph.Add(new Text($" and CurrentArea.GetPageNumber is {document.GetRenderer().GetCurrentArea().GetPageNumber()}"));
(页码测试UsingNumberOfPages
)