rptsvc-pdf-00

Alternativa bastante utilizada para a criação e o gerenciamento de relatórios em ambientes corporativos, o Reporting Services é uma solução disponibilizada pela Microsoft como um dos serviços que integram o SQL Server. Além deste SGDB, as fontes para a obtenção de informações nesta ferramenta podem ser outras bases relacionais (como Oracle, por exemplo), bancos multidimensionais do Analysis Services ou, até mesmo, fontes de dados como XML e Web Services.

Independente da finalidade a que se prestam análises geradas com esta ferramenta, é relativamente comum a necessidade de se exportar tais resultados para o formato PDF. No caso específico da plataforma .NET, isto pode ser obtido através do uso do tipo ReportViewer (definido no namespace Microsoft.Reporting.WebForms).

Na Listagem 1 está a implementação da classe ReportingServicesHelper. Voltada à geração de conteúdo no padrão PDF a partir de relatórios do Reporting Services, essa estrutura implementa um método chamado “ObterBytesPDF”. Analisando detalhadamente esta operação é possível observar:

  • Um parâmetro de entrada do tipo ReportViewer, o qual deverá estar configurado de forma a apontar para um relatório. O exemplo aqui abordado está adotando como premissa que tal elemento foi previamente publicado em um servidor com o Reporting Services já habilitado;
  • A variável “deviceInfo” foi preenchida com configurações para a exportação no formato PDF. Informações adicionais a respeito destas definições podem ser encontradas em https://technet.microsoft.com/en-us/library/aa179622%28v=sql.80%29.aspx;
  • O método Render será acionado, por meio da propriedade ServerReport da referência do tipo ReportViewer. Esta ação produzirá um array de bytes, o qual corresponde a um arquivo PDF contendo o resultado do processamento do relatório vinculado a rptViewer.
using Microsoft.Reporting.WebForms; 

namespace Aon.Health.Front
{
    public static class ReportingServicesHelper
    {
        public static byte[] ObterBytesPDF(ReportViewer rptViewer)
        {
            Warning[] warnings;
            string[] streamids;
            string mimeType;
            string encoding;
            string extension;
            string deviceInfo = @"<DeviceInfo>
                                    <SimplePageHeaders>True</SimplePageHeaders>
                                    <ColorDepth>32</ColorDepth>
                                    <HumanReadablePDF>true</HumanReadablePDF>
                                   <OutputFormat>JPEG</OutputFormat>
                                  </DeviceInfo>";

            return rptViewer.ServerReport.Render(
                "pdf", deviceInfo,
                out mimeType, out encoding, out extension,
                out streamids, out warnings);
        }
    }
}

Listagem 1: Classe ReportingServicesHelper

O retorno de uma chamada ao método ObterBytesPDF pode então ser utilizado na criação de um novo arquivo .pdf, como indicado na Listagem 2 (através das classes File e FileStream, ambas declaradas no namespace System.IO):

...

string nomeArquivoPDF = @"C:\Temp\teste.pdf";
byte[] bytes = ReportingServicesHelper.ObterBytesPDF(rptViewer);

using (FileStream stream = File.Create(nomeArquivoPDF, bytes.Length))
{
    stream.Write(bytes, 0, bytes.Length);
    stream.Close();
}

...

Listagem 2: Exemplo de utilização da classe ReportingServicesHelper

OBSERVAÇÃO: a solução descrita neste artigo tomou como base a versão 2014 do SQL Server.

Concluo assim este post, ressaltando que maiores esclarecimentos sobre a exportação para outros formatos podem ser obtidos nos links aqui fornecidos.

Espero que este conteúdo possa ter sido útil.

Até uma próxima oportunidade!

Referências

Reporting Services (SSRS)
https://msdn.microsoft.com/en-us/library/ms159106%28v=sql.120%29.aspx

ReportViewer Class
https://msdn.microsoft.com/en-us/library/microsoft.reporting.webforms.reportviewer.aspx

Renato Groffe

Atua como consultor em atividades voltadas ao desenvolvimento de softwares há mais de 13 anos. Bacharel em Sistemas de Informação, com especialização em Engenharia de Software. Microsoft Certified Technology Specialist (Web, WCF, Distributed Applications, ADO.NET, Windows Forms), Microsoft Specialist (HTML5 with JavaScript and CSS3, Developing ASP.NET MVC 4 Web Applications), Oracle Certified Associate (PL/SQL), Sun Certified (SCJP, SCWCD), ITIL Foundation V2, Cobit 4.1 Foundation.

Facebook Google+ 

Comentários

comentarios