Merge PDFs iTextSharp
.net, asp.net, c#, itext, pdf
Solution
Page numbers for GetImportedPage are 1-based. Thus:
for (int X = 1; X < Pages + 1; X++)
{
Page = writer.GetImportedPage(reader, X);
writer.AddPage(Page);
}
Problem
I looked at a few examples online and came up with this code to merge pdfs using iTextSharp. But I am getting an error :. {"The document has no pages."} It fails at Page = writer.GetImportedPage(reader, X); Here is stack trace : ``` at iTextSharp.text.pdf.PdfPages.WritePageTree() at iTextSharp.text.pdf.PdfWriter.Close() at iTextSharp.text.pdf.PdfCopy.Close() at iTextSharp.text.Document.Close() ``` It has 3 pages when I debugged it. What is wrong here?? Here is my code ``` public static MemoryStream MergePdfs(List<MemoryStream> pdfStreams) { //Create output stream MemoryStream OutStream = new MemoryStream(); Document Document = null; try { //Create Main reader PdfReader Reader = new PdfReader(pdfStreams.ElementAt(0)); //Create Main Doc Document = new Document(Reader.GetPageSizeWithRotation(1)); //Create main writer PdfCopy Writer = new PdfCopy(Document, OutStream); //Open document for writing Document.Open(); //Add pages AddPages(Reader.NumberOfPages, Reader, ref Writer); //For each additional pdf after first combine them into main document foreach (MemoryStream PdfStream in pdfStreams.Skip(1)) { PdfReader Reader2 = new PdfReader(PdfStream); // Add content AddPages(Reader2.NumberOfPages, Reader2, ref Writer); } } finally { // Step 5: Close the document if (Document != null) Document.Close(); foreach (var Strm in pdfStreams) { try { if (null != Strm) Strm.Dispose(); } catch { } } } return OutStream; } private static void AddPages(int Pages, PdfReader reader, ref PdfCopy writer) { PdfImportedPage Page = null; for (int X = 0; X < Pages; X++) { Page = writer.GetImportedPage(reader, X); writer.AddPage(Page); } if (reader.AcroForm != null) writer.CopyAcroForm(reader); } ```