DEV Community

IronSoftware
IronSoftware

Posted on

How to Add, Copy, and Delete PDF Pages in C# (.NET Guide)

Our invoice system generated 5-page PDFs. Page 3 was always blank. Clients complained about unnecessary printing costs. Manual editing wasn't scalable.

PDF page manipulation solved this. Here's how to add, copy, and delete pages programmatically.

How Do I Delete Pages from a PDF?

Use RemovePage():

using [IronPdf](https://ironpdf.com/);
// Install via NuGet: Install-Package IronPdf

var pdf = PdfDocument.FromFile("document.pdf");

pdf.RemovePage(2); // Remove page 3 (zero-indexed)

pdf.SaveAs("cleaned.pdf");
Enter fullscreen mode Exit fullscreen mode

Page 3 is gone. The PDF renumbers automatically.

Why Manipulate PDF Pages?

Remove blanks: Eliminate unnecessary pages from generated PDFs
Reorder content: Rearrange pages into logical sequence
Extract sections: Pull specific pages into new documents
Combine documents: Merge multiple PDFs into one file
Duplicate templates: Copy standard pages (headers, disclaimers)

I use this daily to clean up automated reports before distribution.

How Do I Delete Multiple Pages?

Use RemovePages() with a range:

var pdf = PdfDocument.FromFile("report.pdf");

pdf.RemovePages(new[] { 0, 2, 4 }); // Remove pages 1, 3, and 5

pdf.SaveAs("filtered.pdf");
Enter fullscreen mode Exit fullscreen mode

Or use a loop for specific criteria:

for (int i = pdf.PageCount - 1; i >= 0; i--)
{
    // Remove blank or unwanted pages
    // (Note: actual blank detection requires text extraction)
    if (ShouldRemovePage(i))
    {
        pdf.RemovePage(i);
    }
}
Enter fullscreen mode Exit fullscreen mode

Loop backwards to avoid index shifting issues.

How Do I Copy Pages Within a PDF?

Use CopyPage():

var pdf = PdfDocument.FromFile("template.pdf");

var copiedPage = pdf.CopyPage(0); // Copy first page

pdf.AddPdfPage(copiedPage); // Add copy to end

pdf.SaveAs("duplicated.pdf");
Enter fullscreen mode Exit fullscreen mode

Useful for repeating disclaimers or standard sections.

Can I Copy Pages Between PDFs?

Yes, extract and insert:

var source = PdfDocument.FromFile("source.pdf");
var target = PdfDocument.FromFile("target.pdf");

var pageToCopy = source.CopyPage(2); // Copy page 3 from source

// Insert into target PDF
var merged = PdfDocument.Merge(target, PdfDocument.FromPage(pageToCopy));

merged.SaveAs("combined.pdf");
Enter fullscreen mode Exit fullscreen mode

Or use InsertPdf() for more control:

target.InsertPdf(source, 3); // Insert entire source PDF at page 3

target.SaveAs("inserted.pdf");
Enter fullscreen mode Exit fullscreen mode

How Do I Merge Multiple PDFs?

Use Merge():

var pdf1 = PdfDocument.FromFile("part1.pdf");
var pdf2 = PdfDocument.FromFile("part2.pdf");
var pdf3 = PdfDocument.FromFile("part3.pdf");

var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);

merged.SaveAs("complete.pdf");
Enter fullscreen mode Exit fullscreen mode

All pages combine into one document. Page order preserved.

Can I Extract Specific Pages?

Yes, copy to a new PDF:

var source = PdfDocument.FromFile("large.pdf");

// Extract pages 5-10
var extracted = PdfDocument.FromBinaryData(new byte[0]); // Empty PDF

for (int i = 4; i < 10; i++)
{
    var page = source.CopyPage(i);
    extracted = PdfDocument.Merge(extracted, PdfDocument.FromPage(page));
}

extracted.SaveAs("extracted-pages.pdf");
Enter fullscreen mode Exit fullscreen mode

Or use CopyPages() for ranges:

var pageRange = source.CopyPages(4, 10); // Pages 5-10

var extracted = PdfDocument.FromPages(pageRange);
extracted.SaveAs("extracted.pdf");
Enter fullscreen mode Exit fullscreen mode

How Do I Reorder Pages?

Copy in desired order:

var original = PdfDocument.FromFile("document.pdf");

var reordered = PdfDocument.Merge(
    PdfDocument.FromPage(original.CopyPage(2)), // Page 3 first
    PdfDocument.FromPage(original.CopyPage(0)), // Page 1 second
    PdfDocument.FromPage(original.CopyPage(1))  // Page 2 third
);

