Passer au contenu du pied de page
UTILISATION DE IRONPDF

Générer des relevés de compte mensuels au format PDF

Le problème de la livraison de documents statiques et manuelle

Page d'accueil IronPDF Lorsqu'un assuré appelle pour demander sa page de déclarations actuelles, ou qu'un client bancaire ouvre un ticket de support pour demander un relevé de trois mois, la demande finit sur le bureau d'un membre du personnel. Cette personne interroge un système, formatte un document, et l'envoie par e-mail, parfois le même jour, parfois 48 heures plus tard. Avec des milliers de clients, ce flux de travail n'est pas extensible, et chaque demande traitée est une que le portail libre-service aurait dû rendre inutile.

Les alternatives auxquelles les organisations ont recours tendent à échanger un problème contre un autre. La pré-génération de PDF pour chaque client selon un programme nocturne produit une montagne de documents qui peuvent ne jamais être téléchargés, et chacun d'entre eux commence à devenir obsolète dès que les données sous-jacentes changent. Un client qui met à jour son mode de paiement ou change son niveau de couverture peut télécharger un PDF qui ne reflète plus son compte, et appeler le support malgré tout.

Les APIs de génération de documents tiers offrent un rendu à la demande mais ajoutent des coûts par requête qui évoluent directement avec le trafic du portail, plus une dépendance réseau se trouvant dans le chemin critique d'une action visible par l'utilisateur. Un portail bancaire qui envoie 200 000 téléchargements de relevés par mois ne veut pas de cela sur une API mesurée.

L'attente de l'utilisateur est simple : un bouton "Télécharger PDF" qui produit le bon document, immédiatement. Un assuré téléchargeant sa page de déclarations, un client de service public obtenant sa dernière facture, un administrateur SaaS exportant un rapport d'abonnement actuel, un client télécom téléchargeant un relevé de détails d'appels, tous s'attendent à un résultat instantané, pas une demande mise en file d'attente.

La solution : rendu à la demande à l'intérieur du point d'extrémité d'API

IronPDF permet aux applications web .NET de générer des fichiers PDF à la demande à l'intérieur d'une action de contrôleur ou d'un point d'extrémité d'API minimal. Lorsque l'utilisateur clique sur "Télécharger le PDF", le serveur extrait ses données en direct de la base de données, remplit un modèle HTML, et ChromePdfRenderer rend le contenu PDF en mémoire. La réponse transmet directement le fichier au navigateur sous forme de téléchargement, sans pré-génération, sans fichiers obsolètes, sans file d'attente de support.

Le document reflète les données du compte de l'utilisateur au moment exact de la demande. Le rendu s'exécute à l'intérieur de l'application .NET existante en tant que package NuGet unique sans processus externes, sans API de documents à appeler, sans service auxiliaire à maintenir en vie, et sans coût par téléchargement à suivre.

Étant donné que c'est une bibliothèque NuGet C# pour les flux de travail PDF, vous pouvez facilement installer IronPDF par l'intermédiaire du Package Manager NuGet. Avec des fonctionnalités clés telles que la génération de PDF, des outils pour modifier les fichiers PDF nouveaux et existants, appliquer la sécurité comme les signatures numériques et les mots de passe, et bien plus, IronPDF est un excellent outil à ajouter à vos projets.

Comment ça marche en pratique

1. L'utilisateur clique sur "Télécharger le document PDF" sur le portail

Le bouton déclenche un HTTP GET vers un point de terminaison d'API, transmettant le type de document et tous les paramètres sélectionnés par l'utilisateur, la période de relevé, le numéro de police, la plage de dates. Le point de terminaison authentifie et autorise la demande avant de faire quoi que ce soit d'autre, vérifiant à la fois l'identité et le droit au document spécifique.

L'autorisation n'est pas facultative ici. Un client demandant son propre relevé est acceptable ; un client demandant celui d'un autre client ne l'est pas. Le point de terminaison doit valider que l'utilisateur authentifié a droit à l'ID du document ou aux paramètres qu'il demande avant de rechercher des données.

Exemple de vue du portail

Bouton exemple pour générer notre PDF

2. Les données en direct remplissent le modèle qui contient le contenu HTML

