2015-10-14 123 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); 
    } 
相关问题