2012-08-23 8 views
14

Estoy usando iTextSharp para imprimir un panel en PDF al hacer clic en el botón. Después de hacer clic en el botón, el PDF se está descargando a la computadora del cliente. En lugar de esto, necesito que el PDF se abra en un navegador en lugar de descargarlo. Desde el navegador, el usuario podrá descargar el PDF a su PC.Abrir un PDF en el navegador en lugar de descargarlo

estoy usando el siguiente código:

Response.ContentType = "application/pdf"; 
Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf"); 
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
StringWriter sw = new StringWriter(); 
HtmlTextWriter hw = new HtmlTextWriter(sw); 
pnl_print.RenderControl(hw); 

StringReader sr = new StringReader(sw.ToString()); 
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f); 
HTMLWorker htmlparser = new HTMLWorker(pdfDoc); 
PdfWriter.GetInstance(pdfDoc, Response.OutputStream); 
pdfDoc.Open(); 
htmlparser.Parse(sr); 
pdfDoc.Close(); 
Response.Write(pdfDoc); 
Response.End(); 

sr.Close(); 
hw.Close(); 
sw.Close(); 

Respuesta

20

Cambiar el content-disposition-inline en lugar de attachment.

La segunda línea de su fragmento sería entonces

Response.AddHeader("content-disposition", "inline;filename=" + filename + ".pdf"); 

Ver Content-Disposition:What are the differences between "inline" and "attachment"? para más detalles.

+0

Gracias Me ayudó. Puedes ayudarme en esto. [apply-styles-in-pdf-gridview-using-itextsharp] (http://stackoverflow.com/questions/12085337/applying-styles-in-pdf-gridview-using-itextsharp) –

+1

@KrishnaThota Me encantaría, pero desafortunadamente no tengo la respuesta para eso. –

+0

bien, muchas gracias –

3

Pruebe este código:

Acción:

Response.AddHeader("content-disposition", "attachment;filename=" + filename + ".pdf"); 

Para abrir en una nueva pestaña/ventana:

@Html.ActionLink("view pdf", "getpdf", "somecontroller", null, 
        new { target = "_blank" }) 

O

<a href="GeneratePdf.ashx?somekey=10" target="_blank"> 
+0

¿No debería el 'content-dispositon' estar' en línea'? –

+0

¿Dónde debería escribir el @Html? ¿cosa? –

+0

estoy usando asp: Botón de imagen no '' etiqueta –

0

usted debe buscar en el " Content-Disposition "header; por ejemplo establecer "Content-Disposition" en "attachment; filename = FileName.pdf" le indicará al usuario (normalmente) con un diálogo "Guardar como: FileName.pdf", en lugar de abrirlo. Esto, sin embargo, debe provenir de la solicitud que está realizando la descarga, por lo que no puede hacer esto durante un redireccionamiento. Sin embargo, ASP.NET ofrece Response.TransmitFile para este propósito. Por ejemplo (asumiendo que no está utilizando MVC, que tiene otras opciones preferidas):

Response.Clear(); 
Response.ContentType = "application/pdf"; 
Response.AppendHeader("Content-Disposition", "attachment; filename=FileName.pdf"); 
Response.TransmitFile(Server.MapPath("~/folder/Sample.pdf")); 
Response.End(); 

Si usted es tratar de abrir a continuación el archivo en la corriente Convertir apicontroller a bytesarray y luego llenar el contenido

  HttpResponseMessage result = null; 
      result = Request.CreateResponse(HttpStatusCode.OK); 
      FileStream stream = File.OpenRead(path); 
      byte[] fileBytes = new byte[stream.Length]; 
      stream.Read(fileBytes, 0, fileBytes.Length); 
      stream.Close();   
      result.Content = new ByteArrayContent(fileBytes); 
      result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment"); 
      result.Content.Headers.ContentDisposition.FileName = "FileName.pdf";    

Creo que te ayudará ...

Cuestiones relacionadas