IRONSOFTWAREHOME

Szybsze nagłówki i stopki w dużych plikach PDF

Curtis Chau
Curtis Chau
Updated: 3 lipca 2026

Dodawanie nagłówków i stopek do bardzo dużego pliku PDF w jednym przebiegu jest powolne. Przetwarzaj dokument w stałych rozmiarów porcjach stron, renderuj każdą partię, a następnie scal części z powrotem, aby skrócić całkowity czas renderowania, zachowując ciągłość numeracji stron w całym dokumencie.

Rozwiązanie

1. Podziel indeksy stron na partie

Wybierz rozmiar porcjowania i pogrupuj indeksy stron dokumentu w stałych rozmiarów partie, na przykład po 300 stron każda. Mniejsze porcje renderują się szybciej indywidualnie, ale dodają więcej pracy przy scalaniu na końcu.

2. Skopiuj każdą partię do osobnego dokumentu

Wyodrębnij strony dla bieżącej partii za pomocą CopyPages, uzyskując samodzielny dokument do renderowania.

3. Renderuj nagłówki i stopki z ciągłą numeracją

Ustaw FirstPageNumber na stronę początkową porcjowania, aby numeracja przenosiła się przez cały dokument zamiast zaczynać się od 1 w każdej partii.

4. Zapisz każdą porcję i zutylizuj ją

Zapisz każdą porcję do pliku tymczasowego i zutylizuj ją. Zwolnienie porcji przed rozpoczęciem kolejnej partii zapobiega wzrostowi pamięci podczas działania.

5. Scal porcje do ostatecznego pliku PDF

Ponownie otwórz pliki tymczasowe, dołącz je w kolejności za pomocą AppendPdf, zapisz wynik, a następnie usuń pliki tymczasowe.

using IronPdf;
var pdf = PdfDocument.FromFile("input.pdf");
string headerHtml = "<div style='font-size:10px;'>Header</div>";
string footerHtml = "<div style='text-align:right;font-size:10px;'>Page {page} of {total-pages}</div>";
int chunkSize = 300;
var pageChunks = Enumerable.Range(0, pdf.PageCount)
    .GroupBy(i => i / chunkSize)
    .Select(g => g.ToArray())
    .ToList();
var tempFiles = new List<string>();
foreach (var indexes in pageChunks)
{
    var chunkPdf = pdf.CopyPages(indexes);
    int globalStartPage = indexes.First() + 1;
    chunkPdf.AddHtmlHeadersAndFooters(new ChromePdfRenderOptions
    {
        FirstPageNumber = globalStartPage,          // keeps numbering continuous
        HtmlHeader = new HtmlHeaderFooter { HtmlFragment = headerHtml, MaxHeight = 40 },
        HtmlFooter = new HtmlHeaderFooter { HtmlFragment = footerHtml, MaxHeight = 40 }
    });
    string tempFile = Path.GetTempFileName() + ".pdf";
    chunkPdf.SaveAs(tempFile);
    chunkPdf.Dispose();
    tempFiles.Add(tempFile);
}
// Merge the chunks back into one document.
var finalPdf = new PdfDocument(tempFiles.First());
foreach (var file in tempFiles.Skip(1))
{
    using var part = new PdfDocument(file);
    finalPdf.AppendPdf(part);
}
finalPdf.SaveAs("output.pdf");
finalPdf.Dispose();
// Clean up temp files.
foreach (var file in tempFiles)
    File.Delete(file);
C#

FirstPageNumber jest kluczowy: jest ustawiony na każdą globalną stronę początkową porcji, więc stopka jak Page {page} of {total-pages} pozostaje spójna od pierwszej do ostatniej porcji.

Please note: Bez FirstPageNumber, każda porcja rozpoczyna numerację od strony 1.

Wskazówki dotyczące debugowania

  • Dopasuj rozmiar porcji: wartość powyżej (300) jest regulowana, a moment, kiedy porcjowanie zaczyna przynosić korzyści, zależy od Twojego obciążenia.
  • Uwzględnij scalanie: całkowity czas to renderowanie każdej porcji plus ostateczne scalanie, więc uwzględnij ten dodatkowy przebieg w każdej porównywaniu.
  • Utrzymaj kontrolę nad pamięcią w bardzo dużych zadaniach: okresowe wymuszanie zbierania śmieci podczas scalania oraz dostosowywanie puli przeglądarki za pomocą BrowserPool.MaxIdleTabs i MaxDynamicHFPagesPerBatch może pomóc.
Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Gotowy, aby rozpocząć?

Nuget Downloads 20,389,208Wersja:2026.7właśnie wydany

Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta

Wypróbuj IronPDF za darmo

Gotowy do pracy w 5 minut

DLL PDF dla C#

Pobierz DLL

Pobierz teraz

lub pobierz instalator Windows tutaj.

  1. Pobierz i rozpakuj IronPDF do lokalizacji takiej jak ~/Libs w katalogu Solution
  2. W Eksploratorze rozwiązań programu Visual Studio kliknij prawym przyciskiem myszy opcję Odwołania. Wybierz opcję Przeglądaj, „IronPdf.dll”
Biblioteka C# NuGet dla plików PDF

Zainstaluj za pomocą NuGet

                  Install-Package IronPdf
                
nuget.org/packages/IronPdf/
  1. W Eksploratorze Rozwiązań, kliknij prawym przyciskiem Myszy na Odwołania, Zarządzaj pakietami NuGet
  2. Wybierz opcję Przeglądaj i wyszukaj „IronPdf”
  3. Wybierz pakiet i zainstaluj
Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

bullet_checkedNie wymaga karty kredytowej ani tworzenia konta
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge related to IronPDF Product Demo

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta