2017-08-06 79 views
0

我用這個方法來合併現有的PDF文件,並添加新的PDF文件,它(在內存中沒有物理的) 問題我有合併的PDF 2內存流一個又一個新的文檔,然後將其轉換爲字節數組,我想這些Concat的拖陣列如何連接兩個字節數組

public static byte[] merge(List<String> pdf) 
{ 
    MemoryStream copystream; 
    MemoryStream ms; 
    using (ms = new MemoryStream()) 
    { 
     Document document; 
     using (document = new Document()) 
     { 
      using (PdfWriter wri = PdfWriter.GetInstance(document, ms)) 
      { 
       wri.CloseStream = false; 
       document.Open(); 
       document.SetPageSize(iTextSharp.text.PageSize.A4); // for vertical layout 

       document.Add(new Paragraph("Hello")); 

       document.Close(); 

       copystream = new MemoryStream(); 
       Document doc = new Document(); 
       using (PdfCopy copy = new PdfCopy(doc, copystream)) 
       { 
        copy.CloseStream = false; 
        copy.Open(); 
        doc.Open(); 

        // copy.AddPage(PageSize.A4, 0); 
        for (int i = 0; i < pdf.Count; ++i) 
        { 
         PdfReader reader = new PdfReader(pdf[i]); 
         // loop over the pages in that document 
         int n = reader.NumberOfPages; 
         for (int page = 0; page < n;) 
         { 
          copy.AddPage(copy.GetImportedPage(reader, ++page)); 
         } 
        } 

        copy.Close(); 
        copystream.CopyToAsync(ms); 
        copystream.Close(); 
       } 
      } 
     } 

     byte[] mergedPdf2 = copystream.ToArray(); 
     byte[] mergedPdf3 = ms.ToArray(); 
     byte[] result = new byte[mergedPdf2.Length + mergedPdf3.Length]; 
     mergedPdf2.CopyTo(result, 0); 
     mergedPdf3.CopyTo(result, mergedPdf2.Length); 
     return result; 
    } 
} 
+0

'我想這些Concat的拖arrays'請問您目前的代碼工作?你期望它做什麼,它不這樣做? – mjwills

+0

如果您連接這兩個內存流,結果將不是有效的PDF。你爲什麼不簡單地把'ms'中的pdf加入'copy'? – mkl

回答

3

有一個LINQ方法,byte[],允許串聯。

a.Concat(b).ToArray(); 

您必須先添加using System.Linq;。如果你不想這樣做,你可以創建一個方法,像財產以後:

static byte[] Concat(byte[] a, byte[] b) 
{   
    byte[] output = new byte[a.Length + b.Length]; 
    for (int i = 0; i < a.Length; i++) 
     output[i] = a[i]; 
    for (int j = 0; j < b.Length; j++) 
     output[a.Length+j] = b[j]; 
    return output;   
}