2012-04-07 46 views
0

itextsharpを使用して新しいpdfを作成せずに別のpdfファイルから1つのpdfファイルにページを追加する方法。私はメタデータを1つのpdfに添付しているので、他のpdfページだけを追加したいので、最初のpdfメタデータをそのまま残す必要があります。あなたは2つのpdfファイル持っていると仮定しitextsharpを使用して他のpdfファイルにpdfを追加する方法

よろしく Himvj

答えて

2

file1.pdffile2.pdfあなたが(その内容を交換することにより)file1.pdfに結果のPDFファイルを連結して保存したいあなたは次のことを試みることができる:

using (var output = new MemoryStream()) 
{ 
    var document = new Document(); 
    var writer = new PdfCopy(document, output); 
    document.Open(); 
    foreach (var file in new[] { "file1.pdf", "file2.pdf" }) 
    { 
     var reader = new PdfReader(file); 
     int n = reader.NumberOfPages; 
     PdfImportedPage page; 
     for (int p = 1; p <= n; p++) 
     { 
      page = writer.GetImportedPage(reader, p); 
      writer.AddPage(page); 
     } 
    } 
    document.Close(); 
    File.WriteAllBytes("file1.pdf", output.ToArray()); 
} 
+0

こんにちはダーリンのおかげ彼は返信しますが、その場合、file1.pdfに添付された私のメタデータは削除されます。私はちょうど新しいファイルを作成してfile1にfile2ページを追加したいと思います。 file1メタデータが残るようにします。 – himvj

+0

@himvj、おそらく、あなたはoverwrtieの前にfile1.pdfからメタデータを抽出し、その後にデータを書き直すことができます。 – char1es

0

あなたはそれが、メタデータと文書全体を追加し、これを試すことができ

トンのため
public static void MergeFiles(string destinationFile, string[] sourceFiles) 
      { 
       try 
       { 

        //1: Create the MemoryStream for the destination document. 
        using (MemoryStream ms = new MemoryStream()) 
        { 
         //2: Create the PdfCopyFields object. 
         PdfCopyFields copy = new PdfCopyFields(ms); 
         // - Set the security and other settings for the destination file. 
         //copy.Writer.SetEncryption(PdfWriter.STRENGTH128BITS, null, "1234", PdfWriter.AllowPrinting | PdfWriter.AllowCopy | PdfWriter.AllowFillIn); 
         copy.Writer.ViewerPreferences = PdfWriter.PageModeUseOutlines; 
         // - Create an arraylist to hold bookmarks for later use. 
         ArrayList outlines = new ArrayList(); 
         int pageOffset = 0; 
         int f = 0; 
         //3: Import the documents specified in args[1], args[2], etc... 
         while (f < sourceFiles.Length) 
         { 
          // Grab the file from args[] and open it with PdfReader. 
          string file = sourceFiles[f]; 
          PdfReader reader = new PdfReader(file); 

          // Import the pages from the current file. 
          copy.AddDocument(reader); 
          // Create an ArrayList of bookmarks in the file being imported. 
          //  ArrayList bookmarkLst = SimpleBookmark.GetBookmark(reader); 
          // Shift the pages to accomidate any pages that were imported before the current document. 
          //  SimpleBookmark.ShiftPageNumbers(bookmarkLst, pageOffset, null); 
          // Fill the outlines ArrayList with each bookmark as a HashTable. 
          //  foreach (Hashtable ht in bookmarkLst) 
          //  { 
          //   outlines.Add(ht); 
          //  } 
          // Set the page offset to the last page imported. 
          //copy.Writer.SetPageSize(rec); 
          pageOffset += reader.NumberOfPages; 
          f++; 
         } 
         //4: Put the outlines from all documents under a new "Root" outline and 
         // set them for destination document 
         // copy.Writer.Outlines = GetBookmarks("Root", ((Hashtable)outlines[0])["Page"], outlines); 
         //5: Close the PdfCopyFields object. 
         copy.Close(); 
         //6: Save the MemoryStream to a file. 
         MemoryStreamToFile(ms, destinationFile); 


        } 
       } 
       catch (System.Exception e) 
       { 
        System.Console.Error.WriteLine(e.Message); 
        System.Console.Error.WriteLine(e.StackTrace); 
        System.Console.ReadLine(); 
       } 
      } 
      public static void MemoryStreamToFile(MemoryStream MS, string FileName) 
      { 
       using (FileStream fs = new FileStream(@FileName, FileMode.Create)) 
       { 
        byte[] data = MS.ToArray(); 
        fs.Write(data, 0, data.Length); 
        fs.Close(); 
       } 
      } 
+0

こんにちはHalaさん、file1.pdfのページを上書きしてfile2.pdfのページをコピーしています。file2.pdfのfile1.pdfにページを追加します。 – himvj

関連する問題