Comment convertir un PDF en PDF/A en C# en utilisant IronPDF

How to Export PDF/A or PDF/A-3 Format Documents in C#

This article was translated from English: Does it need improvement?
Translated
View the article in English
role="alert"> Votre entreprise dépense trop pour des abonnements annuels pour la sécurité et la conformité des PDF. Envisagez IronSecureDoc, qui offre des solutions pour gérer les services SaaS tels que la signature numérique, la censure, le cryptage et la protection, le tout pour un paiement unique. Explorez la documentation de IronSecureDoc

En tant que membre de l'Association PDF, Iron Software soutient activement la norme PDF/A et s'assure que IronPDF respecte les exigences de conformité archivistiques.

IronPDF prend en charge l'exportation de PDF vers la norme PDF/A-3b. PDF/A-3B est un sous-ensemble strict de la spécification ISO PDF utilisé pour créer des versions archivistiques de documents avec l'intention qu'ils s'affichent toujours exactement de la même manière que lorsqu'ils ont été enregistrés.

en-tête:2(Démarrage rapide : Convertir des PDF en PDF/A-3b en C#)

Convertissez facilement vos PDF standard au format archivistique PDF/A-3b en utilisant IronPDF en quelques lignes de code C#. Cela garantit la préservation à long terme des documents et la conformité aux normes archivistiques. En tirant parti des capacités puissantes de IronPDF, vous pouvez transformer rapidement vos documents existants en formats PDF/A, garantissant un rendu et un accès cohérents.

Nuget IconGet started making PDFs with NuGet now:

  1. Install IronPDF with NuGet Package Manager

    PM > Install-Package IronPdf

  2. Copy and run this code snippet.

    IronPdf.PdfDocument pdf = IronPdf.PdfDocument.FromFile("example.pdf");
    pdf.SaveAsPdfA("output.pdf");
  3. Deploy to test on your live environment

    Start using IronPDF in your project today with a free trial
    arrow pointer

Conformité Section 508

IronPDF est heureux de suivre l'initiative de Google pour accroître l'archivage et l'accessibilité des PDF et la conformité de la Section 508 des documents PDF.

En 2021, nous sommes passés au rendu des PDF à partir de HTML en utilisant le moteur de rendu HTML de Google Chromium. Cela permet à notre logiciel d'hériter du travail d'accessibilité que Google a déjà mis en œuvre:

Commencer avec IronPDF

Commencez à utiliser IronPDF dans votre projet aujourd'hui avec un essai gratuit.

Première étape :
green arrow pointer


class="hsg-featured-snippet">

Flux de travail minimal (5 étapes)

Comment rendre une chaîne HTML en PDF en C#
  1. Télécharger la bibliothèque C# pour créer des documents PDF/A
  2. Charger ou créer un PDF à partir d'un fichier, HTML ou URL existant
  3. Exporter un document PDF/A à partir d'un fichier PDF existant
  4. Exporter un document PDF/A à partir d'un design HTML ou d'une URL
  5. Enregistrer le document conforme à la norme PDF/A à l'emplacement souhaité

Versions PDF/A

Les deux niveaux de conformité que IronPDF prend en charge sont A et B. 'A' représente 'accessible' et 'B' représente 'basique'. Ces niveaux sont disponibles pour les normes PDF/A-1, PDF/A-2 et PDF/A-3. Les informations ci-dessous ont été prises de la documentation Adobe sur le PDF/A. Par défaut, la sortie PDF générée via IronPDF est toujours PDF/A-3B (ISO 19005-3).

  • Niveau A de conformité respecte toutes les exigences de sa spécification, permettant aux logiciels d'assistance d'améliorer l'accessibilité pour les utilisateurs atteints de handicaps physiques.
  • Niveau B a un niveau de conformité inférieur, avec une conformité minimale, se concentrant sur la préservation de l'apparence visuelle du fichier à long terme.

PDF/A-1 : Le format PDF/A est basé sur la version PDF 1.4 originale.

PDF/A-2 : Publié en juillet 2011 en tant que nouvelle norme appelée ISO 32001-1, cette norme inclut toutes les fonctionnalités des versions PDF jusqu'à la 1.7 ainsi que de nouvelles fonctionnalités. Ses fonctionnalités incluent la prise en charge de JPEG2000, qui est pratique pour les documents numérisés, et des exigences spécifiques pour les métadonnées XMP personnalisées.

PDF/A-3 : Ce format PDF/A inclut toutes les exigences du Niveau 2. Il permet également l'intégration de formats de fichiers supplémentaires - comme XML, CSV, et des formats de traitement de texte - dans des documents conformes PDF/A.

Veuillez noterIronPdf ne prend pas encore en charge la conversion d'un PDF avec un fichier joint en PDF/A-3B.

À partir d'un fichier PDF existant

J'ai un exemple de PDF «wikipedia.pdf», qui a été généré en utilisant IronPDF et enregistré en tant que fichier PDF.

Je vais le charger et le réenregistrer en tant que fichier PDF conforme PDF/A-3B dans cette démonstration.

Fichier d'entrée : "wikipedia.pdf"

Code

:path=/static-assets/pdf/content-code-examples/how-to/pdfa-fromfile.cs
using IronPdf;

// Create a PdfDocument object or open any PDF File
PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf");

// Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b);
Imports IronPdf

' Create a PdfDocument object or open any PDF File
Private pdf As PdfDocument = PdfDocument.FromFile("wikipedia.pdf")

' Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b)
$vbLabelText   $csharpLabel

Sortie

Le fichier de sortie est conforme à la norme PDF/A-3b :

licence complète

À partir d'un design HTML ou URL

J'ai un exemple de design HTML "design.html", que j'aimerais rendre de HTML en PDF en utilisant IronPDF, puis exporter en tant que fichier conforme à la norme PDF/A.

Je vais l'enregistrer en tant que fichier PDF conforme PDF/A-3B dans cette démonstration.

Exemple de design HTML

:path=/static-assets/pdf/content-code-examples/how-to/pdfa-fromhtml.cs
using IronPdf;

// Use the Chrome Renderer to make beautiful HTML designs
var chromeRenderer = new ChromePdfRenderer();

// Render an HTML design as a PdfDocument object using Chrome
PdfDocument pdf = chromeRenderer.RenderHtmlAsPdf("design.html");

// Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("design-accessible.pdf", PdfAVersions.PdfA3b);
Imports IronPdf

' Use the Chrome Renderer to make beautiful HTML designs
Private chromeRenderer = New ChromePdfRenderer()

' Render an HTML design as a PdfDocument object using Chrome
Private pdf As PdfDocument = chromeRenderer.RenderHtmlAsPdf("design.html")

' Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("design-accessible.pdf", PdfAVersions.PdfA3b)
$vbLabelText   $csharpLabel

Le fichier de sortie est conforme à la norme PDF/A-3B :

licence complète

Exemple d'URL

J'ai le site suivant "https://www.microsoft.com", que j'aimerais rendre de l'URL en PDF en utilisant IronPDF, puis exporter en tant que fichier conforme à la norme PDF/A.

Je vais l'enregistrer en tant que fichier PDF conforme PDF/A-3B dans cette démonstration.

:path=/static-assets/pdf/content-code-examples/how-to/pdfa-fromurl.cs
using IronPdf;

// Use the Chrome Renderer to make beautiful HTML designs from URLs
var chromeRenderer = new ChromePdfRenderer();

// Render a Website as a PdfDocument object using Chrome
PdfDocument pdf = chromeRenderer.RenderUrlAsPdf("https://www.microsoft.com");

// Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("website-accessible.pdf", PdfAVersions.PdfA3b);
Imports IronPdf

' Use the Chrome Renderer to make beautiful HTML designs from URLs
Private chromeRenderer = New ChromePdfRenderer()

' Render a Website as a PdfDocument object using Chrome
Private pdf As PdfDocument = chromeRenderer.RenderUrlAsPdf("https://www.microsoft.com")

' Use the SaveAsPdfA method to save to file
pdf.SaveAsPdfA("website-accessible.pdf", PdfAVersions.PdfA3b)
$vbLabelText   $csharpLabel

Le fichier de sortie est conforme à la norme PDF/A-3B :

licence complète


Support de l'intégration de pièces jointes

IronPdf permet d'intégrer des fichiers dans un document PDF lors de sa conversion au format PDF/A. Cela peut être réalisé en utilisant divers types d'entrée tels que les chemins de fichiers, les tableaux d'octets ou les flux.

Intégrer avec des chemins de fichiers

Permet d'intégrer des fichiers en utilisant leurs chemins de fichiers. Une collection de chemins de fichiers est fournie, et ces fichiers sont inclus comme pièces jointes lors de la conversion en PDF/A.

:path=/static-assets/pdf/content-code-examples/how-to/pdfa-attachment-path.cs
using IronPdf;
using System.Collections.Generic;

PdfDocument pdf = new PdfDocument("Google.pdf");

// Initialize collection of embed file as string of path
IEnumerable<string> embedPaths = new[] { "File1.xml", "File2.png" };

// Convert to Pdf/A-3B with embeded files
pdf.ConvertToPdfA(embedPaths);
Imports IronPdf
Imports System.Collections.Generic

Private pdf As New PdfDocument("Google.pdf")

' Initialize collection of embed file as string of path
Private embedPaths As IEnumerable(Of String) = { "File1.xml", "File2.png" }

' Convert to Pdf/A-3B with embeded files
pdf.ConvertToPdfA(embedPaths)
$vbLabelText   $csharpLabel

Intégrer avec des tableaux d'octets

Permet d'intégrer des fichiers en fournissant le contenu du fichier sous forme de tableaux d'octets avec leurs types de fichiers respectifs. Ceci est utile lorsque les fichiers sont déjà chargés en mémoire.

:path=/static-assets/pdf/content-code-examples/how-to/pdfa-attachment-byte.cs
using IronPdf;
using System.Collections.Generic;
using System.IO;


PdfDocument pdf = new PdfDocument("Google.pdf");

// Initialize collection of embed file as Bytes and their file type
byte[] fileData1 = File.ReadAllBytes("File1.png");
byte[] fileData2 = File.ReadAllBytes("File2.xml");

var embedFileConfig1 = new EmbedFileConfiguration(EmbedFileType.png);
embedFileConfig1.EmbedFileName = "logo.png";

var embedFileConfig2 = new EmbedFileConfiguration(EmbedFileType.xml)
{
    EmbedFileName = "supportSystem.xml",
    AFDesc = "Internal system",
    ConformanceLevel = ConformanceLevel.XRECHNUNG,
    SchemaNamespace = SchemaNamespace.Zugferd1,
    SchemaPrefix = SchemaPrefix.rsm,
    PropertyVersion = PropertyVersion.v1p0,
    AFRelationship = AFRelationship.Supplement,
};

IEnumerable<EmbedFileByte> embedBytes = new[]
{
    new EmbedFileByte(fileData1, embedFileConfig1),
    new EmbedFileByte(fileData2, embedFileConfig2)
};

// Convert to Pdf/A-3B with embeded files
pdf.ConvertToPdfA(embedBytes).SaveAs("PdfACompliance.pdf");
Imports IronPdf
Imports System.Collections.Generic
Imports System.IO


Private pdf As New PdfDocument("Google.pdf")

' Initialize collection of embed file as Bytes and their file type
Private fileData1() As Byte = File.ReadAllBytes("File1.png")
Private fileData2() As Byte = File.ReadAllBytes("File2.xml")

Private embedFileConfig1 = New EmbedFileConfiguration(EmbedFileType.png)
embedFileConfig1.EmbedFileName = "logo.png"

Dim embedFileConfig2 = New EmbedFileConfiguration(EmbedFileType.xml) With {
	.EmbedFileName = "supportSystem.xml",
	.AFDesc = "Internal system",
	.ConformanceLevel = ConformanceLevel.XRECHNUNG,
	.SchemaNamespace = SchemaNamespace.Zugferd1,
	.SchemaPrefix = SchemaPrefix.rsm,
	.PropertyVersion = PropertyVersion.v1p0,
	.AFRelationship = AFRelationship.Supplement
}

Dim embedBytes As IEnumerable(Of EmbedFileByte) = {
	New EmbedFileByte(fileData1, embedFileConfig1),
	New EmbedFileByte(fileData2, embedFileConfig2)
}

' Convert to Pdf/A-3B with embeded files
pdf.ConvertToPdfA(embedBytes).SaveAs("PdfACompliance.pdf")
$vbLabelText   $csharpLabel

Intégrer avec des flux

Fournit la possibilité d'intégrer des fichiers en utilisant des flux pour leur contenu, avec leurs types de fichiers. Cette méthode est idéale pour les scénarios où les données de fichier sont traitées sous forme de flux.

:path=/static-assets/pdf/content-code-examples/how-to/pdfa-attachment-stream.cs
using IronPdf;
using System.Collections.Generic;
using System.IO;

PdfDocument pdf = new PdfDocument("Google.pdf");

// Initialize collection of embed file as Stream and their file type
Stream stream1 = new MemoryStream(File.ReadAllBytes("File1.png"));
Stream stream2 = new MemoryStream(File.ReadAllBytes("File2.xml"));

var embedFileConfig1 = new EmbedFileConfiguration(EmbedFileType.png);
embedFileConfig1.EmbedFileName = "logo.png";

var embedFileConfig2 = new EmbedFileConfiguration(EmbedFileType.xml)
{
    EmbedFileName = "supportSystem.xml",
    AFDesc = "Internal system",
    ConformanceLevel = ConformanceLevel.XRECHNUNG,
    SchemaNamespace = SchemaNamespace.Zugferd1,
    SchemaPrefix = SchemaPrefix.rsm,
    PropertyVersion = PropertyVersion.v1p0,
    AFRelationship = AFRelationship.Supplement,
};

IEnumerable<EmbedFileStream> embedStreams = new[]
{
    new EmbedFileStream(stream1, embedFileConfig1),
    new EmbedFileStream(stream2, embedFileConfig2)
};

// Convert to Pdf/A-3B with embeded files
pdf.ConvertToPdfA(embedStreams).SaveAs("PdfACompliance.pdf");
Imports IronPdf
Imports System.Collections.Generic
Imports System.IO

Private pdf As New PdfDocument("Google.pdf")

' Initialize collection of embed file as Stream and their file type
Private stream1 As Stream = New MemoryStream(File.ReadAllBytes("File1.png"))
Private stream2 As Stream = New MemoryStream(File.ReadAllBytes("File2.xml"))

Private embedFileConfig1 = New EmbedFileConfiguration(EmbedFileType.png)
embedFileConfig1.EmbedFileName = "logo.png"

Dim embedFileConfig2 = New EmbedFileConfiguration(EmbedFileType.xml) With {
	.EmbedFileName = "supportSystem.xml",
	.AFDesc = "Internal system",
	.ConformanceLevel = ConformanceLevel.XRECHNUNG,
	.SchemaNamespace = SchemaNamespace.Zugferd1,
	.SchemaPrefix = SchemaPrefix.rsm,
	.PropertyVersion = PropertyVersion.v1p0,
	.AFRelationship = AFRelationship.Supplement
}

Dim embedStreams As IEnumerable(Of EmbedFileStream) = {
	New EmbedFileStream(stream1, embedFileConfig1),
	New EmbedFileStream(stream2, embedFileConfig2)
}

' Convert to Pdf/A-3B with embeded files
pdf.ConvertToPdfA(embedStreams).SaveAs("PdfACompliance.pdf")
$vbLabelText   $csharpLabel

Explorer la configuration EmbedFileConfiguration

Lors de la conversion d'un PdfDocument en un format PDF/A-3 qui inclut des fichiers intégrés, il est important de configurer des paramètres tels que EmbedFilePath, EmbedFileByte ou EmbedFileStream. Ces paramètres vous permettent de spécifier le type de fichier intégré, son nom, et toutes les métadonnées XMP personnalisées que vous souhaitez inclure.

Une configuration appropriée garantit que le contenu intégré est organisé efficacement et conforme aux normes PDF/A-3. La personnalisation des métadonnées XMP permet d'ajouter des informations supplémentaires sur les fichiers intégrés, améliorant l'utilisabilité et l'accessibilité globale du document. En utilisant la classe EmbedFileConfiguration, les développeurs peuvent facilement personnaliser les valeurs et les formats pour le fichier.

var config = new EmbedFileConfiguration
{
    EmbedFileName = "Attachment.xml",
    AFDesc = "Associated File Description",
    ConformanceLevel = ConformanceLevel.EN16931,
    SchemaNamespace = SchemaNamespace.facturX,
    SchemaPrefix = SchemaPrefix.fx,
    PropertyVersion = PropertyVersion.v1,
    AFRelationship = AFRelationship.Alternative
};

// Load a PDF document
var document = PdfDocument.FromFile("wikipedia.pdf");

// Configure embedded file parameters
document.EmbedFileFromFilePath("path/to/attachment", config);

// Save the document as PDF/A-3b
document.SaveAsPdfA3B("output-with-configured-attachment.pdf");
var config = new EmbedFileConfiguration
{
    EmbedFileName = "Attachment.xml",
    AFDesc = "Associated File Description",
    ConformanceLevel = ConformanceLevel.EN16931,
    SchemaNamespace = SchemaNamespace.facturX,
    SchemaPrefix = SchemaPrefix.fx,
    PropertyVersion = PropertyVersion.v1,
    AFRelationship = AFRelationship.Alternative
};

// Load a PDF document
var document = PdfDocument.FromFile("wikipedia.pdf");

// Configure embedded file parameters
document.EmbedFileFromFilePath("path/to/attachment", config);

// Save the document as PDF/A-3b
document.SaveAsPdfA3B("output-with-configured-attachment.pdf");
Dim config = New EmbedFileConfiguration With {
	.EmbedFileName = "Attachment.xml",
	.AFDesc = "Associated File Description",
	.ConformanceLevel = ConformanceLevel.EN16931,
	.SchemaNamespace = SchemaNamespace.facturX,
	.SchemaPrefix = SchemaPrefix.fx,
	.PropertyVersion = PropertyVersion.v1,
	.AFRelationship = AFRelationship.Alternative
}

' Load a PDF document
Dim document = PdfDocument.FromFile("wikipedia.pdf")

' Configure embedded file parameters
document.EmbedFileFromFilePath("path/to/attachment", config)

' Save the document as PDF/A-3b
document.SaveAsPdfA3B("output-with-configured-attachment.pdf")
$vbLabelText   $csharpLabel
  • EmbedFileName : une propriété string représentant le nom du fichier intégré dans le document PDF/A. Par défaut, cette chaîne est vide.
  • AFDesc: A string property representing the associated file description for the embedded file. Par défaut, cette chaîne est vide.
  • ConformanceLevel : le niveau de conformité de l'intégration des fichiers XML s'appliquant aux métadonnées XMP du document PDF/A. Le niveau de conformité par défaut est ConformanceLevel.EN16931. IronPDF fournit différentes valeurs via l'énumération ConformanceLevel.
  • SchemaNamespace : L'URI de l'espace de noms du schéma PDF/A intégrant le fichier XML et l'appliquant aux métadonnées XMP du document PDF/A. L'espace de noms du schéma par défaut est SchemaNamespace.facturX, avec différentes options disponibles pour les développeurs dans l'énumération SchemaNamespace.
  • SchemaPrefix : Le préfixe du schéma PDF/A pour l'intégration d'un fichier XML s'appliquant aux métadonnées XMP d'un document PDF/A. Le préfixe du schéma par défaut est SchemaPrefix.fx, avec plusieurs options disponibles dans l'énumération SchemaPrefix.
  • PropertyVersion : La version de la propriété du fichier XML intégré appliquée aux métadonnées XMP du document PDF/A. La version par défaut est PropertyVersion.v1, avec plusieurs options dans l'énumération PropertyVersion.
  • AFRelationship : La relation du fichier associé (fichier intégré) au document PDF/A. Plusieurs options sont disponibles dans l'énumération AFRelationship.

Problèmes d'affichage de caractères

Le PDF/A exige que tous les caractères du document soient mappés à une police visuellement et sémantiquement correcte. Bien que toutes les polices n'aient pas besoin d'être intégrées, la police utilisée doit prendre en charge les glyphes requis. Si une police incorrecte ou incomplète est utilisée, certains caractères peuvent apparaître cassés, manquants ou mal rendus — en particulier dans les langues avec des scripts ou des symboles spéciaux.

Par exemple, dans le problème ci-dessous, l'échantillon supérieur utilise la bonne police et affiche correctement les caractères, tandis que l'échantillon inférieur ne parvient pas à les rendre correctement en raison d'une incompatibilité de police.

problème d'affichage

Prêt à voir ce que vous pouvez faire d'autre ? Consultez notre page de tutoriel ici : Créer des PDF.

Questions Fréquemment Posées

Comment puis-je convertir un PDF en format PDF/A en C# ?

Vous pouvez utiliser les fonctions de conversion d'IronPDF pour convertir un PDF standard au format PDF/A en C#. Cela se fait en chargeant le document PDF et en l'enregistrant avec le niveau de conformité PDF/A spécifié.

Quelle est la différence entre le PDF/A-3b et les autres normes PDF/A ?

Le PDF/A-3b est un sous-ensemble de la spécification ISO PDF axé sur la préservation à long terme des documents en assurant qu'ils s'affichent de manière cohérente. Contrairement aux autres normes PDF/A, le PDF/A-3b permet l'intégration de fichiers supplémentaires, tels que XML ou CSV, au sein du document.

Comment puis-je intégrer des fichiers dans un document PDF/A en utilisant C#?

IronPDF permet d'intégrer des fichiers tels que XML ou CSV dans un document PDF/A via des chemins de fichiers, tableaux d'octets ou flux. Cela est configuré en utilisant la classe EmbedFileConfiguration pour définir des paramètres tels que le nom du fichier, la description et les métadonnées.

Le contenu HTML ou URL peut-il être converti en PDF/A-3b ?

Oui, IronPDF peut convertir le contenu HTML ou les URLs en PDF/A-3b. Cela implique de rendre le HTML ou l'URL au format PDF puis d'enregistrer le document avec conformité PDF/A-3b.

Quelles sont les fonctionnalités d'accessibilité prises en charge dans les documents PDF/A ?

IronPDF utilise le moteur de rendu HTML Chromium de Google, qui hérite des fonctionnalités d'accessibilité mises en œuvre par Google, soutenant ainsi l'accessibilité pour les documents PDF/A conformes aux normes de la Section 508.

Comment puis-je m'assurer que mes documents PDF/A sont conformes à la Section 508 ?

IronPDF peut s'assurer que vos documents PDF/A sont conformes à la Section 508 en tirant parti des fonctionnalités d'accessibilité du moteur de rendu HTML Google Chromium, ce qui aide à rendre les PDFs accessibles pour les logiciels d'assistance.

Quel est le but de la classe EmbedFileConfiguration ?

La classe EmbedFileConfiguration dans IronPDF permet aux développeurs de configurer les paramètres pour l'intégration de fichiers dans des documents PDF/A, tels que la spécification des métadonnées de fichier et la garantie de conformité aux normes PDF/A-3.

Puis-je convertir des PDFs avec pièces jointes en format PDF/A-3b ?

IronPDF peut convertir des PDFs avec des pièces jointes au format PDF/A-3b, mais les pièces jointes doivent être spécialement configurées et intégrées en utilisant les méthodes appropriées fournies par IronPDF.

Quels avantages offre IronPDF pour la conversion PDF/A ?

IronPDF offre plusieurs avantages pour la conversion PDF/A, y compris la conformité aux normes d'archivage, le support de divers formats d'entrée, la capacité d'intégrer des fichiers supplémentaires, et l'inclusion d'une personnalisation complète des métadonnées.

IronPDF est-il compatible avec .NET 10 lors de la conversion au format PDF/A ?

Oui. IronPDF est entièrement compatible avec .NET 10 et prend en charge les fonctionnalités de conversion PDF/A telles que SaveAsPdfA et le rendu via ChromePdfRenderer. Vous pouvez l'utiliser dans des projets .NET 10 sans aucune manipulation particulière. Il prend également en charge le déploiement sur Windows, Linux, macOS et les conteneurs, tout en ciblant .NET 10.

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
Prêt à commencer?
Nuget Téléchargements 16,154,058 | Version : 2025.11 vient de sortir