La méthode d'action interroge la base de données pour obtenir les données actuelles de l'utilisateur, telles que les détails du compte, les éléments de ligne, les soldes, les conditions de la police, les sélections de couverture ou les mesures d'utilisation, et remplit un modèle HTML spécifique au type de document. Le modèle inclut le nom du client et le numéro de compte, la date du document, tous les éléments de ligne pertinents, le branding de l'entreprise, et tout texte légal requis en pied de page.

Un modèle HTML différent gère chaque type de document : résumé de la police, relevé de compte, reçu de paiement, tous rendus via le même contrôleur et pipeline de génération.

3. ChromePdfRenderer convertit l'HTML en PDF et renvoie le fichier

using IronPdf;

[HttpGet("portal/documents/statement")]
[Authorize]
public IActionResult DownloadStatement([FromQuery] string period)
{
    var userId = User.GetUserId();
    var data = _accountService.GetStatementData(userId, period);

    string html = $@"
        <h1>Account Statement — {data.Period}</h1>
        <p><strong>Account:</strong> {data.AccountNumber}</p>
        <p><strong>Name:</strong> {data.CustomerName}</p>
        {data.LineItemsHtml}
        <p><strong>Closing Balance:</strong> {data.ClosingBalance:C}</p>";

    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.MarginTop = 20;

    renderer.RenderingOptions.MarginBottom = 20;

    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf",
        $"Statement-{data.Period}-{data.AccountNumber}.pdf");

}
using IronPdf;

[HttpGet("portal/documents/statement")]
[Authorize]
public IActionResult DownloadStatement([FromQuery] string period)
{
    var userId = User.GetUserId();
    var data = _accountService.GetStatementData(userId, period);

    string html = $@"
        <h1>Account Statement — {data.Period}</h1>
        <p><strong>Account:</strong> {data.AccountNumber}</p>
        <p><strong>Name:</strong> {data.CustomerName}</p>
        {data.LineItemsHtml}
        <p><strong>Closing Balance:</strong> {data.ClosingBalance:C}</p>";

    var renderer = new ChromePdfRenderer();

    renderer.RenderingOptions.MarginTop = 20;

    renderer.RenderingOptions.MarginBottom = 20;

    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    return File(pdf.BinaryData, "application/pdf",
        $"Statement-{data.Period}-{data.AccountNumber}.pdf");

}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc

<HttpGet("portal/documents/statement")>
<Authorize>
Public Function DownloadStatement(<FromQuery> period As String) As IActionResult
    Dim userId = User.GetUserId()
    Dim data = _accountService.GetStatementData(userId, period)

    Dim html As String = $"
        <h1>Account Statement — {data.Period}</h1>
        <p><strong>Account:</strong> {data.AccountNumber}</p>
        <p><strong>Name:</strong> {data.CustomerName}</p>
        {data.LineItemsHtml}
        <p><strong>Closing Balance:</strong> {data.ClosingBalance:C}</p>"

    Dim renderer As New ChromePdfRenderer()

    renderer.RenderingOptions.MarginTop = 20

    renderer.RenderingOptions.MarginBottom = 20

    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

    Return File(pdf.BinaryData, "application/pdf", $"Statement-{data.Period}-{data.AccountNumber}.pdf")
End Function
$vbLabelText   $csharpLabel

Exemple de fichier PDF de sortie

Exemple de sortie IronPDF File() avec un nom de fichier définit Content-Disposition: attachment automatiquement, incitant le navigateur à enregistrer le fichier plutôt que de le rendre en ligne. Le PDF n'est jamais écrit sur le disque, il est généré en mémoire et transmis directement à la réponse.

4. Mise en cache optionnelle pour les téléchargements répétés

Pour les types de documents où les données sous-jacentes changent rarement, comme avec une page de déclarations de police qui n'est mise à jour qu'à renouvellement, une couche de cache évite de re-rendre le même PDF plusieurs fois :

var dataHash = _accountService.GetStatementDataHash(userId, period);

string cacheKey = $"statement/{userId}/{period}/{dataHash}";

byte[] pdfBytes = await _cache.GetAsync(cacheKey);

if (pdfBytes == null)
{
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    pdfBytes = pdf.BinaryData;

    await _cache.SetAsync(cacheKey, pdfBytes,
        new DistributedCacheEntryOptions
        {
            AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24)
        });
}

