2017-09-18 166 views
0

我已經生成了兩個PDF字節數組,並將這兩個數組合併成一個字節數組。現在,當我通過中的ActionMethod呈現PDF時,它將生成PDF僅用於在Combine()方法中傳遞的第二個byte[]。 例如: 1)第二個字節[]合併PDF時覆蓋第一個字節[]

public ActionResult ShowPdf(string id1, string id2) 
     { 
      byte[] pdfBytes1 = CreatePdf1(id1); 
      byte[] pdfBytes2 = CreatePdf2(id2); 
      byte[] combinedPdfData = Combine(pdfBytes1, pdfBytes2); 
      return File(combinedPdfData, "application/pdf"); 
     } 

如果我寫上面的代碼,它僅與pdfBytes2陣列數據和pdfBytes1陣列數據重寫生成PDF。

2)現在,如果改變順序和寫入:

public ActionResult ShowPdf(string id1, string id2) 
     { 
      byte[] pdfBytes1 = CreatePdf1(id1); 
      byte[] pdfBytes2 = CreatePdf2(id2); 
      byte[] combinedPdfData = Combine(pdfBytes2, pdfBytes1); 
      return File(combinedPdfData, "application/pdf"); 
     } 

此方法僅與pdfBytes1陣列數據生成PDF。

我的聯合()方法的代碼是:

public static byte[] Combine(byte[] first, byte[] second) 
     { 
      byte[] ret = new byte[first.Length + second.Length]; 
      Buffer.BlockCopy(first, 0, ret, 0, first.Length); 
      Buffer.BlockCopy(second, 0, ret, first.Length, second.Length); 
      return ret; 
     } 

在調試我可以看到,combinedPdfData數組包含總字節數即pdfBytes1[] + pdfBytes2[]但打印時僅打印一個數組的數據。請讓我知道我做錯了什麼。

+0

正如您已經標記了您的問題[標籤:itext]:您可以使用iText(Sharp)來*合併* pdf文件。 – mkl

回答

2

您不能只連接2個PDF字節數組,並期望結果是有效的PDF文檔。您需要一個庫來創建一個新的PDF(output),並將兩個原始PDF合併成一個新的有效PDF。

在iText的5(老版的iText的),代碼應該是這樣的:

Document doc = new Document(); 
PdfCopy copy = new PdfCopy(document, output); 
document.Open(); 
PdfReader reader1 = new PdfReader(pdfBytes1); 
copy.AddDocument(reader1); 
PdfReader reader2 = new PdfReader(pdfBytes2); 
copy.AddDocument(reader2); 
reader1.Close(); 
reader2.Close(); 
document.Close(); 

在iText的7(iText的新版本;推薦),代碼是這樣的:

PdfDocument pdf = new PdfDocument(new PdfWriter(dest)); 
PdfMerger merger = new PdfMerger(pdf); 
PdfDocument firstSourcePdf = new PdfDocument(new PdfReader(SRC1)); 
merger.Merge(firstSourcePdf, 1, firstSourcePdf.GetNumberOfPages()); 
//Add pages from the second pdf document 
PdfDocument secondSourcePdf = new PdfDocument(new PdfReader(SRC2)); 
merger.Merge(secondSourcePdf, 1, secondSourcePdf.GetNumberOfPages()); 
firstSourcePdf.Close(); 
secondSourcePdf.Close(); 
pdf.Close(); 
+0

非常感謝。它確實工作:-) – user1547554

2

你錯了,認爲你可以連接兩個字節的連接兩個pdf文件。

您將需要使用pdf創作庫來讀取兩個舊文檔並將它們合併爲一個新文檔。

相關問題