2015-10-14 2 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 cool, Думаете, вы можете показать мне его в коде? для ссылок –

ответ

2

Вы можете попробовать использовать PdfWriter класс и MemoryStream вроде этого:

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, а затем добавить его в Generated One? –

+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); 
    } 
Смежные вопросы