Merging PDFs with ITextSharp

后端 未结 2 1539
轮回少年
轮回少年 2020-12-05 18:58

What is the optimum way to merge 2 PDF files with ITextSharp in C#? I\'m using ASP.NET/.NET3.5.

相关标签:
2条回答
  • 2020-12-05 19:19
    public static void Merge(List<String> InFiles, String OutFile)
        {
            using (FileStream stream = new FileStream(OutFile, FileMode.Create))
            using (Document doc      = new Document())
            using (PdfCopy pdf       = new PdfCopy(doc, stream))
            {
                doc.Open();
    
                PdfReader reader     = null;
                PdfImportedPage page = null;
    
                //fixed typo
                InFiles.ForEach(file =>
                {
                    reader = new PdfReader(file);
    
                    for (int i = 0; i < reader.NumberOfPages; i++)
                    {
                        page = pdf.GetImportedPage(reader, i + 1);
                        pdf.AddPage(page);
                    }
    
                    pdf.FreeReader(reader);
                    reader.Close();
                });
            }
        }
    
    0 讨论(0)
  • 2020-12-05 19:38

    The last answer works if you don't want to delete the original files. In my case, I want to delete and when I tried I got exception. My solution is:

      public static bool MergePDFs(List<String> InFiles, String OutFile)
            {
                bool merged = true;
                try
                {
                    List<PdfReader> readerList = new List<PdfReader>();
                    foreach (string filePath in InFiles)
                    {
                        PdfReader pdfReader = new PdfReader(filePath);
                        readerList.Add(pdfReader);
                    }
    
                    //Define a new output document and its size, type
                    Document document = new Document(PageSize.A4, 0, 0, 0, 0);
                    //Create blank output pdf file and get the stream to write on it.
                    PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(OutFile, FileMode.Create));
                    document.Open();
    
                    foreach (PdfReader reader in readerList)
                    {
                        PdfReader.unethicalreading = true;
                        for (int i = 1; i <= reader.NumberOfPages; i++)
                        {
                            PdfImportedPage page = writer.GetImportedPage(reader, i);
                            document.Add(iTextSharp.text.Image.GetInstance(page));
                        }
                    }
                    document.Close();
                    foreach (PdfReader reader in readerList)
                    {
                        reader.Close();
                    }
    
                }
                catch (Exception ex)
                {
                    merged = false;
                }
    
    
                return merged;
            }
    

    I copied the code from Original Code

    0 讨论(0)
提交回复
热议问题