return File(pdfBytes, "application/pdf", $"Statement-{period}.pdf");
var dataHash = _accountService.GetStatementDataHash(userId, period);

string cacheKey = $"statement/{userId}/{period}/{dataHash}";

byte[] pdfBytes = await _cache.GetAsync(cacheKey);

if (pdfBytes == null)
{
    var renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdf(html);

    pdfBytes = pdf.BinaryData;

    await _cache.SetAsync(cacheKey, pdfBytes,
        new DistributedCacheEntryOptions
        {
            AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24)
        });
}

return File(pdfBytes, "application/pdf", $"Statement-{period}.pdf");
Imports System
Imports System.Threading.Tasks
Imports IronPdf

Dim dataHash = _accountService.GetStatementDataHash(userId, period)

Dim cacheKey As String = $"statement/{userId}/{period}/{dataHash}"

Dim pdfBytes As Byte() = Await _cache.GetAsync(cacheKey)

If pdfBytes Is Nothing Then
    Dim renderer As New ChromePdfRenderer()
    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)

    pdfBytes = pdf.BinaryData

    Await _cache.SetAsync(cacheKey, pdfBytes, New DistributedCacheEntryOptions With {
        .AbsoluteExpirationRelativeToNow = TimeSpan.FromHours(24)
    })
End If

Return File(pdfBytes, "application/pdf", $"Statement-{period}.pdf")
$vbLabelText   $csharpLabel

La clé de cache intègre un hachage des données sous-jacentes, pas seulement l'ID utilisateur et la période. Si les données changent, un paiement tardif est posté, un crédit est appliqué, le hachage change, le cache rate, et le téléchargement suivant re-rend à partir des données actuelles. Le client ne télécharge jamais un document dépassé.

Avis Réels

Toujours à jour. Les documents sont générés à partir de données en direct au moment de la demande. Il n'y a aucun décalage de synchronisation entre les changements de données et le contenu du document, un client qui met à jour ses informations de compte télécharge un PDF qui le reflète immédiatement.

Pas de surcharge de support. Les clients qui peuvent télécharger leur propre police, relevé ou lettre n'ouvrent pas de tickets les demandant. Le bouton de téléchargement remplace un flux de travail de support qui coûte du temps par demande.

Pas de surcharge de stockage. Les PDF sont générés à la demande et transmis au navigateur. Il n'est pas nécessaire de pré-générer et de stocker des documents pour chaque client au cours de chaque cycle de facturation, les coûts de stockage ne s'adaptent pas à la base de clients.

Temps de réponse rapide. ChromePdfRenderer produit un document de portail typique : un relevé d'une page, un résumé de police, un reçu de paiement, en quelques millisecondes. L'utilisateur fait l'expérience d'un téléchargement quasi-instantané plutôt qu'un indicateur de progression.

Cohérence du branding. Chaque type de document a un modèle HTML et CSS approuvé. Chaque PDF téléchargé porte le même logo, la même typographie, la même mise en page et les mêmes avertissements légaux, peu importe quel point de terminaison a géré la demande ou quand il a été généré.

Pas de coût par document. Le rendu s'exécute dans le processus au sein de l'application web. Il n'y a pas de tarif basé sur l'API d'un tiers, pas de tarification basée sur l'utilisation, et pas de ligne d'élément sur la facture d'infrastructure qui grandit avec le trafic du portail.

Conclusion

Un téléchargement de PDF à la demande est une petite fonctionnalité avec un impact disproportionné. Il élimine une classe de demandes de support entièrement, élimine le risque que les clients agissent sur des documents obsolètes, et remplace un flux de travail de livraison manuel par quelque chose qui prend quelques centaines de millisecondes.

La mise en œuvre rentre dans une seule action de contrôleur, une requête de base de données, un modèle HTML, un appel de rendu et une réponse de fichier. IronPDF gère l'ensemble du cycle de vie de la génération de PDF en C# sur ironpdf.com, depuis le rendu des modèles HTML jusqu'à la sauvegarde, la diffusion, et la manipulation des documents. L'essai gratuit de 30 jours vous donne suffisamment de temps pour créer et tester un point de terminaison de téléchargement à la demande contre votre propre portail et vos données.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite

Équipe de soutien Iron

Nous sommes en ligne 24 heures sur 24, 5 jours sur 7.
Chat
Email
Appelez-moi