iText 7.net第2页丢失?7.2.2



根据我目前的代码,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. 这应该是第1页,PdfDocument.GetNumberOfPages是1
  2. 这应该是第2页,PdfDocument.GetNumberOfPages是3
  3. 这应该是第3页,PdfDocument.GetNumberOfPages是4页
  4. 这应该是第4页,PdfDocument.GetNumberOfPages是5页
  5. [空]

这实际上是有道理的:

  • 最初PdfDocument有0个页面。Document还没有当前页面
  • 对于i == 1
    • AddNewPage添加页面->PdfDocument1页
    • 因此,该段包含";PdfDocument.GetNumberOfPages是1">
    • Add(paragraph)使用现有的第一页进行写入。->Document当前页面1
    • CCD_ 8使得CCD_。由于还没有,它首先生成一个新页面->PdfDocument2页;Document当前第2页
  • 对于i == 2
    • AddNewPage添加页面->PdfDocument共3页
    • 因此,该段包含";PdfDocument.GetNumberOfPages是3〃
    • CCD_ 15使得CCD_->PdfDocument3页;Document当前第3页
  • 对于i == 3
    • AddNewPage添加页面->PdfDocument共4页
    • 因此,该段包含";PdfDocument.GetNumberOfPages是4〃
    • CCD_ 22使得CCD_->PdfDocument4页;Document当前第4页

因此,您所观察到的正是所期望的。


您可能不仅想知道为什么观察到的行为是正确的,还想知道如何检索实际的当前页码。

首先,使用PdfDocument.GetNumberOfPages本身并不是一个坏主意,只要页面仅通过添加到Document类来创建即可不过,只要您通过不同的机制添加页面,当前的Document页码和PdfDocument中的页数就会出现差异。

因此,如果您需要通过不同的机制更改页数,则需要另一种方法来查询当前的Document页码。您可以通过查询相关的DocumentRenderer来完成,例如,像这个

paragraph.Add(new Text($" and CurrentArea.GetPageNumber is {document.GetRenderer().GetCurrentArea().GetPageNumber()}"));

(页码测试UsingNumberOfPages)

最新更新