Gerar um relatório ActiveReports como um arquivo PDF

Página atualizada :
Data de criação de página :

Ambiente operacional

Windows
  • Windows 10 Pro 22H2
Estúdio Visual
  • Visual Studio 2022 Community Edition
ActiveReports para .NET
  • ActiveReports para .NET 16.0J

Pré-requisitos

Windows
  • Windows 8.1
  • Janelas 10
  • Janelas 11
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022
Estúdio Visual
  • Visual Studio 2017
  • Visual Studio 2019
  • Visual Studio 2022
.NET Framework
  • NET Framework 4.6.2
  • NET Framework 4.7
  • NET Framework 4.8
.REDE
  • .NET Core 3.1
  • .NET 5
  • .NET 6
ActiveReports para .NET
  • ActiveReports para .NET 16.0J

Como gerar saída para um arquivo PDF

Se um usuário quiser um relatório como um arquivo PDF, a maneira mais rápida de fornecê-lo é ter o relatório exibido no visualizador. Além de exibir relatórios, o visualizador tem uma função para imprimir e enviar arquivos como PDF, portanto, se você exibir o visualizador, poderá pedir ao usuário para gerar a saída do arquivo PDF.

No entanto, em alguns casos, você pode não querer incomodar o usuário, ou você pode querer direcionar sistematicamente o arquivo PDF. Esta seção descreve como gerar programaticamente um arquivo PDF diretamente de um relatório.

Métodos e limitações de saída de arquivos PDF

Existem várias maneiras de produzir arquivos PDF programaticamente, mas nem todas são aceitáveis. Isso varia dependendo da versão do ActiveReports, da plataforma, da estrutura e do tipo de relatório que ele executa. Por exemplo, no ActiveReports 16, os relatórios de seção e página são gerados de forma diferente programaticamente. Um exemplo disso também pode ser encontrado na página oficial.

Por esse motivo, aqui estão alguns exemplos de saída programática de PDF que você pode usar como referência para encontrar a que se adapta ao seu projeto.

Sobre o relatório de exemplo

O arquivo de relatório incluído no modelo para o novo projeto está vazio, então usaremos o relatório de exemplo oficial. Aqui estão algumas sugestões, então faça o download de um dos seguintes sites.

Nesse caso, usaremos o seguinte relatório de exemplo.

  • Relatório de página : Estimate_page_ipa.rdlx
  • Relatório de seção: Invoice.rpx (incluído no projeto de exemplo WebSample16)

Renderizar e gerar PDFs (Relatórios de Página/Relatórios RDL)

Há um "filtro de exportação" para a saída de PDFs, mas na versão 16 ele só pode ser usado para relatórios de seção.

Portanto, relatórios de página/relatórios RDL precisam ser gerados com a "Extensão de desenho", conforme descrito na página acima.

Primeiro de tudo, vou criar um projeto, mas desta vez vou fazê-lo com um aplicativo de console simples. É tão fácil de aplicar às versões desktop e web quanto à versão web.

Ao criar um projeto, selecione Aplicativo de console.

Depois de criar o projeto, adicione os pacotes necessários.

Veja o que você vai adicionar: Por favor, não obtenha a versão mais recente, mas use a versão descrita abaixo. Parece que algumas combinações de pacotes não funcionam corretamente com a versão mais recente. Uma marca de aviso é exibida, mas ignore-a porque as dependências não coincidem. No entanto, há uma possibilidade de que ele mude com atualizações de versão no futuro, então por favor, ajustá-lo cada vez. GrapeCity.Documents.Imaging GrapeCity.Documents.Pdf e são obrigados a renderizar em PDF.

  • GrapeCity.ActiveReports.Export.Pdf (16.4.0)
  • GrapeCity.Documents.Imaging (6.0.3)
  • GrapeCity.Documents.Pdf (6.0.3)

Adicione um arquivo de relatório ao seu projeto. O local pode ser em qualquer lugar, mas desta vez estou Reports criando uma pasta e colocando-a lá. Esse local de posicionamento afeta o caminho especificado posteriormente.

Em seguida, abra as propriedades do relatório adicionado.

Defina a ação de compilação como Recurso Incorporado. Isso significa incorporar o recurso dentro de um EXE (DLL). O relatório é carregado exclusivamente na área de trabalho como na Web.

Em seguida, escreva o código para carregar o relatório e imprima-o em PDF. Como é um aplicativo de console, ele deve ser descrito em Programa.cs como ele é, mas se for um desktop, ele deve ser descrito em um evento de botão, etc., e se for ASP.NET, deve ser descrito no local onde é processado quando é postado.

