Quantcast
Channel: SQL Server Reporting Services
Viewing all articles
Browse latest Browse all 1418

How to directly export a Report Viewer to PDF ?

$
0
0

So I have a normal report viewer as below:

<asp:LinkButton ID="btnGerarCertificado" runat="server" OnClick="btnGerarCertificado_Click" CssClass="btn btn-info" Visible="false"><span class="glyphicon glyphicon-eye-open"></span> Ver meu certificado</asp:LinkButton>

And in code behind :

private DataSet GetData(int idInscricao)
        {
            SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["PortalCursosConnectionString"].ToString());
            con.Open();
            SqlCommand cmd = new SqlCommand(@"
                SET LANGUAGE Português
                SELECT
                i.id,
                i.nome,
                i.evento_id,
                e.titulo as evento,
                DAY(e.data) AS dia_realizacao_evento,
                DateName( month , DateAdd(month,MONTH(e.data) , -1 ) ) AS mes_realizacao_evento,
                YEAR(e.data) AS ano_realizacao_evento,
                DAY(GETDATE()) AS dia_atual,
                DateName( month , DateAdd(month,MONTH(GETDATE()) , -1 ) ) AS mes_atual,
                YEAR(GETDATE()) AS ano_atual
                FROM inscricoes i
                INNER JOIN eventos e ON i.evento_id = e.id
                WHERE i.id = " + idInscricao);

            using (con)
            {
                using (SqlDataAdapter da = new SqlDataAdapter())
                {
                    cmd.Connection = con;
                    da.SelectCommand = cmd;
                    DataSet ds = new DataSet();
                    da.Fill(ds);
                    return (ds);
                }
            }
        }

        protected void btnGerarCertificado_Click(object sender, EventArgs e)
        {
            rvCertificados.Visible = true;
            int idInscricao = Convert.ToInt32(ddlInscricoes.SelectedValue); // DRopdownlist com os Eventos
            rvCertificados.ProcessingMode = ProcessingMode.Local;
            rvCertificados.LocalReport.ReportPath = Server.MapPath("~/Relatorios/RelatorioCertificados.rdlc");
            DataSet ds = new DataSet();
            ds = GetData(idInscricao);
            if (ds.Tables[0].Rows.Count > 0)
            {
                ReportDataSource rds = new ReportDataSource("CertificadosRelatorioDataSet", ds.Tables[0]);
                rvCertificados.LocalReport.DataSources.Clear();
                rvCertificados.LocalReport.DataSources.Add(rds);
            }
        }

Now I have to directly download the PDF without generating the report on screen.

I have tried the following code:

<asp:LinkButton ID="btnGerarCertificadoPDF" Text="Gerar PDF" runat="server" OnClick="btnGerarCertificadoPDF_Click" />
protected void btnGerarCertificadoPDF_Click(object sender, EventArgs e)
        {
            rvCertificados.ProcessingMode = ProcessingMode.Local;
            rvCertificados.LocalReport.ReportPath = Server.MapPath("~/Relatorios/RelatorioCertificados.rdlc");

            int idInscricao = Convert.ToInt32(ddlInscricoes.SelectedValue);
            DataSet ds = GetData(idInscricao);
            ReportDataSource datasource = new ReportDataSource("CertificadosRelatorioDataSet", ds.Tables[0]);
            rvCertificados.LocalReport.DataSources.Clear();
            rvCertificados.LocalReport.DataSources.Add(datasource);
            //rvCertificados.AsyncRendering = false;
            //rvCertificados.LocalReport.Refresh();

            //Code For Download Direct PDF

            Warning[] warnings;
            string[] streamIds;
            string mimeType = string.Empty;
            string encoding = string.Empty;
            string extension = string.Empty;

            byte[] bytes = rvCertificados.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);


            // Now that you have all the bytes representing the PDF report, buffer it and send it to the client.
            //Response.Buffer = true;
            //Response.Clear();
            //Response.ContentType = mimeType;
            //Response.AddHeader("content-disposition", "attachment; filename= barcode.pdf");
            //Response.BinaryWrite(bytes); // create the file
            //Response.Flush();

            byte[] file = rvCertificados.LocalReport.Render("PDF", null, out mimeType, out encoding, out extension, out streamIds, out warnings);

            Response.ContentType = "application/pdf";
            Response.AddHeader("content-disposition", "inline;filename=Test.pdf");
            Response.Buffer = true;
            Response.Clear();
            Response.BinaryWrite(file);
            Response.End();
        }




But i got the error:

