代码之家  ›  专栏  ›  技术社区  ›  LordHits

将PDF与ITextSharp合并

  •  18
  • LordHits  · 技术社区  · 15 年前

    在C_中,将两个PDF文件与ITextSharp合并的最佳方法是什么?我使用的是ASP.NET/.NET 3.5。

    2 回复  |  直到 7 年前
        1
  •  27
  •   Flapper    11 年前
    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();
                });
            }
        }
    
        2
  •  1
  •   Pafcosta    8 年前

    如果不想删除原始文件,则最后一个答案有效。在我的情况下,我想删除,当我尝试时,我得到了例外。我的解决方案是:

      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;
            }
    

    我把代码从 Original Code