2010-03-03 21 views
5

Es posible crear un documento PDF en la memoria con iTextSharp que le da al usuario la opción de "abrir" o "guardar" y, si se abre, se abre en una ventana del navegador.abriendo documento PDF desde la memoria

Por el momento, el único que tengo es guardarlo en el disco.

EDIT:

bien Tengo sussed. Terminé teniendo que escribir el archivo en una carpeta, pero solo es temporal, ya que se sobrescribe todo el tiempo. Aquí está la solución para lo que vale la pena:

private void GeneratePDF() { 

    var doc1 = new Document(); 
    string path = Server.MapPath("~/pdfs/"); 
    string filepath = path + "Doc1.pdf"; 
    PdfWriter.GetInstance(doc1, new FileStream(filepath, FileMode.Create)); 

    doc1.Open(); 
    doc1.Add(new Paragraph("A new Document"));   
    doc1.Add(new Paragraph(DateTime.Now.ToString())); 

    doc1.Close(); 

    Response.Buffer = false; //transmitfile self buffers 
    Response.Clear(); 
    Response.ClearContent(); 
    Response.ClearHeaders(); 
    Response.ContentType = "application/pdf"; 
    Response.AddHeader("Content-Disposition", "attachment; filename=myPDF.pdf"); 
    Response.TransmitFile(filepath); 
    Response.End(); 

}

+0

Considera publicar tu solución como respuesta y marcarla como aceptada. – dckuehn

Respuesta

0

Tendrá que guardarlo en una carpeta temporal, a continuación, llamar Process.Start en el archivo.

0

Para abrir/mostrar el PDF, puede usar el componente acrobat activex después de guardar el archivo en una carpeta temporal. No pude encontrar un control libre para mostrar archivos PDF en una investigación anterior.

3

Puede guardar el PDF en un flujo de memoria y escribirlo en el navegador de esta manera.

protected void Page_Load(object sender, EventArgs e) 
{ 
    MemoryStream ms; 

    using (ms = new MemoryStream()) 
    { 
     PdfWriter writer = PdfWriter.GetInstance(myPdfDoc, ms); 

     Response.ContentType = "application/pdf"; 
     Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); 
     Response.OutputStream.Flush(); 
     Response.OutputStream.Close(); 

    } 
} 
+0

Estaba buscando algo así, pero creo que todavía falta algo. ¿Tengo que configurar el contenido/tipo – Dkong

+0

Sí, muy bien podría, ver la edición. –

Cuestiones relacionadas