Uncaught Error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.
    at Function.Error$create [as create] (ScriptResource.axd?d=oBXqCa_O3M6G3VgJWENhH_S1d4gF60IBZmTFW2d2gSfZxevIk8F7E5bXPNFb3AYTI0vmcQ8A74iqeK3fs0EGC6FFe1yKPOM8XBXCIJFaibLkt1rdzXQRl9bRqQXAM1MNzwSUNQJoo_mZFOlx40CEKtxX9OiXTJCeFxBWYAQsnjChIGiebbPocg46cAhQx4_G0&t=ffffffffcc58dd65:237)
    at Sys$WebForms$PageRequestManager$_createPageRequestManagerParserError [as _createPageRequestManagerParserError] (ScriptResource.axd?d=l7OHiyaL9Tzd3pkxh3pWipTXx977JiTkwmjmTXxKTxw8K3idJpn9OD99Ou1e6TeiVz7APl1aTqPDZr_NMcOobkuFyrPrMCdM-SgrDhz84m0x2Mlztop1fJd7ZopeY7l0MZlPy3TeLvjW_LGEA83FE-w42j6wupwl4ktWwP_dFDdgJPAmPgYLTFyTIUleqLQh0&t=ffffffffcc58dd65:665)
    at Sys$WebForms$PageRequestManager$_parseDelta [as _parseDelta] (ScriptResource.axd?d=l7OHiyaL9Tzd3pkxh3pWipTXx977JiTkwmjmTXxKTxw8K3idJpn9OD99Ou1e6TeiVz7APl1aTqPDZr_NMcOobkuFyrPrMCdM-SgrDhz84m0x2Mlztop1fJd7ZopeY7l0MZlPy3TeLvjW_LGEA83FE-w42j6wupwl4ktWwP_dFDdgJPAmPgYLTFyTIUleqLQh0&t=ffffffffcc58dd65:1435)
    at Sys$WebForms$PageRequestManager$_onFormSubmitCompleted [as _onFormSubmitCompleted] (ScriptResource.axd?d=l7OHiyaL9Tzd3pkxh3pWipTXx977JiTkwmjmTXxKTxw8K3idJpn9OD99Ou1e6TeiVz7APl1aTqPDZr_NMcOobkuFyrPrMCdM-SgrDhz84m0x2Mlztop1fJd7ZopeY7l0MZlPy3TeLvjW_LGEA83FE-w42j6wupwl4ktWwP_dFDdgJPAmPgYLTFyTIUleqLQh0&t=ffffffffcc58dd65:1314)
    at Array.<anonymous> (ScriptResource.axd?d=oBXqCa_O3M6G3VgJWENhH_S1d4gF60IBZmTFW2d2gSfZxevIk8F7E5bXPNFb3AYTI0vmcQ8A74iqeK3fs0EGC6FFe1yKPOM8XBXCIJFaibLkt1rdzXQRl9bRqQXAM1MNzwSUNQJoo_mZFOlx40CEKtxX9OiXTJCeFxBWYAQsnjChIGiebbPocg46cAhQx4_G0&t=ffffffffcc58dd65:47)
    at ScriptResource.axd?d=oBXqCa_O3M6G3VgJWENhH_S1d4gF60IBZmTFW2d2gSfZxevIk8F7E5bXPNFb3AYTI0vmcQ8A74iqeK3fs0EGC6FFe1yKPOM8XBXCIJFaibLkt1rdzXQRl9bRqQXAM1MNzwSUNQJoo_mZFOlx40CEKtxX9OiXTJCeFxBWYAQsnjChIGiebbPocg46cAhQx4_G0&t=ffffffffcc58dd65:3484
    at Sys$Net$WebRequest$completed [as completed] (ScriptResource.axd?d=oBXqCa_O3M6G3VgJWENhH_S1d4gF60IBZmTFW2d2gSfZxevIk8F7E5bXPNFb3AYTI0vmcQ8A74iqeK3fs0EGC6FFe1yKPOM8XBXCIJFaibLkt1rdzXQRl9bRqQXAM1MNzwSUNQJoo_mZFOlx40CEKtxX9OiXTJCeFxBWYAQsnjChIGiebbPocg46cAhQx4_G0&t=ffffffffcc58dd65:6376)
    at XMLHttpRequest.Sys$Net$XMLHttpExecutor._onReadyStateChange (ScriptResource.axd?d=oBXqCa_O3M6G3VgJWENhH_S1d4gF60IBZmTFW2d2gSfZxevIk8F7E5bXPNFb3AYTI0vmcQ8A74iqeK3fs0EGC6FFe1yKPOM8XBXCIJFaibLkt1rdzXQRl9bRqQXAM1MNzwSUNQJoo_mZFOlx40CEKtxX9OiXTJCeFxBWYAQsnjChIGiebbPocg46cAhQx4_G0&t=ffffffffcc58dd65:5996)

Can anyone help please ?

Thanks!


Viewing all articles
Browse latest Browse all 1418

Trending Articles