Udskrive en ActiveReports-rapport som en PDF-fil

Side opdateret :
Dato for oprettelse af side :

Driftsmiljø

Windows
  • Windows 10 Pro 22H2
Visual Studio
  • Visual Studio 2022 Community Edition
ActiveReports til .NET
  • ActiveReports til .NET 16.0J

Forudsætninger

Windows
  • Windows 8.1
  • Windows 10
  • Windows 11
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022
Visual Studio
  • Visual Studio 2017
  • Visual Studio 2019
  • Visual Studio 2022
.NET Framework
  • NET Framework 4.6.2
  • NET Framework 4,7
  • NET Framework 4,8
.NET
  • .NET Core 3.1
  • .NET 5
  • .NET 6
ActiveReports til .NET
  • ActiveReports til .NET 16.0J

Sådan udskrives til en PDF-fil

Hvis en bruger ønsker en rapport som en PDF-fil, er den hurtigste måde at levere den på at få rapporten vist i fremviseren. Ud over at vise rapporter har fremviseren en funktion til at udskrive og udskrive filer som PDF, så hvis du viser fremviseren, kan du bede brugeren om at udskrive PDF-filen.

I nogle tilfælde vil du måske ikke genere brugeren, eller du vil måske systematisk dirigere PDF-filen. I dette afsnit beskrives, hvordan du via programmering udsender en PDF-fil direkte fra en rapport.

PDF-filoutputmetoder og begrænsninger

Der er flere måder at programmere PDF-filer på, men ikke alle er acceptable. Dette varierer afhængigt af versionen af ActiveReports, platformen, rammen og den type rapport, den udfører. I ActiveReports 16 udskrives sektions- og siderapporter f.eks. forskelligt programmatisk. Et eksempel på dette kan også findes på den officielle side.

Derfor er her nogle eksempler på programmatisk PDF-output, som du kan bruge som reference til at finde det, der passer til dit projekt.

Om eksempelrapporten

Rapportfilen, der er inkluderet i skabelonen til det nye projekt, er tom, så vi bruger den officielle eksempelrapport. Her er nogle forslag, så download dem fra et af følgende websteder.

I dette tilfælde bruger vi følgende eksempelrapport.

  • Siderapport : Estimate_page_ipa.rdlx
  • Sektionsrapport: Invoice.rpx (inkluderet i eksempelprojektet WebSample16)

Gengiv og generer PDF-filer (siderapporter/RDL-rapporter)

Der er et "eksportfilter" til udsendelse af PDF-filer, men i version 16 kan det kun bruges til sektionsrapporter.

Derfor skal siderapporter/RDL-rapporter genereres med "Tegningsudvidelse" som beskrevet på ovenstående side.

Først og fremmest vil jeg oprette et projekt, men denne gang vil jeg gøre det med en simpel konsolapplikation. Det er lige så nemt at anvende på desktop- og webversionerne som på webversionen.

Når du opretter et projekt, skal du vælge Konsolapp.

Når du har oprettet projektet, skal du tilføje de nødvendige pakker.

Her er, hvad du tilføjer: Hent ikke den nyeste version, men brug den version, der er beskrevet nedenfor. Det ser ud til, at nogle pakkekombinationer ikke fungerer korrekt med den nyeste version. Der vises et advarselstegn, men ignorer det, fordi afhængighederne ikke stemmer overens. Der er dog en mulighed for, at det vil ændre sig med versionsopgraderinger i fremtiden, så juster det hver gang. GrapeCity.Documents.Imaging GrapeCity.Documents.Pdf og skal gengives til PDF.

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

Føj en rapportfil til projektet. Placeringen kan være hvor som helst, men denne gang opretter jeg Reports en mappe og lægger den derinde. Denne placeringsplacering påvirker den sti, du angiver senere.

Åbn derefter egenskaberne for den rapport, du har tilføjet.

Angiv buildhandlingen til Integreret ressource. Dette betyder indlejring af ressourcen i en EXE (DLL). Rapporten indlæses entydigt på skrivebordet, som den er på internettet.

Skriv derefter koden for at indlæse rapporten og udskrive den til PDF. Da det er en konsolapplikation, skal den beskrives i Program.cs som den er, men hvis det er et skrivebord, skal det beskrives i en knaphændelse osv., Og hvis det er ASP.NET, skal det beskrives på det sted, hvor det behandles, når det sendes.

// レポートファイルがあるパス
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();

Jeg vil ikke forklare detaljeret, hvilken slags behandling det er, fordi det er skrevet i kommentarerne til koden. Nøglen er at angive placeringen af rapportfilen i første linje. Formatet er som <アセンブリ名>.<レポートファイルのパス> følger, og alle stiseparatorer er perioder.

Den sidste er Stream, så konverter den til PDF i henhold til behandlingsindholdet.

Hvis du f.eks. vil gemme den som en lokal fil, skal du tilføje følgende.

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

Hvis du vil downloade det med ASP.NET, skal du tilføje følgende.

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

Prøv at åbne output-PDF-filen for at se, om det er okay.

Udskriv PDF ved hjælp af eksportfiltre (sektionsrapporter)

Brug det PDF-eksportfilter, der er tilgængeligt for sektionsrapporter.

Det oprettes i et konsolprojekt på samme måde som for siderapporter. Den kode og de indstillinger, du opretter her, kan anvendes på andre projekter.

Når du har oprettet projektet, skal du tilføje de nødvendige pakker. Denne gang udsender vi med et eksportfilter, så vi tilføjer kun et.

  • GrapeCity.ActiveReports.Export.Pdf (16.4.0)

Føj en rapportfil til projektet. Placeringen kan være hvor som helst, men denne gang opretter jeg Reports en mappe og lægger den derinde. Denne placeringsplacering påvirker den sti, du angiver senere.

Åbn derefter egenskaberne for den rapport, du har tilføjet.

Angiv buildhandlingen til Integreret ressource. Dette betyder indlejring af ressourcen i en EXE (DLL). Rapporten indlæses entydigt på skrivebordet, som den er på internettet.

Skriv derefter koden for at indlæse rapporten og udskrive den til PDF. Da det er en konsolapplikation, skal den beskrives i Program.cs som den er, men hvis det er et skrivebord, skal det beskrives i en knaphændelse osv., Og hvis det er ASP.NET, skal det beskrives på det sted, hvor det behandles, når det sendes.

// レポートファイルがあるパス
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);

Jeg vil ikke forklare detaljeret, hvilken slags behandling det er, fordi det er skrevet i kommentarerne til koden. Nøglen er at angive placeringen af rapportfilen i første linje. Formatet er som <アセンブリ名>.<レポートファイルのパス> følger, og alle stiseparatorer er perioder.

Den sidste er Stream, så konverter den til PDF i henhold til behandlingsindholdet.

Hvis du f.eks. vil gemme den som en lokal fil, skal du tilføje følgende.

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

Hvis du vil downloade det med ASP.NET, skal du tilføje følgende.

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

Prøv at åbne output-PDF-filen for at se, om det er okay.