Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400

    [C#] Salvare pdf sul server

    Ciao a tutti.

    Utilizzo questo codice per la creazione di un file pdf alimentato da una GridView.
    Il codice forza il download e chiede il salvataggio del pdf lato client.
    Tutto funziona correttamente.

    Se volessi fare la stessa cosa ma salvare in automatico lo stesso pdf sul server su un percorso predefinito?

    Grazie.

    codice:
        protected void ExportToPDF(object sender, EventArgs e)
        {
            string strQuery = "select * from tbl_abc";
            OdbcCommand Sqlcmd = new OdbcCommand(strQuery);
            DataTable dt = GetData(Sqlcmd);
    
            GridView GridView1 = new GridView();
            GridView1.AllowPaging = false;
            GridView1.DataSource = dt;
            GridView1.DataBind();
    
            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.pdf");
            Response.Cache.SetCacheability(HttpCacheability.NoCache);
            StringWriter sw = new StringWriter();
            HtmlTextWriter hw = new HtmlTextWriter(sw);
            GridView1.RenderControl(hw);
            StringReader sr = new StringReader(sw.ToString());
            Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
            HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
            PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
            pdfDoc.Open();
            htmlparser.Parse(sr);
            pdfDoc.Close();
            Response.Write(pdfDoc);
            Response.End();
        }

  2. #2
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Non ho il codice a portata di mano adesso, ma ho provato e funziona.

    Devi dividere la tua procedura in due procedure. La prima crea lo stream (o filestream o memorystream), e la seconda crea il documento pdf.
    In basic è più o meno così

    codice:
    Protected Sub LinkButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles LinkButton1.Click
    	Using fs As New FileStream("c:\tmp\Chap0101.pdf", FileMode.Create)
    		Dim doc As t.Document = Nothing
    
    		Try
    			doc = New t.Document()
    			p.PdfWriter.GetInstance(doc, fs)
    
    			doc.Open()
    			CreateDoc(doc)
    
    			Response.Redirect("/tmp/Chap0101.pdf")
    
    		Catch ex As Exception
    			l.PrintLn(ex.Message) : Return
    
    		Finally
    			Try
    				If doc IsNot Nothing AndAlso doc.IsOpen Then doc.Close()
    			Catch ex As Exception
    
    			End Try
    
    		End Try
    
    	End Using
    
    End Sub
    Nella procedura CreateDoc usi le tue istruzioni (attento che qui dove scrivo non ho controllato, ma ho provato in uffcio e va)

    string strQuery = "select * from tbl_abc";
    OdbcCommand Sqlcmd = new OdbcCommand(strQuery);
    DataTable dt = GetData(Sqlcmd);

    GridView GridView1 = new GridView();
    GridView1.AllowPaging = false;
    GridView1.DataSource = dt;
    GridView1.DataBind();

    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    GridView1.RenderControl(hw);
    StringReader sr = new StringReader(sw.ToString());

    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
    htmlparser.Parse(sr);


    dove pdfDoc è il documento che passi alla procedura.


    L'altro modo è quello di lavorare con la memoria. Si usa il Memorystream e, alla fine si decide se salvare nel flusso di uscita o in file (fai una ricerca con "memorystream to file"
    Pietro

  3. #3
    Utente di HTML.it L'avatar di wegawhite
    Registrato dal
    Aug 2004
    Messaggi
    1,400
    grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.