Générer des rapports PDF en ASP.NET avec C# ou VB

This article was translated from English: Does it need improvement?
Translated
View the article in English

La génération de rapports de gestion ou de base de données à partir de données structurées telles que SQL est une tâche courante du développement .NET. IronPDF peut être utilisé comme un lecteur de PDF C# et aider à visualiser et à exporter des rapports ssrs au format PDF en ASP.NET C#.

IronPDF peut être utilisé pour présenter des instantanés de données sous forme de "rapports" au format PDF. Il fonctionne également comme un analyseur de PDF en C#.


Étape 1

1. Installer IronPDF

Utilisation de NuGet : https://www.nuget.org/packages/IronPdf

Install-Package IronPdf

Vous pouvez également télécharger la DLL IronPDF manuellement.


Comment faire Tutoriel

2. Méthodologie pour la création d'un rapport PDF

La méthodologie de base consiste à générer d'abord le rapport sous forme de document HTML, puis à rendre le HTML sous forme de PDF à l'aide d'IronPDF. Ce tutoriel vous montrera comment créer un rapport PDF en ASP.NET C#.

:path=/static-assets/pdf/content-code-examples/how-to/csharp-pdf-reports-render-html-file.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf");
Imports IronPdf

Private renderer As New ChromePdfRenderer()

renderer.RenderHtmlFileAsPdf("report.html").SaveAs("report.pdf")
VB   C#

3. Crystal Reports au format PDF avec .NET

Dans l'application Crystal Reports, vous pouvez exporter au format HTML en utilisant :

Fichier -> Exporter et sélectionner HTML 4.0

Le rapport obtenu peut ensuite être exporté au format PDF à l'aide de l'exemple de code C# présenté dans la section Méthodologie.

En voici un exemple :

:path=/static-assets/pdf/content-code-examples/how-to/csharp-pdf-reports-render-header-footer.cs
using IronPdf;
using IronSoftware.Drawing;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Add a header to very page easily
renderer.RenderingOptions.FirstPageNumber = 1;
renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
renderer.RenderingOptions.TextHeader.CenterText = "{url}";
renderer.RenderingOptions.TextHeader.Font = FontTypes.Arial;
renderer.RenderingOptions.TextHeader.FontSize = 12;

// Add a footer too
renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
renderer.RenderingOptions.TextFooter.Font = FontTypes.Arial;
renderer.RenderingOptions.TextFooter.FontSize = 10;
renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";

renderer.RenderHtmlFileAsPdf(@"c:\my\exported\report.html").SaveAs("report.pdf");
Imports IronPdf
Imports IronSoftware.Drawing

Private renderer As New ChromePdfRenderer()

' Add a header to very page easily
renderer.RenderingOptions.FirstPageNumber = 1
renderer.RenderingOptions.TextHeader.DrawDividerLine = True
renderer.RenderingOptions.TextHeader.CenterText = "{url}"
renderer.RenderingOptions.TextHeader.Font = FontTypes.Arial
renderer.RenderingOptions.TextHeader.FontSize = 12

' Add a footer too
renderer.RenderingOptions.TextFooter.DrawDividerLine = True
renderer.RenderingOptions.TextFooter.Font = FontTypes.Arial
renderer.RenderingOptions.TextFooter.FontSize = 10
renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}"
renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}"

renderer.RenderHtmlFileAsPdf("c:\my\exported\report.html").SaveAs("report.pdf")
VB   C#

3.1 Crystal Reports au format PDF par programmation avec C Sharp

Si vous souhaitez créer un PDF par programme à partir d'un fichier Crystal Reports(RPT) ce type de fichier est également possible et vous donne beaucoup plus de contrôle.

CrystalDecisions.Shared.DiskFileDestinationOptions diskOpts = CrystalDecisions.Shared.ExportOptions.CreateDiskFileDestinationOptions();

CrystalDecisions.Shared.ExportOptions exportOpts = new CrystalDecisions.Shared.ExportOptions();

CrystalDecisions.Shared.CharacterSeparatedValuesFormatOptions csvExpOpts = new CrystalDecisions.Shared.CharacterSeparatedValuesFormatOptions();

CrystalDecisions.Shared.HTMLFormatOptions HTMLExpOpts = new CrystalDecisions.Shared.HTMLFormatOptions();

rpt.Load(@"c:\my\report.rpt");

//diskOpts.DiskFileName = "c:\\ReportName.csv";

diskOpts.DiskFileName = @"c:\tmp\html\b.html";

