2010-03-03 19 views
5

Es ist möglich, mit iTextSharp ein PDF-Dokument im Speicher zu erstellen, das dem Benutzer die Möglichkeit zum Öffnen oder Speichern bietet. Wenn es geöffnet wird, wird es in einem Browserfenster geöffnet.Öffnen eines PDF-Dokuments aus dem Speicher

Im Moment habe ich nur ich es auf die Festplatte speichern.

EDIT:

ok ich habe es sussed. Ich musste am Ende die Datei in einen Ordner schreiben, aber es ist nur temporär, da es jedes Mal überschrieben wird. Hier ist die Lösung für das, was es wert ist:

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

Erwägen Sie, Ihre Lösung als Antwort zu veröffentlichen und sie als akzeptiert zu markieren. – dckuehn

Antwort

0

Sie müssen es in einen temporären Ordner speichern, dann Process.Start auf die Datei aufrufen.

0

Zum Öffnen/Anzeigen der PDF-Datei können Sie nach dem Speichern der Datei in einem temporären Ordner die acrobat activex-Komponente verwenden. Ich konnte keine freie Kontrolle finden, PDFs in einer früheren Forschung zu zeigen.

3

Sie können die PDF-Datei in einen Speicherstrom speichern und so in den Browser schreiben.

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

Ich war auf der Suche nach so etwas, aber ich denke, etwas fehlt noch. Muss ich den Inhalt/Typ – Dkong

+0

einstellen Ja, Sie können sehr gut, siehe die Bearbeitung. –

Verwandte Themen