reordered.SaveAs("reordered.pdf");
Enter fullscreen mode Exit fullscreen mode

Useful when generated PDFs have incorrect page sequence.

Can I Add Blank Pages?

Yes, insert an empty page:

var pdf = PdfDocument.FromFile("document.pdf");

var blankPage = new ChromePdfRenderer().RenderHtmlAsPdf("<html><body></body></html>");

pdf.InsertPdf(blankPage, 5); // Insert blank page at position 5

pdf.SaveAs("with-blank.pdf");
Enter fullscreen mode Exit fullscreen mode

Or generate with specific content:

var spacer = new ChromePdfRenderer().RenderHtmlAsPdf("<h1>Section Break</h1>");

pdf.InsertPdf(spacer, 10);
Enter fullscreen mode Exit fullscreen mode

How Do I Remove the First or Last Page?

var pdf = PdfDocument.FromFile("document.pdf");

// Remove first page
pdf.RemovePage(0);

// Remove last page
pdf.RemovePage(pdf.PageCount - 1);

pdf.SaveAs("trimmed.pdf");
Enter fullscreen mode Exit fullscreen mode

Common when cover pages or appendices are auto-generated but not needed.

What Happens to Page Numbers?

Page indices renumber automatically after deletion. If you remove page 2, the old page 3 becomes the new page 2.

Important: Always work backwards when deleting multiple pages in a loop:

for (int i = pdf.PageCount - 1; i >= 0; i--)
{
    if (ShouldDelete(i))
    {
        pdf.RemovePage(i);
    }
}
Enter fullscreen mode Exit fullscreen mode

Forward loops cause index shifting bugs.

Can I Split a PDF into Multiple Files?

Yes, extract each page:

var source = PdfDocument.FromFile("multi-page.pdf");

for (int i = 0; i < source.PageCount; i++)
{
    var singlePage = PdfDocument.FromPage(source.CopyPage(i));
    singlePage.SaveAs($"page-{i + 1}.pdf");
}
Enter fullscreen mode Exit fullscreen mode

Or split by page range:

// Pages 1-5 to file1
var part1 = PdfDocument.FromPages(source.CopyPages(0, 5));
part1.SaveAs("part1.pdf");

// Pages 6-10 to file2
var part2 = PdfDocument.FromPages(source.CopyPages(5, 10));
part2.SaveAs("part2.pdf");
Enter fullscreen mode Exit fullscreen mode

How Do I Insert Pages at Specific Positions?

Use InsertPdf():

var main = PdfDocument.FromFile("main.pdf");
var insert = PdfDocument.FromFile("insert.pdf");

main.InsertPdf(insert, 3); // Insert at page 3 (zero-indexed)

main.SaveAs("combined.pdf");
Enter fullscreen mode Exit fullscreen mode

Existing pages shift to accommodate new content.

Can I Batch Process Multiple PDFs?

Yes, loop through files:

var files = Directory.GetFiles("input", "*.pdf");

foreach (var file in files)
{
    var pdf = PdfDocument.FromFile(file);

    // Remove first 2 pages from each
    pdf.RemovePage(0);
    pdf.RemovePage(0);

    var outputPath = Path.Combine("output", Path.GetFileName(file));
    pdf.SaveAs(outputPath);
}
Enter fullscreen mode Exit fullscreen mode

Processes all PDFs in a directory.

What's the Performance Impact?

Page removal: Very fast (~10-50ms per page)
Page copying: Moderate (depends on page complexity)
Merging large PDFs: Slower for documents >1000 pages

For high-volume operations, process files in parallel:

Parallel.ForEach(files, file =>
{
    var pdf = PdfDocument.FromFile(file);
    // Process...
});
Enter fullscreen mode Exit fullscreen mode

How Do I Handle Page Metadata?

Page manipulation preserves metadata (bookmarks, annotations, form fields) on retained pages. Deleted pages lose their metadata.

To preserve bookmarks after reordering, you may need to manually update bookmark page references.

Can I Copy Pages from Password-Protected PDFs?

Yes, open with password first:

var protected = PdfDocument.FromFile("protected.pdf", "password123");

var page = protected.CopyPage(0);

var newPdf = PdfDocument.FromPage(page);
newPdf.SaveAs("extracted.pdf");
Enter fullscreen mode Exit fullscreen mode

The extracted page is not password-protected unless you apply new security settings.


Written by Jacob Mellor, CTO at Iron Software. Jacob created IronPDF and leads a team of 50+ engineers building .NET document processing libraries._

Top comments (0)