exportOpts.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;
exportOpts.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.HTML40;
exportOpts.ExportDestinationOptions = diskOpts;

HTMLExpOpts = new HTMLFormatOptions();
HTMLExpOpts.HTMLBaseFolderName = @"c:\tmp\html\b.html";
HTMLExpOpts.HTMLEnableSeparatedPages = false;
HTMLExpOpts.UsePageRange = false;
HTMLExpOpts.HTMLHasPageNavigator = false;

System.IO.Stream htmlStream;

byte[] htmlByteArray = null;

htmlStream = rpt.ExportThtmlStream(CrystalDecisions.Shared.ExportFormatType.HTML40);

htmlByteArray = new byte[htmlStream.Length];

htmlStream.Read(htmlByteArray, 0, Convert.ToInt32(htmlStream.Length - 1));

System.IO.File.Create(diskOpts.DiskFileName, Convert.ToInt32(htmlStream.Length - 1)).Close();

System.IO.File.OpenWrite(diskOpts.DiskFileName).Write(htmlByteArray, 0, Convert.ToInt32(htmlStream.Length - 1));

System.IO.File.SetAttributes(diskOpts.DiskFileName, System.IO.FileAttributes.Directory);

htmlStream.Close();

IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();

// Add a header to very page easily
renderer.RenderingOptions.FirstPageNumber = 1;
renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
renderer.RenderingOptions.TextHeader.CenterText = "{url}";
renderer.RenderingOptions.TextHeader.Font = IronSoftware.Drawing.FontTypes.Arial;
renderer.RenderingOptions.TextHeader.FontSize = 12;

// Add a footer too
renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
renderer.RenderingOptions.TextFooter.Font = IronSoftware.Drawing.FontTypes.Arial;
renderer.RenderingOptions.TextFooter.FontSize = 10;
renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";

Renderer.RenderFileAsPdf(diskOpts.DiskFileName).SaveAs("Report.pdf");

Cosole.WriteLine("Report Weitten To {0}", Path.GetFullPath(diskOpts.DiskFileName));
CrystalDecisions.Shared.DiskFileDestinationOptions diskOpts = CrystalDecisions.Shared.ExportOptions.CreateDiskFileDestinationOptions();

CrystalDecisions.Shared.ExportOptions exportOpts = new CrystalDecisions.Shared.ExportOptions();

CrystalDecisions.Shared.CharacterSeparatedValuesFormatOptions csvExpOpts = new CrystalDecisions.Shared.CharacterSeparatedValuesFormatOptions();

CrystalDecisions.Shared.HTMLFormatOptions HTMLExpOpts = new CrystalDecisions.Shared.HTMLFormatOptions();

rpt.Load(@"c:\my\report.rpt");

//diskOpts.DiskFileName = "c:\\ReportName.csv";

diskOpts.DiskFileName = @"c:\tmp\html\b.html";

exportOpts.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile;
exportOpts.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.HTML40;
exportOpts.ExportDestinationOptions = diskOpts;

HTMLExpOpts = new HTMLFormatOptions();
HTMLExpOpts.HTMLBaseFolderName = @"c:\tmp\html\b.html";
HTMLExpOpts.HTMLEnableSeparatedPages = false;
HTMLExpOpts.UsePageRange = false;
HTMLExpOpts.HTMLHasPageNavigator = false;

System.IO.Stream htmlStream;

byte[] htmlByteArray = null;

htmlStream = rpt.ExportThtmlStream(CrystalDecisions.Shared.ExportFormatType.HTML40);

htmlByteArray = new byte[htmlStream.Length];

htmlStream.Read(htmlByteArray, 0, Convert.ToInt32(htmlStream.Length - 1));

System.IO.File.Create(diskOpts.DiskFileName, Convert.ToInt32(htmlStream.Length - 1)).Close();

System.IO.File.OpenWrite(diskOpts.DiskFileName).Write(htmlByteArray, 0, Convert.ToInt32(htmlStream.Length - 1));

System.IO.File.SetAttributes(diskOpts.DiskFileName, System.IO.FileAttributes.Directory);

htmlStream.Close();

IronPdf.ChromePdfRenderer Renderer = new IronPdf.ChromePdfRenderer();

// Add a header to very page easily
renderer.RenderingOptions.FirstPageNumber = 1;
renderer.RenderingOptions.TextHeader.DrawDividerLine = true;
renderer.RenderingOptions.TextHeader.CenterText = "{url}";
renderer.RenderingOptions.TextHeader.Font = IronSoftware.Drawing.FontTypes.Arial;
renderer.RenderingOptions.TextHeader.FontSize = 12;

