2010-02-09 43 views
18

cách tối ưu để ghép các tập tin PDF với 2 iTextSharp trong C# là gì? Tôi đang sử dụng ASP.NET/.NET3.5.PDF Kết hợp với iTextSharp

+1

Tôi đã sử dụng mã dựa trên bài viết sau với thành công: [Simple NET PDF Merger] (http://www.codeproject.com /KB/files/SimplePdfMerger.aspx) –

Trả lời

27
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

Làm thế nào tôi có thể sử dụng chức năng này? Nói, bạn có một pdf được tạo ra và nối nó vào một tệp pdf vật lý? –

+2

Xin lưu ý rằng câu trả lời này là sai. Nó ném đi tất cả tương tác và nó có thể dẫn đến file cồng kềnh nếu các file PDF khác nhau chứa nguồn giống hệt nhau. Các chỉ câu trả lời đúng là một câu trả lời có sử dụng 'PdfSmartCopy' mà là một lớp có sẵn trong iTextSharp. –

+0

Tôi cũng muốn có một cái nhìn tại câu trả lời này: https://stackoverflow.com/questions/38339151/c-sharp-itextsharp-merge-multiple-pdf-via-byte-array –

1

Câu trả lời cuối cùng hoạt động nếu bạn không muốn xóa tệp gốc. Trong trường hợp của tôi, tôi muốn xóa và khi tôi cố gắng, tôi có ngoại lệ. Giải pháp của tôi là:

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

tôi sao chép mã từ Original Code

+0

Sửa đổi nhỏ để xử lý xoay vòng các trang, v.v., ngoài ra, nó dễ dàng thay thế mã trong dự án của tôi. .. – Ads

Các vấn đề liên quan