2010-03-03 4 views
5

E 'possibile creare un documento PDF in memoria con iTextSharp che offre all'utente la scelta di "aprire" o "salva" ?, e se si apre si apre in una finestra del browser.apertura documento PDF dalla memoria

Al momento l'unico che ho salvato su disco.

EDIT:

ok ho capito sussed. Ho finito per dover scrivere il file in una cartella, ma è solo temporaneo come viene sovrascritto ogni volta. Ecco la soluzione per quello che vale:

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

Considerare di pubblicare la soluzione come risposta e contrassegnarla come accettata. – dckuehn

risposta

0

Avrete bisogno di salvarlo in una cartella temporanea, quindi chiamare Process.Start sul file.

0

Per aprire/mostrare il PDF è possibile utilizzare il componente activex di acrobat dopo aver salvato il file in una cartella temporanea. Non sono riuscito a trovare un controllo gratuito per mostrare i PDF in una ricerca precedente.

3

È possibile salvare il PDF in un memorizzato e scriverlo nel browser in questo modo.

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

Stavo cercando qualcosa di simile, ma penso che manchi ancora qualcosa. Devo impostare il contenuto/tipo – Dkong

+0

Sì, si potrebbe benissimo, vedere la modifica. –