// Add a footer too
renderer.RenderingOptions.TextFooter.DrawDividerLine = true;
renderer.RenderingOptions.TextFooter.Font = IronSoftware.Drawing.FontTypes.Arial;
renderer.RenderingOptions.TextFooter.FontSize = 10;
renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}";
renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}";

Renderer.RenderFileAsPdf(diskOpts.DiskFileName).SaveAs("Report.pdf");

Cosole.WriteLine("Report Weitten To {0}", Path.GetFullPath(diskOpts.DiskFileName));
Dim diskOpts As CrystalDecisions.Shared.DiskFileDestinationOptions = CrystalDecisions.Shared.ExportOptions.CreateDiskFileDestinationOptions()

Dim exportOpts As New CrystalDecisions.Shared.ExportOptions()

Dim csvExpOpts As New CrystalDecisions.Shared.CharacterSeparatedValuesFormatOptions()

Dim HTMLExpOpts As New CrystalDecisions.Shared.HTMLFormatOptions()

rpt.Load("c:\my\report.rpt")

'diskOpts.DiskFileName = "c:\\ReportName.csv";

diskOpts.DiskFileName = "c:\tmp\html\b.html"

exportOpts.ExportDestinationType = CrystalDecisions.Shared.ExportDestinationType.DiskFile
exportOpts.ExportFormatType = CrystalDecisions.Shared.ExportFormatType.HTML40
exportOpts.ExportDestinationOptions = diskOpts

HTMLExpOpts = New HTMLFormatOptions()
HTMLExpOpts.HTMLBaseFolderName = "c:\tmp\html\b.html"
HTMLExpOpts.HTMLEnableSeparatedPages = False
HTMLExpOpts.UsePageRange = False
HTMLExpOpts.HTMLHasPageNavigator = False

Dim htmlStream As System.IO.Stream

Dim htmlByteArray() As Byte = Nothing

htmlStream = rpt.ExportThtmlStream(CrystalDecisions.Shared.ExportFormatType.HTML40)

htmlByteArray = New Byte(htmlStream.Length - 1){}

htmlStream.Read(htmlByteArray, 0, Convert.ToInt32(htmlStream.Length - 1))

System.IO.File.Create(diskOpts.DiskFileName, Convert.ToInt32(htmlStream.Length - 1)).Close()

System.IO.File.OpenWrite(diskOpts.DiskFileName).Write(htmlByteArray, 0, Convert.ToInt32(htmlStream.Length - 1))

System.IO.File.SetAttributes(diskOpts.DiskFileName, System.IO.FileAttributes.Directory)

htmlStream.Close()

Dim Renderer As New IronPdf.ChromePdfRenderer()

' Add a header to very page easily
renderer.RenderingOptions.FirstPageNumber = 1
renderer.RenderingOptions.TextHeader.DrawDividerLine = True
renderer.RenderingOptions.TextHeader.CenterText = "{url}"
renderer.RenderingOptions.TextHeader.Font = IronSoftware.Drawing.FontTypes.Arial
renderer.RenderingOptions.TextHeader.FontSize = 12

' Add a footer too
renderer.RenderingOptions.TextFooter.DrawDividerLine = True
renderer.RenderingOptions.TextFooter.Font = IronSoftware.Drawing.FontTypes.Arial
renderer.RenderingOptions.TextFooter.FontSize = 10
renderer.RenderingOptions.TextFooter.LeftText = "{date} {time}"
renderer.RenderingOptions.TextFooter.RightText = "{page} of {total-pages}"

Renderer.RenderFileAsPdf(diskOpts.DiskFileName).SaveAs("Report.pdf")

Cosole.WriteLine("Report Weitten To {0}", Path.GetFullPath(diskOpts.DiskFileName))
VB   C#

4. Rapports XML

L'exportation de données de rapport au format XML est encore courante malgré la prévalence de formats plus faciles à coder tels que JSON.

Pour styliser un rapport XML, le XML peut être analysé, puis le HTML généré avec les données.

Une solution plus élégante consiste à utiliser XSLT pour convertir XML directement en HTML à l'aide de la classe XslCompiledTransform, comme indiqué dans les articles suivants 'Utilisation de la classe XslCompiledTransform.'

La chaîne ou le fichier HTML qui en résulte peut ensuite être converti en PDF à l'aide d'IronPDF :

