Reporting Services: exportação para o formato .pdf via código C#

NetCoders
netcoders
Published in
2 min readDec 7, 2015
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.

[code language=”csharp”]
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);
}
}
}
[/code]

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):

[code language=”csharp”]

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();
}


[/code]

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

--

--