2017-09-13 5 views
1

Ich kann das PDF-Dokument, das generiert wird, herunterladen und speichern, aber anstatt herunterladen möchte ich es im Browser öffnen. Ich habe so etwas wie diesestatt herunterladen Öffnen pdf im Browser (mit itext) mvc

MemoryStream os = new MemoryStream(); 
PdfWriter writer = new PdfWriter(os); 
var pdfDocument = new PdfDocument(writer); 

using (var document = new Document(pdfDocument)) 
{ 
    //I am adding different sections here 
} 
var response = new HttpResponseMessage 
{ 
    StatusCode = HttpStatusCode.OK, 
    Content = new ByteArrayContent(os.ToArray()) 
}; 

response.Content.Headers.Add("Content-Type", "application/pdf"); 
response.Headers.Add("Content-disposition", "attachment;filename=" + "testPDF.pdf"); 
return response; 

Die Antwort weiter an dem Controller gesendet wird und dort wird es heruntergeladen werden, aber ich will in einem neuen Browser öffnen. Für mich funktioniert "Content-disposition", "Anhang; Dateiname" nicht.

Mein Rückgabewert wird weiter auf dem Controller übergeben, wo ich in Blob speichern und weiter herunterladen.

public async Task<IActionResult> GenerateDocument(int id) 
    { 
     var result = await _applicationService.GenerateDocument(id); 
     var blobResult = await _applicationService.SaveDocument(id, result.ResponseObject); 

     IActionResult OnSuccess() => 
      new RedirectResult(blobResult.ResponseObject.URI, true); 

     return HandleResult(OnSuccess, blobResult.Status); 
    } 
+0

Ich weiß, es gibt ähnliche Frage, aber die Sache ist für mich die Lösung, die sie erwähnt nicht funktioniert .... Ich habe das auch in meinem Kommentar erwähnt. – Tina

Antwort

2

Sie würden wollen inline für den Inhalt Disposition verwenden, der Browser wissen zu lassen, um es anzuzeigen

//...code removed for brevity 
var buffer = os.ToArray(); 
var contentLength = buffer.Length; 
var statuscode = HttpStatusCode.OK; 
var response = Request.CreateResponse(statuscode); 
response.Content = new ByteArrayContent(buffer); 
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf"); 
response.Content.Headers.ContentLength = contentLength; 
ContentDispositionHeaderValue contentDisposition = null; 
if (ContentDispositionHeaderValue.TryParse("inline; filename=" + "testPDF.pdf", out contentDisposition)) { 
    response.Content.Headers.ContentDisposition = contentDisposition; 
} 
return response; 
+0

Ich habe versucht, den Code zu ersetzen, aber es wurde weiter heruntergeladen. Ich habe nichts dagegen, den Download-Teil, aber ich brauche es im Browser zu öffnen. Ich denke auch, dass es etwas mit Controller zu tun hat. – Tina

Verwandte Themen