XslCompiledTransform transform = new XslCompiledTransform();

using (XmlReader reader = XmlReader.Create(new StringReader(xslt)))
{
    transform.Load(reader);
}
StringWriter results = new StringWriter();
using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
    transform.Transform(reader, null, results);
}

IronPdf.ChromePdfRenderer renderer = new IronPdf.ChromePdfRenderer();

// options, headers and footers may be set there
// Render our report as a PDF
renderer.RenderHtmlFileAsPdf(results.ToString()).SaveAs("Report.pdf");
XslCompiledTransform transform = new XslCompiledTransform();

using (XmlReader reader = XmlReader.Create(new StringReader(xslt)))
{
    transform.Load(reader);
}
StringWriter results = new StringWriter();
using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
    transform.Transform(reader, null, results);
}

IronPdf.ChromePdfRenderer renderer = new IronPdf.ChromePdfRenderer();

// options, headers and footers may be set there
// Render our report as a PDF
renderer.RenderHtmlFileAsPdf(results.ToString()).SaveAs("Report.pdf");
Dim transform As New XslCompiledTransform()

Using reader As XmlReader = XmlReader.Create(New StringReader(xslt))
	transform.Load(reader)
End Using
Dim results As New StringWriter()
Using reader As XmlReader = XmlReader.Create(New StringReader(xml))
	transform.Transform(reader, Nothing, results)
End Using

Dim renderer As New IronPdf.ChromePdfRenderer()

' options, headers and footers may be set there
' Render our report as a PDF
renderer.RenderHtmlFileAsPdf(results.ToString()).SaveAs("Report.pdf")
VB   C#

Veuillez consulter la page 'Convertir XML en PDF en C# et VB.NETpour en savoir plus.

5. Rapports Microsoft SQL Server

Le serveur SQL de Microsoft et le serveur SQL Express gratuit contiennent des outils de création de rapports. L'exportation de rapports SSRS au format PDF en ASP.NET peut être une utilisation utile d'IronPDF.

Tutoriel : Comment localiser et démarrer les outils Reporting Services (SSRS)

Ces rapports peuvent être générés au format HTML, puis personnalisés et convertis au format PDF à l'aide d'IronPDF.

Rendu en HTML (Constructeur de rapports)

6. Rapport sur la sécurité

Pour garantir qu'un rapport PDF n'a pas été modifié ou altéré, il peut être signé numériquement. Cette opération est plus facile à réaliser sur un fichier de rapport PDF une fois qu'il a été rendu et enregistré sur le disque.

:path=/static-assets/pdf/content-code-examples/how-to/csharp-pdf-reports-sign-pdf.cs
using IronPdf.Signing;

// Sign our PDF Report using a p12 or pix digital certificate file
new PdfSignature("IronSoftware.pfx", "123456").SignPdfFile("signed.pdf");
Imports IronPdf.Signing

' Sign our PDF Report using a p12 or pix digital certificate file
Call (New PdfSignature("IronSoftware.pfx", "123456")).SignPdfFile("signed.pdf")
VB   C#

Si vous n'avez pas de signature numérique, vous pouvez créer un nouveau fichier de signature numérique à l'aide du logiciel gratuit Adobe Acrobat Reader sur macOS et Windows.

7. ASPX vers PDF avec ASP.NET Webforms

La façon la plus simple de servir du contenu html en ASP.NET est d'utiliser la classe IronPDF.AspxToPdf sur l'événement Form_Load d'un formulaire WebForms ASP.NET.

var AspxToPdfOptions = new IronPdf.ChromePdfRenderOptions()
{
  EnableJavaScript = false,
  //.. many more options available
};

IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.Attachment, "Report.pdf", AspxToPdfOptions);
var AspxToPdfOptions = new IronPdf.ChromePdfRenderOptions()
{
  EnableJavaScript = false,
  //.. many more options available
};

IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.Attachment, "Report.pdf", AspxToPdfOptions);
Dim AspxToPdfOptions = New IronPdf.ChromePdfRenderOptions() With {.EnableJavaScript = False}

IronPdf.AspxToPdf.RenderThisPageAsPdf(IronPdf.AspxToPdf.FileBehavior.Attachment, "Report.pdf", AspxToPdfOptions)
VB   C#

Nous espérons que cet article vous a aidé à apprendre comment générer un rapport PDF en ASP.NET C# ou VB.NET. Vous pouvez également consulter notre Tutoriel ASP.NET ASPX vers PDF pour en savoir plus.