Mata ut en ActiveReports-rapport som en PDF-fil

Sidan uppdaterad :
Datum för skapande av sida :

Omvärld

Windows
  • Windows 10 Pro 22H2
Visuell studio
  • Visual Studio 2022 Community Edition
ActiveReports för .NET
  • ActiveReports för .NET 16.0J

Förutsättningar

Windows
  • Windows 8.1
  • Windows 10 (på engelska)
  • Windows 11 (på engelska)
  • Windows Server 2012
  • Windows Server 2012 R2
  • Windows Server 2016
  • Windows Server 2019
  • Windows Server 2022
Visuell 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
.NÄT
  • .NET Core 3.1
  • .NET 5
  • .NET 6
ActiveReports för .NET
  • ActiveReports för .NET 16.0J

Hur man matar ut till en PDF-fil

Om en användare vill ha en rapport som en PDF-fil är det snabbaste sättet att tillhandahålla den att visa rapporten i visningsprogrammet. Förutom att visa rapporter har visningsprogrammet en funktion för att skriva ut och mata ut filer som PDF, så om du visar visningsprogrammet kan du be användaren att mata ut PDF-filen.

Men i vissa fall kanske du inte vill störa användaren, eller så kanske du vill styra PDF-filen systematiskt. I det här avsnittet beskrivs hur du programmatiskt skriver ut en PDF-fil direkt från en rapport.

Utdatametoder och begränsningar för PDF-filer

Det finns flera sätt att programmatiskt mata ut PDF-filer, men alla är inte acceptabla. Detta varierar beroende på vilken version av ActiveReports du har, vilken plattform det handlar om, vilket ramverk det har och vilken typ av rapport som används. I ActiveReports 16 matas till exempel avsnitts- och sidrapporter ut på olika sätt programmatiskt. Ett exempel på detta finns också på den officiella sidan.

Här är därför några exempel på programmatiska PDF-utdata som du kan använda som referens för att hitta den som passar ditt projekt.

Om exempelrapporten

Rapportfilen som ingår i mallen för det nya projektet är tom, så vi kommer att använda den officiella exempelrapporten. Här är några förslag, så ladda ner dem från någon av följande webbplatser.

I det här fallet använder vi följande exempelrapport.

  • Rapport om sidan: Estimate_page_ipa.rdlx
  • Avsnittsrapport: Invoice.rpx (ingår i exempelprojektet WebSample16)

Återge och generera PDF-filer (sidrapporter/RDL-rapporter)

Det finns ett "exportfilter" för att mata ut PDF-filer, men i version 16 kan det bara användas för avsnittsrapporter.

Därför måste sidrapporter/RDL-rapporter genereras med "Ritningstillägg" enligt beskrivningen på sidan ovan.

Först och främst kommer jag att skapa ett projekt, men den här gången kommer jag att göra det med en enkel konsolapplikation. Det är lika enkelt att applicera på skrivbords- och webbversionerna som på webbversionen.

När du skapar ett projekt väljer du Konsolapp.

När du har skapat projektet lägger du till de paket som krävs.

Här är vad du lägger till: Skaffa inte den senaste versionen, utan använd den version som beskrivs nedan. Det verkar som om vissa paketkombinationer inte fungerar korrekt med den senaste versionen. En varningsmarkering visas, men ignorera den eftersom beroendena inte matchar. Det finns dock en möjlighet att det kommer att ändras med versionsuppgraderingar i framtiden, så justera det varje gång. GrapeCity.Documents.Imaging GrapeCity.Documents.Pdf och måste återges till PDF.

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

Lägg till en rapportfil i projektet. Platsen kan vara var som helst, men den här gången skapar Reports jag en mapp och lägger den där. Den här placeringsplatsen påverkar den sökväg som du anger senare.

Öppna sedan egenskaperna för rapporten som du har lagt till.

Ställ in byggåtgärden på Inbäddad resurs. Det innebär att bädda in resursen i en EXE (DLL). Rapporten läses in unikt på skrivbordet precis som på webben.

Skriv sedan koden för att läsa in rapporten och skriv ut den till PDF. Eftersom det är ett konsolprogram bör det beskrivas i Program.cs som det är, men om det är ett skrivbord bör det beskrivas i en knapphändelse etc., och om det är ASP.NET bör det beskrivas på den plats där det behandlas när det publiceras.

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

Jag kommer inte att förklara i detalj vilken typ av bearbetning det är eftersom det är skrivet i kodens kommentarer. Nyckeln är att ange platsen för rapportfilen på den första raden. Formatet är som <アセンブリ名>.<レポートファイルのパス> följer och alla sökvägsavgränsare är punkter.

Den sista är Stream, så konvertera den till PDF enligt bearbetningsinnehållet.

Om du till exempel vill spara den som en lokal fil lägger du till följande.

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

Om du vill ladda ner den med ASP.NET lägger du till följande.

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

Prova att öppna den utgående PDF-filen för att se om den är okej.

Mata ut PDF med hjälp av exportfilter (avsnittsrapporter)

Använd PDF-exportfiltret som finns tillgängligt för avsnittsrapporter.

Den skapas i ett konsolprojekt på samma sätt som för sidrapporter. Koden och inställningarna som du skapar här kan tillämpas på andra projekt.

När du har skapat projektet lägger du till de paket som krävs. Den här gången kommer vi att mata ut med ett exportfilter, så vi kommer bara att lägga till ett.

  • GrapeCity.ActiveReports.Export.Pdf (16.4.0)

Lägg till en rapportfil i projektet. Platsen kan vara var som helst, men den här gången skapar Reports jag en mapp och lägger den där. Den här placeringsplatsen påverkar den sökväg som du anger senare.

Öppna sedan egenskaperna för rapporten som du har lagt till.

Ställ in byggåtgärden på Inbäddad resurs. Det innebär att bädda in resursen i en EXE (DLL). Rapporten läses in unikt på skrivbordet precis som på webben.

Skriv sedan koden för att läsa in rapporten och skriv ut den till PDF. Eftersom det är ett konsolprogram bör det beskrivas i Program.cs som det är, men om det är ett skrivbord bör det beskrivas i en knapphändelse etc., och om det är ASP.NET bör det beskrivas på den plats där det behandlas när det publiceras.

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

Jag kommer inte att förklara i detalj vilken typ av bearbetning det är eftersom det är skrivet i kodens kommentarer. Nyckeln är att ange platsen för rapportfilen på den första raden. Formatet är som <アセンブリ名>.<レポートファイルのパス> följer och alla sökvägsavgränsare är punkter.

Den sista är Stream, så konvertera den till PDF enligt bearbetningsinnehållet.

Om du till exempel vill spara den som en lokal fil lägger du till följande.

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

Om du vill ladda ner den med ASP.NET lägger du till följande.

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

Prova att öppna den utgående PDF-filen för att se om den är okej.