2015-10-14 80 views
1

是否可以合併pdf文件而不保存到磁盤?生成PDF而不保存到磁盤,然後將其顯示給瀏覽器

我有一個生成的pdf(通過itextsharp)和一個物理pdf文件。這兩個應該顯示在瀏覽器合併。

我現在擁有的是,(僞代碼)

public ActionResult Index() 
{ 
    // Generate dyanamic pdf first 
    var pdf = GeneratePdf(); 
    // Then save it to disk for retrieval later 
    SaveToDisc(pdf); 
    // Retrieve the static pdf 
    var staticPdf = GetStaticPdf(); 
    // Retrieve the generated pdf that was made earlier 
    var generatedPdf = GetGeneratedPdf("someGeneratedFile.pdf"); 
    // This creates the merged pdf 
    MergePdf(new List<string> { generatedPdf, staticPdf }, "mergedPdf.pdf"); 

    // Now retrieve the merged pdf and show it to the browser 
    var mergedPdf = GetMergedPdf("mergedPdf.pdf"); 

    return new FileStreamResult(mergedFile, "application/pdf"); 
} 

這工作,但我只是想知道如果有可能,只是合併的PDF文檔,然後顯示在瀏覽器不保存任何東西在光盤上?

任何幫助將不勝感激。由於

+0

我們一直在我的店鋪推出非磁盤PDF格式的http響應。只需將原始二進制文件指定爲字節數組,清除響應,設置標題(尤其是MIME類型)並寫入。 –

+0

@PaulKienitz酷,想你可以告訴我它的代碼?爲參考 –

回答

2

你可以嘗試使用PdfWriterMemoryStream這樣的:

using (MemoryStream ms = new MemoryStream()) 
{ 
    Document doc = new Document(PageSize.A4, 60, 60, 10, 10); 
    PdfWriter pw = PdfWriter.GetInstance(doc, ms); 
    //your code to write something to the pdf 
    return ms.ToArray(); 
} 

您也可以參考:Creating a PDF from a RDLC Report in the Background

另外:如果data是在內存中的PDF,比你需要做的data.CopyTo(base.Response.OutputStream);

+0

所以我可以做這樣的事情?將物理文件投射到MemoryStream然後將其附加到生成的一個? –

+0

@BoyPasmo: - 你可以試試看! –

0

試試這個

string path = Server.MapPath("Yourpdf.pdf"); 
    WebClient client = new WebClient(); 
    Byte[] buffer = client.DownloadData(path); 

    if (buffer != null) 
    { 
     Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-length", buffer.Length.ToString()); 
     Response.BinaryWrite(buffer); 
    } 
相關問題