// レポートファイルがあるパス
var reportPath = "ConsoleApp1.Reports.Estimate_page_ipa.rdlx";

// 埋め込みリソースを Stream をして取り出す
var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(reportPath);
if (stream == null) return;

// ページレポートに変換します
using var sr = new StreamReader(stream);
var pageReport = new GrapeCity.ActiveReports.PageReport(sr);

// PDF 描画拡張を定義します
var pdfRenderingExtension = new GrapeCity.ActiveReports.Export.Pdf.Page.PdfRenderingExtension();

// メモリストリームとして出力する定義です
var outputProvider = new GrapeCity.ActiveReports.Rendering.IO.MemoryStreamProvider();

// レポートを PDF にレンダリングします
pageReport.Document.Render(pdfRenderingExtension, outputProvider);

// Stream に変換します
var ps = outputProvider.GetPrimaryStream();
var outputStream = ps.OpenStream();

Não vou explicar em detalhes que tipo de processamento é porque está escrito nos comentários do código. A chave é especificar o local do arquivo de relatório na primeira linha. O formato é o <アセンブリ名>.<レポートファイルのパス> seguinte, e todos os separadores de caminho são pontos.

O último é o Stream, então converta-o em PDF de acordo com o conteúdo de processamento.

Por exemplo, se você quiser salvá-lo como um arquivo local, adicione o seguinte.

// ファイルにストリームを書き出します
using var fs = new FileStream("Output.pdf", FileMode.Create);
outputStream.CopyTo(fs);

Se você quiser baixá-lo com ASP.NET, adicione o seguinte.

return File(outputStream, "application/pdf", "Output.pdf");

Tente abrir o arquivo PDF de saída para ver se está tudo bem.

Saída de PDF usando filtros de exportação (relatórios de seção)

Use o filtro de exportação de PDF disponível para relatórios de seção.

Ele é criado em um projeto de console da mesma forma que para relatórios de página. O código e as configurações criados aqui podem ser aplicados a outros projetos.

Depois de criar o projeto, adicione os pacotes necessários. Desta vez, vamos sair com um filtro de exportação, então vamos adicionar apenas um.

  • GrapeCity.ActiveReports.Export.Pdf (16.4.0)

Adicione um arquivo de relatório ao seu projeto. O local pode ser em qualquer lugar, mas desta vez estou Reports criando uma pasta e colocando-a lá. Esse local de posicionamento afeta o caminho especificado posteriormente.

Em seguida, abra as propriedades do relatório adicionado.

Defina a ação de compilação como Recurso Incorporado. Isso significa incorporar o recurso dentro de um EXE (DLL). O relatório é carregado exclusivamente na área de trabalho como na Web.

Em seguida, escreva o código para carregar o relatório e imprima-o em PDF. Como é um aplicativo de console, ele deve ser descrito em Programa.cs como ele é, mas se for um desktop, ele deve ser descrito em um evento de botão, etc., e se for ASP.NET, deve ser descrito no local onde é processado quando é postado.

// レポートファイルがあるパス
var reportPath = "ConsoleApp1.Reports.Invoice.rpx";

// 埋め込みリソースを Stream をして取り出す
var stream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream(reportPath);
if (stream == null) return;

// Stream を XML として読み込めるようにします
var xr = System.Xml.XmlReader.Create(stream);

// セクションレポートとして読み込みます
var sectionReport = new GrapeCity.ActiveReports.SectionReport();
sectionReport.LoadLayout(xr);
sectionReport.Run();

// PDF のエクスポートフィルターを作成します
var pdfExport = new GrapeCity.ActiveReports.Export.Pdf.Section.PdfExport();

// メモリストリームに PDF の情報を書き出します
var outputStream = new System.IO.MemoryStream();
pdfExport.Export(sectionReport.Document, outputStream);
outputStream.Seek(0, SeekOrigin.Begin);

Não vou explicar em detalhes que tipo de processamento é porque está escrito nos comentários do código. A chave é especificar o local do arquivo de relatório na primeira linha. O formato é o <アセンブリ名>.<レポートファイルのパス> seguinte, e todos os separadores de caminho são pontos.

O último é o Stream, então converta-o em PDF de acordo com o conteúdo de processamento.

Por exemplo, se você quiser salvá-lo como um arquivo local, adicione o seguinte.

// ファイルにストリームを書き出します
using var fs = new FileStream("Output.pdf", FileMode.Create);
outputStream.CopyTo(fs);

Se você quiser baixá-lo com ASP.NET, adicione o seguinte.

return File(outputStream, "application/pdf", "Output.pdf");

Tente abrir o arquivo PDF de saída para ver se está tudo bem.