Comment créer des PDF conformes à la section 508 et accessibles en C# avec IronPDF

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

La génération de PDF accessibles en C# .NET avec IronPDF produit des documents PDF/UA conformes qui répondent aux exigences de la Section 508 et du WCAG 2.0 AA dès leur sortie de l'emballage. La méthode RenderHtmlAsPdfUA d'IronPDF ajoute automatiquement une structure de contenu balisée, un ordre de lecture, une gestion des textes alternatifs et des métadonnées d'accessibilité aux PDF générés à partir de HTML, ce qui permet aux développeurs .NET de créer des documents compatibles avec les lecteurs d'écran pour les agences gouvernementales, les prestataires de soins de santé et toute organisation travaillant avec des contrats fédéraux.

TL;DR : Quickstart Guide

Ce tutoriel couvre la création de documents conformes à la section 508 et accessibles au format PDF/UA en C# .NET, de la génération de structures balisées à l'accessibilité des formulaires et à la validation de la conformité.

  • À qui s'adresse ce document: Les développeurs .NET travaillant sur des contrats gouvernementaux, des projets fédéraux ou des systèmes de santé ou d'éducation pour lesquels l'accessibilité au format PDF est légalement requise.
  • Ce que vous allez construire: Génération de PDF/UA à partir de HTML, conversion de PDF hérités en PDF/UA, balisage linguistique, structure balisée à partir de HTML sémantique, texte alt pour les images, tableaux accessibles, navigation par signets et champs de formulaire étiquetés.
  • <Où ça marche: .NET 10, .NET 8 LTS, .NET Framework 4.6.2+, et .NET Standard 2.0.
  • Quand utiliser cette approche: Lorsque vos PDF doivent passer les audits Section 508, la validation PDF/UA (ISO 14289), ou les exigences WCAG 2.0 Niveau AA.
  • Pourquoi c'est important techniquement: Les PDF standard manquent de structure sémantique. IronPDF construit automatiquement l'arborescence de contenu balisé dont les lecteurs d'écran ont besoin à partir d'un code HTML bien formé.

Créez un document PDF/UA conforme à la section 508 avec seulement quelques lignes de code :

Nuget IconCommencez dès maintenant à créer des PDF avec NuGet :

  1. Installez IronPDF avec le gestionnaire de packages NuGet

    PM > Install-Package IronPdf

  2. Copiez et exécutez cet extrait de code.

    using IronPdf;
    
    ChromePdfRenderer renderer = new ChromePdfRenderer();
    PdfDocument pdf = renderer.RenderHtmlAsPdfUA("<html lang='en'><body><h1>Accessible PDF</h1></body></html>");
    pdf.SaveAs("accessible-document.pdf");
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronPDF dans votre projet dès aujourd'hui grâce à un essai gratuit.
    arrow pointer

Après avoir acheté ou vous être inscrit à une version d'essai de 30 jours d'IronPDF, ajoutez votre clé de licence au début de votre application.

IronPdf.License.LicenseKey = "KEY";
IronPdf.License.LicenseKey = "KEY";
Imports IronPdf

IronPdf.License.LicenseKey = "KEY"
$vbLabelText   $csharpLabel

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

Première étape :
green arrow pointer
NuGet Installer avec NuGet

PM >  Install-Package IronPdf

Consultez IronPDF sur NuGet pour une installation rapide. Avec plus de 10 millions de téléchargements, il transforme le développement PDF avec C#. Vous pouvez également télécharger le DLL ou l'installateur Windows.

Table des matières


Qu'est-ce que la conformité à la section 508 et pourquoi est-elle importante pour les PDF ?

La section 508 fait référence à un amendement de 1998 à la loi sur la réhabilitation de 1973. Cette loi fédérale exige que toutes les technologies électroniques et informatiques développées, achetées, maintenues ou utilisées par les agences fédérales soient accessibles aux personnes handicapées. Le champ d'application s'étend au-delà des bureaux gouvernementaux. Toute organisation qui reçoit des fonds fédéraux, passe des contrats avec des agences fédérales ou fournit des services technologiques à des entités gouvernementales doit également s'y conformer.

Les implications pratiques sont importantes. Un entrepreneur qui développe un logiciel pour un programme fédéral de soins de santé ne peut pas se contenter de fournir des rapports PDF qui s'affichent correctement à l'écran. Ces documents doivent être lisibles par les lecteurs d'écran, navigables au clavier et structurés de manière à ce que les technologies d'assistance puissent les interpréter. Le non-respect de ces exigences peut entraîner le rejet des livrables, la perte de contrats et d'éventuelles poursuites judiciaires.

Les PDF présentent des défis uniques en matière d'accessibilité. Contrairement aux pages web HTML, que les navigateurs rendent avec des fonctions d'accessibilité intégrées, les fichiers PDF sont des documents autonomes qui doivent contenir leurs propres informations structurelles. Un PDF visuellement parfait peut être totalement inutilisable pour une personne utilisant un lecteur d'écran s'il n'est pas correctement balisé, si l'ordre de lecture n'est pas logique ou s'il n'y a pas de texte alternatif pour les images.

Les conséquences de la non-conformité vont au-delà du risque juridique. Les organisations qui produisent des documents inaccessibles excluent de fait une grande partie de leur public. Selon l'Organisation mondiale de la santé, environ 16 % de la population mondiale souffre d'une forme ou d'une autre de handicap. Pour les services gouvernementaux et les programmes financés par le gouvernement fédéral, l'exclusion de ces personnes n'est pas seulement une mauvaise pratique, mais une violation des protections des droits civils.

Qu'est-ce que les normes PDF/UA et WCAG, et en quoi sont-elles liées à la section 508 ?

Comprendre la relation entre les différentes normes d'accessibilité permet de clarifier ce que les développeurs doivent réellement mettre en œuvre. Trois normes clés se croisent lorsqu'il est question d'accessibilité des PDF : Section 508, WCAG et PDF/UA.

Les lignes directrices pour l'accessibilité des contenus web, communément appelées WCAG, ont été élaborées par le World Wide Web Consortium. Ces lignes directrices établissent des principes pour rendre le contenu numérique perceptible, utilisable, compréhensible et robuste. Bien que les WCAG aient été conçus principalement pour le contenu web, leurs principes s'appliquent également aux documents PDF. Les normes révisées de la section 508, mises à jour en 2017, intègrent directement WCAG 2.0 niveau AA comme référence technique pour la conformité. Cela signifie que le respect des exigences WCAG 2.0 AA revient à respecter les exigences de la section 508 pour les documents électroniques.

PDF/UA, qui signifie PDF/Universal Accessibility, est une norme ISO (ISO 14289) spécifiquement conçue pour les documents PDF accessibles. Alors que les WCAG décrivent ce qu'un contenu accessible doit accomplir, les PDF/UA prescrivent exactement comment les fichiers PDF doivent être structurés en interne pour atteindre ces objectifs. La norme définit les exigences en matière de contenu balisé, de métadonnées, de spécification linguistique, de texte alternatif et de dizaines d'autres éléments techniques.

Considérez ces normes comme des couches complémentaires. Les WCAG définissent les résultats en matière d'accessibilité dont les utilisateurs ont besoin. PDF/UA fournit la spécification technique permettant d'atteindre ces résultats au format PDF. La section 508 crée le mandat légal qui exige la conformité avec les WCAG, qui à leur tour indiquent que le PDF/UA est la voie de mise en œuvre pour les documents PDF.

Pour les développeurs, l'intérêt pratique est simple. La création de documents conformes à la norme PDF/UA répond aux exigences techniques de la conformité à la section 508. IronPDF gère une grande partie de cette complexité grâce à ses fonctions d'accessibilité intégrées, ce qui vous permet de vous concentrer sur le contenu pendant que la bibliothèque gère la structure PDF sous-jacente.

Comment convertir un PDF existant au format PDF/UA en C#?

De nombreuses organisations possèdent des bibliothèques de documents PDF existants qui ont été créés avant que l'accessibilité ne devienne une priorité. Plutôt que de recréer ces documents à partir de zéro, IronPDF vous permet de convertir des PDF standard au format PDF/UA. Ce processus de conversion ajoute la structure balisée et les métadonnées nécessaires à la compatibilité avec les technologies d'assistance.

La conversion utilise la méthode SaveAsPdfUA, qui prend un objet PdfDocument existant et l'exporte au format PDF/UA. Voici un exemple de travail complet.

PDF d'entrée

Pour cet exemple, nous utilisons sample-document.pdf, un PDF standard dépourvu de fonctions d'accessibilité qui représente un document traditionnel typique nécessitant une conversion.

Le code ci-dessous charge un fichier PDF existant à l'aide de PdfDocument.FromFile(), puis appelle SaveAsPdfUA() pour exporter une nouvelle version conforme à la norme PDF/UA-1. IronPDF analyse automatiquement la structure du document et ajoute le contenu balisé, les métadonnées et les marqueurs d'accessibilité requis.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/convert-to-pdfua.cs
using IronPdf;
using System;

string inputPath = "document.pdf";
string outputPath = "document-accessible.pdf";

// Load the existing PDF document
PdfDocument pdf = PdfDocument.FromFile(inputPath);

// Export as PDF/UA compliant document
// The method automatically adds required accessibility structure
pdf.SaveAsPdfUA(outputPath);

Console.WriteLine($"Successfully converted {inputPath} to PDF/UA format.");
Imports IronPdf
Imports System

Dim inputPath As String = "document.pdf"
Dim outputPath As String = "document-accessible.pdf"

' Load the existing PDF document
Dim pdf As PdfDocument = PdfDocument.FromFile(inputPath)

' Export as PDF/UA compliant document
' The method automatically adds required accessibility structure
pdf.SaveAsPdfUA(outputPath)

Console.WriteLine($"Successfully converted {inputPath} to PDF/UA format.")
$vbLabelText   $csharpLabel

La méthode SaveAsPdfUA accepte un paramètre facultatif pour spécifier la langue naturelle du document. Pour les documents en anglais, vous devez modifier l'appel comme suit.

PDF d'entrée

Cet exemple utilise benefits-summary.pdf, un document sur les avantages qui nécessite à la fois une conversion de l'accessibilité et un balisage linguistique explicite pour une prononciation correcte par le lecteur d'écran.

Le code charge le PDF et transmet NaturalLanguages.English comme deuxième paramètre à SaveAsPdfUA(). L'identifiant de la langue est intégré dans la structure du PDF, ce qui permet aux lecteurs d'écran d'utiliser les règles de prononciation correctes de l'anglais.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/convert-with-language.cs
using IronPdf;
using System;

string inputPath = "document.pdf";
string outputPath = "document-accessible.pdf";

PdfDocument pdf = PdfDocument.FromFile(inputPath);

// Language is specified via the lang attribute in the HTML source.
// The PDF/UA structure preserves the language for screen readers.
pdf.SaveAsPdfUA(outputPath);

Console.WriteLine("Conversion complete with language specification.");
Imports IronPdf
Imports System

Module Program
    Sub Main()
        Dim inputPath As String = "document.pdf"
        Dim outputPath As String = "document-accessible.pdf"

        Dim pdf As PdfDocument = PdfDocument.FromFile(inputPath)

        ' Language is specified via the lang attribute in the HTML source.
        ' The PDF/UA structure preserves the language for screen readers.
        pdf.SaveAsPdfUA(outputPath)

        Console.WriteLine("Conversion complete with language specification.")
    End Sub
End Module
$vbLabelText   $csharpLabel

IronPDF génère par défaut une sortie PDF/UA-1, qui est la version largement adoptée de la norme. Le processus de conversion analyse la structure existante du PDF et ajoute les balises appropriées pour les titres, les paragraphes, les listes et autres éléments de contenu. Si la conversion automatique fonctionne bien pour de nombreux documents, les mises en page complexes ou les images scannées peuvent nécessiter une intervention manuelle supplémentaire pour assurer une conformité totale.

Comment puis-je rendre HTML directement dans un document PDF/UA accessible ?

La conversion des PDF existants permet de gérer le contenu existant, mais les nouveaux documents gagnent à être créés en tenant compte de l'accessibilité dès le départ. La méthode RenderHtmlAsPdfUA d'IronPDF génère une sortie conforme aux normes directement à partir d'une entrée HTML. Cette approche exploite la structure sémantique déjà présente dans le HTML bien formé pour créer des PDF bien structurés.

L'exemple suivant illustre le rendu d'une chaîne HTML en un PDF accessible.

Le code crée une instance de ChromePdfRenderer et appelle RenderHtmlAsPdfUA() avec une chaîne HTML contenant des éléments sémantiques tels que des titres et des paragraphes. Le moteur de rendu préserve la structure HTML en tant que balises PDF, définit le titre du document via MetaData.Title et enregistre la sortie conforme. L'attribut lang='en' de l'élément HTML est repris dans le PDF pour la détection de la langue du lecteur d'écran.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/render-html-to-pdfua.cs
using IronPdf;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();

string htmlContent = @"
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <meta charset='UTF-8'>
            <title>Quarterly Financial Report</title>
            <style>
                body { font-family: Arial, sans-serif; line-height: 1.6; }
                h1 { color: #333; }
                h2 { color: #555; margin-top: 20px; }
                p { margin-bottom: 15px; }
                table { border-collapse: collapse; width: 100%; margin: 20px 0; }
                th, td { border: 1px solid #ddd; padding: 12px; text-align: left; }
                th { background-color: #f4f4f4; }
            </style>
        </head>
        <body>
            <h1>Q4 2024 Financial Summary</h1>
            <p>This report provides an overview of financial performance for the fourth quarter.</p>

            <h2>Revenue Highlights</h2>
            <p>Total revenue increased by 12% compared to the previous quarter, driven primarily by expansion in the enterprise segment.</p>

            <h2>Expense Analysis</h2>
            <p>Operating expenses remained stable, with a slight reduction in administrative costs offset by increased investment in research and development.</p>
        </body>
        </html>";

// Render directly to PDF/UA format
PdfDocument pdf = renderer.RenderHtmlAsPdfUA(htmlContent);

// Set additional metadata for accessibility
pdf.MetaData.Title = "Q4 2024 Financial Summary";

pdf.SaveAs("financial-report-accessible.pdf");

Console.WriteLine("Accessible PDF created successfully.");
Imports IronPdf
Imports System

Dim renderer As New ChromePdfRenderer()

Dim htmlContent As String = "
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <meta charset='UTF-8'>
            <title>Quarterly Financial Report</title>
            <style>
                body { font-family: Arial, sans-serif; line-height: 1.6; }
                h1 { color: #333; }
                h2 { color: #555; margin-top: 20px; }
                p { margin-bottom: 15px; }
                table { border-collapse: collapse; width: 100%; margin: 20px 0; }
                th, td { border: 1px solid #ddd; padding: 12px; text-align: left; }
                th { background-color: #f4f4f4; }
            </style>
        </head>
        <body>
            <h1>Q4 2024 Financial Summary</h1>
            <p>This report provides an overview of financial performance for the fourth quarter.</p>

            <h2>Revenue Highlights</h2>
            <p>Total revenue increased by 12% compared to the previous quarter, driven primarily by expansion in the enterprise segment.</p>

            <h2>Expense Analysis</h2>
            <p>Operating expenses remained stable, with a slight reduction in administrative costs offset by increased investment in research and development.</p>
        </body>
        </html>"

' Render directly to PDF/UA format
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContent)

' Set additional metadata for accessibility
pdf.MetaData.Title = "Q4 2024 Financial Summary"

pdf.SaveAs("financial-report-accessible.pdf")

Console.WriteLine("Accessible PDF created successfully.")
$vbLabelText   $csharpLabel

Sortie PDF

Le code ci-dessus produit un document PDF/UA sémantiquement structuré :

Notez que le code HTML comprend un attribut lang sur l'élément html. Cet attribut se retrouve dans le PDF et aide les lecteurs d'écran à identifier la langue du document. Les éléments HTML sémantiques tels que h1, h2 et p se traduisent directement en balises PDF appropriées, créant une structure de document logique dans laquelle les technologies d'assistance peuvent naviguer.

Pour le rendu des fichiers HTML ou URLs plutôt que des chaînes de caractères, IronPDF fournit des méthodes correspondantes.

Le code ci-dessous illustre deux approches : RenderHtmlFileAsPdf() charge HTML à partir d'un chemin de fichier local, tandis que RenderUrlAsPdf() récupère et rend le contenu à partir d'une URL web. Les deux méthodes produisent des PDF standard qui sont ensuite convertis au format PDF/UA à l'aide de SaveAsPdfUA(). Cette approche en deux étapes fonctionne bien lorsque vous devez appliquer un traitement supplémentaire avant la conversion de l'accessibilité.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/render-from-file-url.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Render from an HTML file on disk
PdfDocument pdfFromFile = renderer.RenderHtmlFileAsPdf("report.html");

// Convert the rendered PDF to PDF/UA format
pdfFromFile.SaveAsPdfUA("report-accessible.pdf");

// Render from a web URL
PdfDocument pdfFromUrl = renderer.RenderUrlAsPdf("https://example.com");

// Convert to accessible format
pdfFromUrl.SaveAsPdfUA("webpage-accessible.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Render from an HTML file on disk
Dim pdfFromFile As PdfDocument = renderer.RenderHtmlFileAsPdf("report.html")

' Convert the rendered PDF to PDF/UA format
pdfFromFile.SaveAsPdfUA("report-accessible.pdf")

' Render from a web URL
Dim pdfFromUrl As PdfDocument = renderer.RenderUrlAsPdf("https://example.com")

' Convert to accessible format
pdfFromUrl.SaveAsPdfUA("webpage-accessible.pdf")
$vbLabelText   $csharpLabel

Comment définir les métadonnées d'un document pour qu'il soit conforme aux normes d'accessibilité ?

Les métadonnées PDF ont de multiples fonctions en matière d'accessibilité. Les technologies d'assistance annoncent les propriétés des documents telles que le titre et l'auteur pour aider les utilisateurs à identifier ce qu'ils lisent. Les moteurs de recherche et les systèmes de gestion de documents utilisent des métadonnées pour l'indexation et la recherche. Les validateurs de conformité vérifient que les champs de métadonnées requis sont remplis.

IronPDF expose les métadonnées par le biais de la propriété MetaData des objets PdfDocument. Les propriétés suivantes sont les plus pertinentes pour l'accessibilité.

PDF d'entrée

Cet exemple utilise enrollment-guide-draft.pdf, un projet de guide d'adhésion aux avantages sociaux qui nécessite des métadonnées complètes pour la conformité à l'accessibilité et la gestion des documents.

Le code charge un PDF existant et configure toutes les propriétés clés des métadonnées : Title (annoncé par les lecteurs d'écran), Author (identifie la source), Subject (brève description), Keywords (pour la recherche), Creator (application d'origine), et horodatage. Enfin, SaveAsPdfUA() exporte le document avec les métadonnées et la structure d'accessibilité PDF/UA.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/set-metadata.cs
using IronPdf;
using System;

PdfDocument pdf = PdfDocument.FromFile("document.pdf");

// Set the document title - critical for accessibility
// Screen readers announce this when opening the document
pdf.MetaData.Title = "Employee Benefits Enrollment Guide 2024";

// Author information helps identify document source
pdf.MetaData.Author = "Human Resources Department";

// Subject provides a brief description
pdf.MetaData.Subject = "Guide to selecting and enrolling in employee benefit programs";

// Keywords improve searchability
pdf.MetaData.Keywords = "benefits, enrollment, health insurance, retirement, HR";

// Creator identifies the originating application
pdf.MetaData.Creator = "Benefits Portal v3.2";

// Set document dates
pdf.MetaData.CreationDate = DateTime.Now;
pdf.MetaData.ModifiedDate = DateTime.Now;

// Save as PDF/UA with complete metadata
pdf.SaveAsPdfUA("document-accessible.pdf");

Console.WriteLine("Document metadata configured for accessibility.");
Imports IronPdf
Imports System

Dim pdf As PdfDocument = PdfDocument.FromFile("document.pdf")

' Set the document title - critical for accessibility
' Screen readers announce this when opening the document
pdf.MetaData.Title = "Employee Benefits Enrollment Guide 2024"

' Author information helps identify document source
pdf.MetaData.Author = "Human Resources Department"

' Subject provides a brief description
pdf.MetaData.Subject = "Guide to selecting and enrolling in employee benefit programs"

' Keywords improve searchability
pdf.MetaData.Keywords = "benefits, enrollment, health insurance, retirement, HR"

' Creator identifies the originating application
pdf.MetaData.Creator = "Benefits Portal v3.2"

' Set document dates
pdf.MetaData.CreationDate = DateTime.Now
pdf.MetaData.ModifiedDate = DateTime.Now

' Save as PDF/UA with complete metadata
pdf.SaveAsPdfUA("document-accessible.pdf")

Console.WriteLine("Document metadata configured for accessibility.")
$vbLabelText   $csharpLabel

La propriété Title doit faire l'objet d'une attention particulière. Les visionneurs de PDF peuvent afficher le nom du fichier ou le titre du document dans leur barre de titre et leurs onglets. Pour des raisons d'accessibilité, le titre du document doit être affiché car il fournit un contexte significatif. Un titre comme "Employee Benefits Enrollment Guide 2024" est bien plus utile qu'un nom de fichier comme "doc_final_v3_revised.pdf".

Lorsque vous créez de nouveaux PDF à partir de HTML, vous pouvez définir des métadonnées avant l'enregistrement.

Le code rend HTML directement au format PDF/UA en utilisant RenderHtmlAsPdfUA(), puis configure l'ensemble des propriétés de métadonnées sur l'objet PdfDocument résultant avant d'appeler SaveAs(). Cette approche intègre la structure d'accessibilité et les métadonnées dans un flux de travail unique, idéal pour générer de nouveaux documents conformes.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/new-document-metadata.cs
using IronPdf;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();

string html = @"
        <!DOCTYPE html>
        <html lang='en'>
        <head><title>Policy Document</title></head>
        <body>
            <h1>Information Security Policy</h1>
            <p>This document outlines security requirements for all employees.</p>
        </body>
        </html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(html);

// Configure comprehensive metadata
pdf.MetaData.Title = "Information Security Policy";
pdf.MetaData.Author = "IT Security Team";
pdf.MetaData.Subject = "Corporate security requirements and guidelines";
pdf.MetaData.Keywords = "security, policy, compliance, data protection";
pdf.MetaData.Creator = "Policy Management System";
pdf.MetaData.CreationDate = DateTime.Now;
pdf.MetaData.ModifiedDate = DateTime.Now;

pdf.SaveAs("security-policy-accessible.pdf");
Imports IronPdf
Imports System

Dim renderer As New ChromePdfRenderer()

Dim html As String = "
        <!DOCTYPE html>
        <html lang='en'>
        <head><title>Policy Document</title></head>
        <body>
            <h1>Information Security Policy</h1>
            <p>This document outlines security requirements for all employees.</p>
        </body>
        </html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(html)

' Configure comprehensive metadata
pdf.MetaData.Title = "Information Security Policy"
pdf.MetaData.Author = "IT Security Team"
pdf.MetaData.Subject = "Corporate security requirements and guidelines"
pdf.MetaData.Keywords = "security, policy, compliance, data protection"
pdf.MetaData.Creator = "Policy Management System"
pdf.MetaData.CreationDate = DateTime.Now
pdf.MetaData.ModifiedDate = DateTime.Now

pdf.SaveAs("security-policy-accessible.pdf")
$vbLabelText   $csharpLabel

Comment spécifier la langue du document pour les lecteurs d'écran?

La spécification linguistique est une exigence fondamentale en matière d'accessibilité qui a un impact direct sur la manière dont le contenu est exprimé. Lorsque la technologie d'assistance rencontre un texte, elle utilise la langue spécifiée pour sélectionner les règles de prononciation, la voix et les schémas de lecture appropriés. Un document sans spécification linguistique oblige le logiciel à deviner, ce qui se traduit souvent par une sortie audio brouillée ou incompréhensible.

Pour être conforme à la norme PDF/UA, le document doit indiquer sa langue principale. IronPDF s'en charge grâce au paramètre de langage naturel de la méthode SaveAsPdfUA.

Le code présente deux scénarios linguistiques. La première méthode rend le contenu HTML anglais et l'enregistre avec NaturalLanguages.English. La deuxième méthode traite le contenu espagnol, en utilisant lang='es' dans le HTML et NaturalLanguages.Spanish dans l'appel de sauvegarde. Le paramètre de langue garantit que les lecteurs d'écran appliquent les règles de prononciation correctes pour la langue principale du document.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/set-language.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

string htmlContent = @"
<!DOCTYPE html>
<html lang='en'>
<head><title>Annual Report</title></head>
<body>
    <h1>Annual Report 2024</h1>
    <p>This report summarizes organizational activities and financial performance.</p>
</body>
</html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(htmlContent);

// Language is set via lang='en' in the HTML; SaveAsPdfUA preserves it
pdf.SaveAsPdfUA("annual-report.pdf");

string htmlContentEs = @"
<!DOCTYPE html>
<html lang='es'>
<head><title>Informe Anual</title></head>
<body>
    <h1>Informe Anual 2024</h1>
    <p>Este informe resume las actividades organizacionales y el desempeño financiero.</p>
</body>
</html>";

PdfDocument pdfEs = renderer.RenderHtmlAsPdfUA(htmlContentEs);

// Language is set via lang='es' in the HTML; SaveAsPdfUA preserves it
pdfEs.SaveAsPdfUA("informe-anual.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim htmlContent As String = "
<!DOCTYPE html>
<html lang='en'>
<head><title>Annual Report</title></head>
<body>
    <h1>Annual Report 2024</h1>
    <p>This report summarizes organizational activities and financial performance.</p>
</body>
</html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContent)

' Language is set via lang='en' in the HTML; SaveAsPdfUA preserves it
pdf.SaveAsPdfUA("annual-report.pdf")

Dim htmlContentEs As String = "
<!DOCTYPE html>
<html lang='es'>
<head><title>Informe Anual</title></head>
<body>
    <h1>Informe Anual 2024</h1>
    <p>Este informe resume las actividades organizacionales y el desempeño financiero.</p>
</body>
</html>"

Dim pdfEs As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContentEs)

' Language is set via lang='es' in the HTML; SaveAsPdfUA preserves it
pdfEs.SaveAsPdfUA("informe-anual.pdf")
$vbLabelText   $csharpLabel

IronPDF prend en charge de nombreuses langues grâce à l'énumération NaturalLanguages. Les options courantes comprennent l'anglais, l'espagnol, le français, l'allemand, le portugais, le chinois, le japonais, le coréen et l'arabe, entre autres.

Pour les documents contenant plusieurs langues, la langue principale du document doit refléter le contenu prédominant. Les technologies d'assistance gèrent assez bien les phrases étrangères occasionnelles, mais les documents au contenu substantiel en plusieurs langues présentent des défis plus complexes qui peuvent nécessiter des approches spécialisées.

Comment créer une structure PDF balisée accessible à partir de HTML?

La structure PDF balisée constitue l'épine dorsale de l'accessibilité. Les balises définissent l'organisation logique du contenu, en distinguant les titres des paragraphes, en identifiant les listes et les éléments de liste, en balisant les tableaux et en établissant l'ordre de lecture. Sans un balisage correct, les technologies d'assistance ne peuvent pas transmettre la structure du document aux utilisateurs.

La manière la plus efficace de créer des PDF bien balisés avec IronPDF est de commencer par du HTML sémantique. Le moteur de rendu Chrome préserve la structure HTML lors de la conversion en PDF, en traduisant les éléments HTML en balises PDF correspondantes. L'écriture d'un bon HTML produit automatiquement une bonne structure PDF.

Prenons l'exemple suivant, qui illustre un balisage sémantique correct.

Le code construit un document HTML avec une hiérarchie de titres claire (h1 pour le titre principal, h2 pour les sections, h3 pour les sous-sections), des listes non ordonnées (ul/li) pour les puces, et des listes ordonnées (ol/li) pour les séquences numérotées. La méthode RenderHtmlAsPdfUA() convertit ces éléments sémantiques en balises PDF correspondantes que les technologies d'assistance peuvent parcourir.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/semantic-structure.cs
using IronPdf;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();

string htmlContent = @"
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Project Proposal</title>
            <style>
                body { font-family: Georgia, serif; line-height: 1.8; max-width: 800px; margin: 0 auto; padding: 20px; }
                h1 { font-size: 28px; border-bottom: 2px solid #333; padding-bottom: 10px; }
                h2 { font-size: 22px; color: #444; margin-top: 30px; }
                h3 { font-size: 18px; color: #666; }
                ul, ol { margin-left: 20px; }
                li { margin-bottom: 8px; }
            </style>
        </head>
        <body>
            <h1>Website Redesign Proposal</h1>

            <h2>Executive Summary</h2>
            <p>This proposal outlines a comprehensive redesign of the corporate website to improve user experience, accessibility, and conversion rates.</p>

            <h2>Project Objectives</h2>
            <p>The redesign aims to achieve several key goals:</p>
            <ul>
                <li>Improve mobile responsiveness across all device types</li>
                <li>Achieve WCAG 2.1 Level AA compliance for accessibility</li>
                <li>Reduce page load times by 40 percent</li>
                <li>Increase conversion rates through improved user flows</li>
            </ul>

            <h2>Implementation Timeline</h2>
            <p>The project will proceed in three phases:</p>
            <ol>
                <li>Discovery and planning: weeks one through four</li>
                <li>Design and development: weeks five through twelve</li>
                <li>Testing and launch: weeks thirteen through sixteen</li>
            </ol>

            <h3>Phase One Details</h3>
            <p>The discovery phase includes stakeholder interviews, competitive analysis, and technical assessment of the current platform.</p>

            <h3>Phase Two Details</h3>
            <p>Design and development will follow an agile methodology with two-week sprints and regular stakeholder reviews.</p>

            <h2>Budget Considerations</h2>
            <p>The proposed budget covers all aspects of the redesign including design, development, content migration, and quality assurance testing.</p>
        </body>
        </html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(htmlContent);

pdf.MetaData.Title = "Website Redesign Proposal";
pdf.MetaData.Author = "Digital Strategy Team";

pdf.SaveAs("proposal-accessible.pdf");

Console.WriteLine("Structured document created with proper heading hierarchy.");
Imports IronPdf
Imports System

Dim renderer As New ChromePdfRenderer()

Dim htmlContent As String = "
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Project Proposal</title>
            <style>
                body { font-family: Georgia, serif; line-height: 1.8; max-width: 800px; margin: 0 auto; padding: 20px; }
                h1 { font-size: 28px; border-bottom: 2px solid #333; padding-bottom: 10px; }
                h2 { font-size: 22px; color: #444; margin-top: 30px; }
                h3 { font-size: 18px; color: #666; }
                ul, ol { margin-left: 20px; }
                li { margin-bottom: 8px; }
            </style>
        </head>
        <body>
            <h1>Website Redesign Proposal</h1>

            <h2>Executive Summary</h2>
            <p>This proposal outlines a comprehensive redesign of the corporate website to improve user experience, accessibility, and conversion rates.</p>

            <h2>Project Objectives</h2>
            <p>The redesign aims to achieve several key goals:</p>
            <ul>
                <li>Improve mobile responsiveness across all device types</li>
                <li>Achieve WCAG 2.1 Level AA compliance for accessibility</li>
                <li>Reduce page load times by 40 percent</li>
                <li>Increase conversion rates through improved user flows</li>
            </ul>

            <h2>Implementation Timeline</h2>
            <p>The project will proceed in three phases:</p>
            <ol>
                <li>Discovery and planning: weeks one through four</li>
                <li>Design and development: weeks five through twelve</li>
                <li>Testing and launch: weeks thirteen through sixteen</li>
            </ol>

            <h3>Phase One Details</h3>
            <p>The discovery phase includes stakeholder interviews, competitive analysis, and technical assessment of the current platform.</p>

            <h3>Phase Two Details</h3>
            <p>Design and development will follow an agile methodology with two-week sprints and regular stakeholder reviews.</p>

            <h2>Budget Considerations</h2>
            <p>The proposed budget covers all aspects of the redesign including design, development, content migration, and quality assurance testing.</p>
        </body>
        </html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContent)

pdf.MetaData.Title = "Website Redesign Proposal"
pdf.MetaData.Author = "Digital Strategy Team"

pdf.SaveAs("proposal-accessible.pdf")

Console.WriteLine("Structured document created with proper heading hierarchy.")
$vbLabelText   $csharpLabel

Sortie PDF

Ce PDF conserve la hiérarchie des titres et la structure des listes pour la navigation :

Remarquez la hiérarchie des titres dans cet exemple. Le document comporte un seul élément h1 pour le titre principal, suivi d'éléments h2 pour les sections principales et d'éléments h3 pour les sous-sections. Cette hiérarchie est essentielle pour l'accessibilité. Les utilisateurs de technologies d'assistance naviguent souvent dans les documents en sautant d'un titre à l'autre, de sorte qu'une structure logique leur permet de trouver rapidement le contenu dont ils ont besoin.

Les listes bénéficient d'un traitement sémantique avec ul pour les listes non ordonnées et ol pour les listes ordonnées. Chaque élément li devient un élément de liste balisé dans le PDF. Les technologies d'assistance annoncent les listes en indiquant le nombre d'éléments qu'elles contiennent, puis en lisant chaque élément dans l'ordre.

Comment ajouter du texte Alt aux images pour la compatibilité avec les lecteurs d'écran ?

Les images posent un problème d'accessibilité fondamental. Le contenu visuel ne peut être perçu par les utilisateurs aveugles ou malvoyants. Le texte alternatif, communément appelé alt text, fournit une description textuelle qui peut être annoncée à la place de l'image.

Lors de la génération de PDF à partir de HTML, l'attribut alt des éléments img est repris dans le PDF sous la forme d'un texte alternatif.

Le code crée un rapport de ventes avec deux images graphiques. Chaque élément img comprend un attribut alt détaillé qui décrit les données du graphique plutôt que son simple type. Par exemple, le texte alt précise les chiffres de vente réels et les comparaisons régionales. La méthode RenderHtmlAsPdfUA() incorpore ces descriptions en tant que texte alternatif dans le PDF, ce qui permet aux lecteurs d'écran de transmettre les mêmes informations que celles que les utilisateurs voyants obtiennent en regardant les graphiques.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/image-accessibility.cs
using IronPdf;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();

string htmlContent = @"
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Sales Performance Report</title>
            <style>
                body { font-family: Arial, sans-serif; padding: 20px; }
                .chart-container { margin: 20px 0; text-align: center; }
                img { max-width: 100%; height: auto; }
                .caption { font-style: italic; color: #666; margin-top: 10px; }
            </style>
        </head>
        <body>
            <h1>Q3 Sales Performance Report</h1>

            <h2>Regional Sales Comparison</h2>
            <p>The following chart illustrates sales performance across regions for the third quarter.</p>

            <div class='chart-container'>
                <img src='https://example.com/charts/regional-sales-q3.png'
                     alt='Bar chart comparing Q3 sales across four regions: Northeast at 2.4 million dollars, Southeast at 1.8 million dollars, Midwest at 2.1 million dollars, and West at 3.2 million dollars. The West region shows the highest performance with a 15 percent increase from Q2.'
                     width='600' height='400'>
                <p class='caption'>Figure 1: Regional Sales Comparison Q3 2024</p>
            </div>

            <h2>Monthly Trend Analysis</h2>
            <p>Sales showed consistent growth throughout the quarter with acceleration in September.</p>

            <div class='chart-container'>
                <img src='https://example.com/charts/monthly-trend.png'
                     alt='Line graph showing monthly sales from July through September. July sales were 2.1 million dollars, August increased to 2.4 million dollars, and September reached 2.9 million dollars, representing a 38 percent total increase over the quarter.'
                     width='600' height='300'>
                <p class='caption'>Figure 2: Monthly Sales Trend Q3 2024</p>
            </div>

            <h2>Key Findings</h2>
            <p>Analysis indicates strong momentum heading into Q4, particularly in the Western region where new product launches drove significant customer acquisition.</p>
        </body>
        </html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(htmlContent);

pdf.MetaData.Title = "Q3 Sales Performance Report";
pdf.MetaData.Author = "Sales Analytics Team";

pdf.SaveAs("sales-report-accessible.pdf");

Console.WriteLine("Report created with accessible image descriptions.");
Imports IronPdf
Imports System

Dim renderer As New ChromePdfRenderer()

Dim htmlContent As String = "
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Sales Performance Report</title>
            <style>
                body { font-family: Arial, sans-serif; padding: 20px; }
                .chart-container { margin: 20px 0; text-align: center; }
                img { max-width: 100%; height: auto; }
                .caption { font-style: italic; color: #666; margin-top: 10px; }
            </style>
        </head>
        <body>
            <h1>Q3 Sales Performance Report</h1>

            <h2>Regional Sales Comparison</h2>
            <p>The following chart illustrates sales performance across regions for the third quarter.</p>

            <div class='chart-container'>
                <img src='https://example.com/charts/regional-sales-q3.png'
                     alt='Bar chart comparing Q3 sales across four regions: Northeast at 2.4 million dollars, Southeast at 1.8 million dollars, Midwest at 2.1 million dollars, and West at 3.2 million dollars. The West region shows the highest performance with a 15 percent increase from Q2.'
                     width='600' height='400'>
                <p class='caption'>Figure 1: Regional Sales Comparison Q3 2024</p>
            </div>

            <h2>Monthly Trend Analysis</h2>
            <p>Sales showed consistent growth throughout the quarter with acceleration in September.</p>

            <div class='chart-container'>
                <img src='https://example.com/charts/monthly-trend.png'
                     alt='Line graph showing monthly sales from July through September. July sales were 2.1 million dollars, August increased to 2.4 million dollars, and September reached 2.9 million dollars, representing a 38 percent total increase over the quarter.'
                     width='600' height='300'>
                <p class='caption'>Figure 2: Monthly Sales Trend Q3 2024</p>
            </div>

            <h2>Key Findings</h2>
            <p>Analysis indicates strong momentum heading into Q4, particularly in the Western region where new product launches drove significant customer acquisition.</p>
        </body>
        </html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContent)

pdf.MetaData.Title = "Q3 Sales Performance Report"
pdf.MetaData.Author = "Sales Analytics Team"

pdf.SaveAs("sales-report-accessible.pdf")

Console.WriteLine("Report created with accessible image descriptions.")
$vbLabelText   $csharpLabel

Pour rédiger un texte alt efficace, il faut comprendre les informations véhiculées par l'image. Pour les tableaux et les graphiques, le texte alt doit décrire les données présentées, et non simplement indiquer qu'un tableau existe. Dire "diagramme à barres" n'apporte aucune information utile. La description d'un "diagramme à barres comparant les ventes du troisième trimestre dans quatre régions, l'Ouest étant en tête avec 3,2 millions de dollars" donne aux utilisateurs malvoyants la même vision que celle qu'ont les utilisateurs voyants en regardant le diagramme.

Les images décoratives qui n'ont pas de but informatif doivent avoir des attributs alt vides. Elle signale aux lecteurs d'écran que l'image peut être sautée :

<img src="decorative-border.png" alt="">
<img src="decorative-border.png" alt="">
HTML

Comment créer des tableaux accessibles dans les documents PDF?

Les tableaux présentent des considérations complexes en matière d'accessibilité car ils encodent des relations entre des données en deux dimensions. Un utilisateur voyant peut parcourir visuellement les lignes et les colonnes pour comprendre comment les cellules sont liées à leurs en-têtes. Les utilisateurs qui utilisent des technologies d'assistance ont besoin que cette relation soit explicitement définie par un balisage correct.

Le langage HTML fournit les éléments structurels nécessaires à l'élaboration de tableaux accessibles. Les éléments clés comprennent th pour les cellules d'en-tête, td pour les cellules de données et les attributs scope qui précisent si les en-têtes s'appliquent aux lignes ou aux colonnes.

Le code crée un tableau d'annuaire des employés avec un balisage d'accessibilité approprié. L'élément caption fournit un titre de tableau annoncé avant le contenu. Les cellules d'en-tête utilisent th avec scope="col" pour indiquer qu'elles s'appliquent à toutes les cellules de leur colonne. Les éléments thead et tbody séparent les sections structurelles. Le RenderHtmlAsPdfUA() d'IronPDF préserve ces relations dans la structure du PDF, ce qui permet aux lecteurs d'écran d'associer les cellules de données à leurs en-têtes de colonne.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/accessible-table.cs
using IronPdf;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();

string htmlContent = @"
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Employee Directory</title>
            <style>
                body { font-family: Arial, sans-serif; padding: 20px; }
                table { border-collapse: collapse; width: 100%; margin: 20px 0; }
                th, td { border: 1px solid #ccc; padding: 12px; text-align: left; }
                th { background-color: #f0f0f0; font-weight: bold; }
                caption { font-size: 18px; font-weight: bold; margin-bottom: 10px; text-align: left; }
            </style>
        </head>
        <body>
            <h1>Department Staff Directory</h1>
            <p>Contact information for all department personnel as of January 2024.</p>

            <table>
                <caption>Engineering Department Staff</caption>
                <thead>
                    <tr>
                        <th scope='col'>Name</th>
                        <th scope='col'>Title</th>
                        <th scope='col'>Email</th>
                        <th scope='col'>Extension</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Sarah Chen</td>
                        <td>Senior Software Engineer</td>
                        <td>schen@company.com</td>
                        <td>4521</td>
                    </tr>
                    <tr>
                        <td>Marcus Williams</td>
                        <td>DevOps Engineer</td>
                        <td>mwilliams@company.com</td>
                        <td>4522</td>
                    </tr>
                    <tr>
                        <td>Jennifer Park</td>
                        <td>QA Lead</td>
                        <td>jpark@company.com</td>
                        <td>4523</td>
                    </tr>
                    <tr>
                        <td>Robert Gonzalez</td>
                        <td>Technical Writer</td>
                        <td>rgonzalez@company.com</td>
                        <td>4524</td>
                    </tr>
                </tbody>
            </table>

            <h2>Contact Guidelines</h2>
            <p>Please use email for non-urgent matters. Phone extensions connect to voicemail outside business hours.</p>
        </body>
        </html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(htmlContent);

pdf.MetaData.Title = "Department Staff Directory";

pdf.SaveAs("directory-accessible.pdf");

Console.WriteLine("Directory created with accessible table structure.");
Imports IronPdf
Imports System

Dim renderer As New ChromePdfRenderer()

Dim htmlContent As String = "
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Employee Directory</title>
            <style>
                body { font-family: Arial, sans-serif; padding: 20px; }
                table { border-collapse: collapse; width: 100%; margin: 20px 0; }
                th, td { border: 1px solid #ccc; padding: 12px; text-align: left; }
                th { background-color: #f0f0f0; font-weight: bold; }
                caption { font-size: 18px; font-weight: bold; margin-bottom: 10px; text-align: left; }
            </style>
        </head>
        <body>
            <h1>Department Staff Directory</h1>
            <p>Contact information for all department personnel as of January 2024.</p>

            <table>
                <caption>Engineering Department Staff</caption>
                <thead>
                    <tr>
                        <th scope='col'>Name</th>
                        <th scope='col'>Title</th>
                        <th scope='col'>Email</th>
                        <th scope='col'>Extension</th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>Sarah Chen</td>
                        <td>Senior Software Engineer</td>
                        <td>schen@company.com</td>
                        <td>4521</td>
                    </tr>
                    <tr>
                        <td>Marcus Williams</td>
                        <td>DevOps Engineer</td>
                        <td>mwilliams@company.com</td>
                        <td>4522</td>
                    </tr>
                    <tr>
                        <td>Jennifer Park</td>
                        <td>QA Lead</td>
                        <td>jpark@company.com</td>
                        <td>4523</td>
                    </tr>
                    <tr>
                        <td>Robert Gonzalez</td>
                        <td>Technical Writer</td>
                        <td>rgonzalez@company.com</td>
                        <td>4524</td>
                    </tr>
                </tbody>
            </table>

            <h2>Contact Guidelines</h2>
            <p>Please use email for non-urgent matters. Phone extensions connect to voicemail outside business hours.</p>
        </body>
        </html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContent)

pdf.MetaData.Title = "Department Staff Directory"

pdf.SaveAs("directory-accessible.pdf")

Console.WriteLine("Directory created with accessible table structure.")
$vbLabelText   $csharpLabel

Sortie PDF

Le résultat contient un tableau correctement structuré avec des associations d'en-têtes :

L'attribut scope des éléments th est essentiel. L'option scope="col" indique que l'en-tête s'applique à toutes les cellules de cette colonne. Pour les tableaux où la première cellule de chaque ligne sert d'en-tête de ligne, vous devez utiliser scope="row" à la place. Les tableaux complexes avec des en-têtes de ligne et de colonne nécessitent les deux attributs.

L'élément caption fournit un titre pour le tableau qui est annoncé avant la lecture du contenu du tableau. Cela permet aux utilisateurs de connaître le contexte des données qu'ils sont sur le point d'entendre.

Pour les tableaux comportant des cellules fusionnées ou des structures irrégulières, des attributs supplémentaires tels que headers et id permettent de relier explicitement les cellules de données à leurs en-têtes correspondants. Toutefois, il est préférable, du point de vue de l'accessibilité, d'utiliser des structures de tableau simples avec des lignes et des colonnes cohérentes.

Comment ajouter des signets et une navigation pour l'accessibilité des documents ?

Les signets constituent des repères de navigation qui aident tous les utilisateurs à parcourir de longs documents, mais ils sont particulièrement utiles pour l'accessibilité. Les utilisateurs qui ne peuvent pas parcourir visuellement les pages s'appuient sur les signets pour trouver les sections qui les intéressent. Ces schémas structurés permettent d'accéder directement à un contenu spécifique.

IronPDF prend en charge la création de structures de signets hiérarchiques de manière programmatique.

Le code rend un manuel de l'employé avec plusieurs chapitres, puis ajoute par programme une hiérarchie de signets à l'aide de la collection Bookmarks. Les signets de premier niveau pointent vers les pages de début de chapitre via AddBookMarkAtEnd() avec un index de page. Les signets enfants des sous-sections sont ajoutés par le biais de la propriété Children du parent, créant ainsi un arbre de navigation imbriqué. Le paramètre d'indexation des pages est basé sur le zéro, la page 0 est donc la première page.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/bookmarks-navigation.cs
using IronPdf;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();

string htmlContent = @"
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Employee Handbook</title>
            <style>
                body { font-family: Georgia, serif; line-height: 1.8; padding: 40px; }
                h1 { page-break-before: always; }
                h1:first-of-type { page-break-before: avoid; }
                h2 { margin-top: 30px; }
            </style>
        </head>
        <body>
            <h1>Employee Handbook</h1>
            <p>Welcome to our organization. This handbook contains policies and procedures for all employees.</p>

            <h1>Chapter 1: Employment Policies</h1>
            <h2>Equal Opportunity</h2>
            <p>Our organization is committed to providing equal employment opportunities to all applicants and employees.</p>

            <h2>At-Will Employment</h2>
            <p>Employment with the organization is at-will unless otherwise specified in a written agreement.</p>

            <h1>Chapter 2: Compensation and Benefits</h1>
            <h2>Pay Periods</h2>
            <p>Employees are paid on a bi-weekly basis, with pay dates falling on alternating Fridays.</p>

            <h2>Health Insurance</h2>
            <p>Full-time employees are eligible for health insurance coverage beginning the first of the month following hire date.</p>

            <h2>Retirement Plans</h2>
            <p>The organization offers a 401(k) plan with employer matching contributions up to four percent of salary.</p>

            <h1>Chapter 3: Time Off Policies</h1>
            <h2>Vacation</h2>
            <p>Employees accrue vacation time based on length of service, starting at two weeks annually.</p>

            <h2>Sick Leave</h2>
            <p>Employees receive five days of paid sick leave per calendar year.</p>
        </body>
        </html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(htmlContent);

// Add top-level bookmarks for main sections
var introBookmark = pdf.Bookmarks.AddBookMarkAtEnd("Introduction", 0);

var chapter1Bookmark = pdf.Bookmarks.AddBookMarkAtEnd("Chapter 1: Employment Policies", 1);
chapter1Bookmark.Children.AddBookMarkAtEnd("Equal Opportunity", 1);
chapter1Bookmark.Children.AddBookMarkAtEnd("At-Will Employment", 1);

var chapter2Bookmark = pdf.Bookmarks.AddBookMarkAtEnd("Chapter 2: Compensation and Benefits", 2);
chapter2Bookmark.Children.AddBookMarkAtEnd("Pay Periods", 2);
chapter2Bookmark.Children.AddBookMarkAtEnd("Health Insurance", 2);
chapter2Bookmark.Children.AddBookMarkAtEnd("Retirement Plans", 2);

var chapter3Bookmark = pdf.Bookmarks.AddBookMarkAtEnd("Chapter 3: Time Off Policies", 3);
chapter3Bookmark.Children.AddBookMarkAtEnd("Vacation", 3);
chapter3Bookmark.Children.AddBookMarkAtEnd("Sick Leave", 3);

pdf.MetaData.Title = "Employee Handbook";
pdf.MetaData.Author = "Human Resources";

pdf.SaveAs("handbook-with-bookmarks.pdf");

Console.WriteLine("Handbook created with navigational bookmarks.");
Imports IronPdf
Imports System

Dim renderer As New ChromePdfRenderer()

Dim htmlContent As String = "
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Employee Handbook</title>
            <style>
                body { font-family: Georgia, serif; line-height: 1.8; padding: 40px; }
                h1 { page-break-before: always; }
                h1:first-of-type { page-break-before: avoid; }
                h2 { margin-top: 30px; }
            </style>
        </head>
        <body>
            <h1>Employee Handbook</h1>
            <p>Welcome to our organization. This handbook contains policies and procedures for all employees.</p>

            <h1>Chapter 1: Employment Policies</h1>
            <h2>Equal Opportunity</h2>
            <p>Our organization is committed to providing equal employment opportunities to all applicants and employees.</p>

            <h2>At-Will Employment</h2>
            <p>Employment with the organization is at-will unless otherwise specified in a written agreement.</p>

            <h1>Chapter 2: Compensation and Benefits</h1>
            <h2>Pay Periods</h2>
            <p>Employees are paid on a bi-weekly basis, with pay dates falling on alternating Fridays.</p>

            <h2>Health Insurance</h2>
            <p>Full-time employees are eligible for health insurance coverage beginning the first of the month following hire date.</p>

            <h2>Retirement Plans</h2>
            <p>The organization offers a 401(k) plan with employer matching contributions up to four percent of salary.</p>

            <h1>Chapter 3: Time Off Policies</h1>
            <h2>Vacation</h2>
            <p>Employees accrue vacation time based on length of service, starting at two weeks annually.</p>

            <h2>Sick Leave</h2>
            <p>Employees receive five days of paid sick leave per calendar year.</p>
        </body>
        </html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContent)

' Add top-level bookmarks for main sections
Dim introBookmark = pdf.Bookmarks.AddBookMarkAtEnd("Introduction", 0)

Dim chapter1Bookmark = pdf.Bookmarks.AddBookMarkAtEnd("Chapter 1: Employment Policies", 1)
chapter1Bookmark.Children.AddBookMarkAtEnd("Equal Opportunity", 1)
chapter1Bookmark.Children.AddBookMarkAtEnd("At-Will Employment", 1)

Dim chapter2Bookmark = pdf.Bookmarks.AddBookMarkAtEnd("Chapter 2: Compensation and Benefits", 2)
chapter2Bookmark.Children.AddBookMarkAtEnd("Pay Periods", 2)
chapter2Bookmark.Children.AddBookMarkAtEnd("Health Insurance", 2)
chapter2Bookmark.Children.AddBookMarkAtEnd("Retirement Plans", 2)

Dim chapter3Bookmark = pdf.Bookmarks.AddBookMarkAtEnd("Chapter 3: Time Off Policies", 3)
chapter3Bookmark.Children.AddBookMarkAtEnd("Vacation", 3)
chapter3Bookmark.Children.AddBookMarkAtEnd("Sick Leave", 3)

pdf.MetaData.Title = "Employee Handbook"
pdf.MetaData.Author = "Human Resources"

pdf.SaveAs("handbook-with-bookmarks.pdf")

Console.WriteLine("Handbook created with navigational bookmarks.")
$vbLabelText   $csharpLabel

Sortie PDF

Le PDF généré comprend un panneau de signets navigables pour un accès rapide aux sections :

Le paramètre d'index de page dans AddBookMarkAtEnd utilise l'indexation basée sur le zéro, où la page 0 est la première page du document. Les signets imbriqués créés grâce à la propriété Children établissent une hiérarchie qui reflète la structure du document.

Pour les documents HTML dont la structure des titres est correcte, IronPDF peut automatiquement générer une table des matières qui inclut une navigation liée.

Le code permet la génération automatique de la table des matières en définissant RenderingOptions.TableOfContents sur TableOfContentsTypes.WithPageNumbers. Le HTML comprend un placeholder div avec id="IronPdf-toc" où la table des matières générée sera insérée. IronPDF analyse les éléments d'en-tête (h1, h2, etc.), construit une table des matières hiérarchique avec des numéros de page et l'insère à l'emplacement prévu.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/table-of-contents.cs
using IronPdf;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Enable automatic table of contents generation
renderer.RenderingOptions.TableOfContents = TableOfContentsTypes.WithPageNumbers;

string htmlContent = @"
        <!DOCTYPE html>
        <html lang='en'>
        <head><title>Technical Manual</title></head>
        <body>
            <div id='ironpdf-toc'></div>

            <h1>System Administration Guide</h1>
            <p>Comprehensive guide to system configuration and maintenance.</p>

            <h2>Installation</h2>
            <p>Step-by-step installation procedures for all supported platforms.</p>

            <h2>Configuration</h2>
            <p>Detailed configuration options and recommended settings.</p>

            <h2>Troubleshooting</h2>
            <p>Common issues and their resolutions.</p>
        </body>
        </html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(htmlContent);

pdf.MetaData.Title = "System Administration Guide";

pdf.SaveAs("manual-with-toc.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Enable automatic table of contents generation
renderer.RenderingOptions.TableOfContents = TableOfContentsTypes.WithPageNumbers

Dim htmlContent As String = "
        <!DOCTYPE html>
        <html lang='en'>
        <head><title>Technical Manual</title></head>
        <body>
            <div id='ironpdf-toc'></div>

            <h1>System Administration Guide</h1>
            <p>Comprehensive guide to system configuration and maintenance.</p>

            <h2>Installation</h2>
            <p>Step-by-step installation procedures for all supported platforms.</p>

            <h2>Configuration</h2>
            <p>Detailed configuration options and recommended settings.</p>

            <h2>Troubleshooting</h2>
            <p>Common issues and their resolutions.</p>
        </body>
        </html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContent)

pdf.MetaData.Title = "System Administration Guide"

pdf.SaveAs("manual-with-toc.pdf")
$vbLabelText   $csharpLabel

L'élément div avec id="IronPdf-toc" marque l'endroit où la table des matières générée apparaîtra. IronPDF construit la table des matières à partir d'éléments d'en-tête, en créant des liens cliquables qui permettent d'accéder à chaque section.

Comment créer des formulaires PDF accessibles avec des étiquettes appropriées ?

Les formulaires interactifs doivent faire l'objet d'une attention particulière en termes d'accessibilité. Chaque champ de saisie doit être associé à une étiquette programmatique afin que la saisie attendue puisse être annoncée. Les étiquettes visuelles ne suffisent pas, car elles n'établissent pas la connexion sous-jacente dont les technologies d'assistance ont besoin pour interpréter correctement le formulaire.

IronPDF rend les éléments de formulaire HTML sous forme de champs de formulaire PDF interactifs. Les formulaires HTML correctement balisés sont traduits en formulaires PDF accessibles.

Le code permet la création de champs de formulaire en définissant RenderingOptions.CreatePdfFormsFromHtml = true. Le formulaire HTML utilise des modèles d'accessibilité appropriés : chaque entrée a un id unique qui correspond à l'attribut for de son étiquette, les boutons radio sont regroupés dans un fieldset avec un legend descriptif, et les cases à cocher ont des étiquettes associées. La méthode RenderHtmlAsPdfUA() convertit ces éléments en champs de formulaire PDF interactifs avec les associations d'étiquettes préservées pour les lecteurs d'écran.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/accessible-form.cs
using IronPdf;
using System;

ChromePdfRenderer renderer = new ChromePdfRenderer();

// Enable form field creation from HTML forms
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

string htmlContent = @"
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Contact Request Form</title>
            <style>
                body { font-family: Arial, sans-serif; padding: 30px; max-width: 600px; }
                .form-group { margin-bottom: 20px; }
                label { display: block; margin-bottom: 5px; font-weight: bold; }
                input[type='text'], input[type='email'], textarea {
                    width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 4px;
                }
                textarea { height: 120px; resize: vertical; }
                .checkbox-group { margin: 15px 0; }
                .checkbox-group label { display: inline; font-weight: normal; margin-left: 8px; }
                fieldset { border: 1px solid #ddd; padding: 15px; margin-bottom: 20px; }
                legend { font-weight: bold; padding: 0 10px; }
            </style>
        </head>
        <body>
            <h1>Contact Request Form</h1>
            <p>Please complete all required fields marked with an asterisk.</p>

            <form>
                <div class='form-group'>
                    <label for='fullname'>Full Name *</label>
                    <input type='text' id='fullname' name='fullname' required>
                </div>

                <div class='form-group'>
                    <label for='email'>Email Address *</label>
                    <input type='email' id='email' name='email' required>
                </div>

                <div class='form-group'>
                    <label for='phone'>Phone Number</label>
                    <input type='text' id='phone' name='phone'>
                </div>

                <fieldset>
                    <legend>Preferred Contact Method</legend>
                    <div class='checkbox-group'>
                        <input type='radio' id='contact-email' name='contact-method' value='email'>
                        <label for='contact-email'>Email</label>
                    </div>
                    <div class='checkbox-group'>
                        <input type='radio' id='contact-phone' name='contact-method' value='phone'>
                        <label for='contact-phone'>Phone</label>
                    </div>
                </fieldset>

                <div class='form-group'>
                    <label for='message'>Message *</label>
                    <textarea id='message' name='message' required></textarea>
                </div>

                <div class='checkbox-group'>
                    <input type='checkbox' id='newsletter' name='newsletter'>
                    <label for='newsletter'>Subscribe to our newsletter</label>
                </div>
            </form>
        </body>
        </html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(htmlContent);

pdf.MetaData.Title = "Contact Request Form";

pdf.SaveAs("contact-form-accessible.pdf");

Console.WriteLine("Accessible form created with proper field labels.");
Imports IronPdf
Imports System

Dim renderer As New ChromePdfRenderer()

' Enable form field creation from HTML forms
renderer.RenderingOptions.CreatePdfFormsFromHtml = True

Dim htmlContent As String = "
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <title>Contact Request Form</title>
            <style>
                body { font-family: Arial, sans-serif; padding: 30px; max-width: 600px; }
                .form-group { margin-bottom: 20px; }
                label { display: block; margin-bottom: 5px; font-weight: bold; }
                input[type='text'], input[type='email'], textarea {
                    width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 4px;
                }
                textarea { height: 120px; resize: vertical; }
                .checkbox-group { margin: 15px 0; }
                .checkbox-group label { display: inline; font-weight: normal; margin-left: 8px; }
                fieldset { border: 1px solid #ddd; padding: 15px; margin-bottom: 20px; }
                legend { font-weight: bold; padding: 0 10px; }
            </style>
        </head>
        <body>
            <h1>Contact Request Form</h1>
            <p>Please complete all required fields marked with an asterisk.</p>

            <form>
                <div class='form-group'>
                    <label for='fullname'>Full Name *</label>
                    <input type='text' id='fullname' name='fullname' required>
                </div>

                <div class='form-group'>
                    <label for='email'>Email Address *</label>
                    <input type='email' id='email' name='email' required>
                </div>

                <div class='form-group'>
                    <label for='phone'>Phone Number</label>
                    <input type='text' id='phone' name='phone'>
                </div>

                <fieldset>
                    <legend>Preferred Contact Method</legend>
                    <div class='checkbox-group'>
                        <input type='radio' id='contact-email' name='contact-method' value='email'>
                        <label for='contact-email'>Email</label>
                    </div>
                    <div class='checkbox-group'>
                        <input type='radio' id='contact-phone' name='contact-method' value='phone'>
                        <label for='contact-phone'>Phone</label>
                    </div>
                </fieldset>

                <div class='form-group'>
                    <label for='message'>Message *</label>
                    <textarea id='message' name='message' required></textarea>
                </div>

                <div class='checkbox-group'>
                    <input type='checkbox' id='newsletter' name='newsletter'>
                    <label for='newsletter'>Subscribe to our newsletter</label>
                </div>
            </form>
        </body>
        </html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContent)

pdf.MetaData.Title = "Contact Request Form"

pdf.SaveAs("contact-form-accessible.pdf")

Console.WriteLine("Accessible form created with proper field labels.")
$vbLabelText   $csharpLabel

Sortie PDF

Le PDF généré comprend des champs de formulaire interactifs avec des associations d'étiquettes correctes :

Plusieurs modèles d'accessibilité apparaissent dans cet exemple de formulaire. Chaque entrée possède un attribut id unique qui correspond à l'attribut for de son étiquette. Cette connexion permet d'annoncer "Nom complet, modifier le texte" lorsqu'un utilisateur accède à ce champ. Les boutons radio sont regroupés dans un ensemble de champs avec une légende décrivant l'objectif du groupe. Les cases à cocher ont des étiquettes positionnées après l'élément de saisie, conformément aux conventions de formulaire standard.

L'option CreatePdfFormsFromHtml rendering option doit être activée pour qu'IronPdf crée des champs de formulaire interactifs plutôt que des représentations statiques du formulaire.

Comment valider la conformité des PDF/UA après leur génération?

La création de PDF dotés de fonctions d'accessibilité n'est qu'une partie du processus. La validation confirme que les documents générés répondent effectivement aux exigences techniques de la norme PDF/UA. Plusieurs outils existent à cette fin, veraPDF étant le validateur open-source le plus largement reconnu.

Bien qu'IronPDF ne comprenne pas de validation intégrée, vous pouvez intégrer la validation dans votre flux de travail à l'aide d'outils externes. Le validateur veraPDF est disponible sous la forme d'une application en ligne de commande qui peut être appelée à partir d'un code C#.

Le code présente deux parties : premièrement, il génère un PDF de test à l'aide de RenderHtmlAsPdfUA() avec des métadonnées configurées. Deuxièmement, la méthode ValidateWithVeraPdf() montre comment invoquer veraPDF depuis C# à l'aide de Process.Start(). La méthode configure le processus pour exécuter veraPDF avec le drapeau --flavour ua1 pour la validation PDF/UA-1, capture la sortie et renvoie un booléen indiquant succès/échec en fonction du code de sortie.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/validation.cs
using IronPdf;
using System;
using System.Diagnostics;

// Create the accessible PDF
ChromePdfRenderer renderer = new ChromePdfRenderer();

string htmlContent = @"
        <!DOCTYPE html>
        <html lang='en'>
        <head><title>Test Document</title></head>
        <body>
            <h1>Validation Test</h1>
            <p>This document will be validated for PDF/UA compliance.</p>
        </body>
        </html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(htmlContent);
pdf.MetaData.Title = "Validation Test Document";

string outputPath = "test-document.pdf";
pdf.SaveAs(outputPath);

Console.WriteLine($"PDF created at: {outputPath}");
Console.WriteLine("Run veraPDF validation with:");
Console.WriteLine($"  verapdf --flavour ua1 {outputPath}");

// Validate using veraPDF
string verapdfPath = "verapdf";
ProcessStartInfo startInfo = new ProcessStartInfo
{
    FileName = verapdfPath,
    Arguments = $"--flavour ua1 \"{outputPath}\"",
    RedirectStandardOutput = true,
    RedirectStandardError = true,
    UseShellExecute = false,
    CreateNoWindow = true
};

using (Process process = Process.Start(startInfo))
{
    string output = process.StandardOutput.ReadToEnd();
    process.WaitForExit();

    // veraPDF returns 0 for valid documents
    bool isValid = process.ExitCode == 0;

    Console.WriteLine(isValid ? "Document passes PDF/UA validation." : "Document has validation issues.");
    Console.WriteLine(output);
}
Imports IronPdf
Imports System
Imports System.Diagnostics

' Create the accessible PDF
Dim renderer As New ChromePdfRenderer()

Dim htmlContent As String = "
        <!DOCTYPE html>
        <html lang='en'>
        <head><title>Test Document</title></head>
        <body>
            <h1>Validation Test</h1>
            <p>This document will be validated for PDF/UA compliance.</p>
        </body>
        </html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(htmlContent)
pdf.MetaData.Title = "Validation Test Document"

Dim outputPath As String = "test-document.pdf"
pdf.SaveAs(outputPath)

Console.WriteLine($"PDF created at: {outputPath}")
Console.WriteLine("Run veraPDF validation with:")
Console.WriteLine($"  verapdf --flavour ua1 {outputPath}")

' Validate using veraPDF
Dim verapdfPath As String = "verapdf"
Dim startInfo As New ProcessStartInfo With {
    .FileName = verapdfPath,
    .Arguments = $"--flavour ua1 ""{outputPath}""",
    .RedirectStandardOutput = True,
    .RedirectStandardError = True,
    .UseShellExecute = False,
    .CreateNoWindow = True
}

Using process As Process = Process.Start(startInfo)
    Dim output As String = process.StandardOutput.ReadToEnd()
    process.WaitForExit()

    ' veraPDF returns 0 for valid documents
    Dim isValid As Boolean = process.ExitCode = 0

    Console.WriteLine(If(isValid, "Document passes PDF/UA validation.", "Document has validation issues."))
    Console.WriteLine(output)
End Using
$vbLabelText   $csharpLabel

Adobe Acrobat Pro comprend également des fonctions de vérification de l'accessibilité. Le vérificateur d'accessibilité d'Acrobat Pro effectue des tests complets, notamment la vérification de l'ordre de lecture, la validation des textes alternatifs et l'accessibilité des champs de formulaire. Bien que payant, Acrobat Pro est couramment disponible dans les environnements d'entreprise et fournit des rapports détaillés sur les problèmes d'accessibilité.

Pour les pipelines de test automatisés, l'outil PAC (PDF Accessibility Checker) de la PDF/UA Foundation offre une autre option de validation. PAC offre à la fois une interface graphique et des capacités de ligne de commande, ce qui permet de l'intégrer dans des flux de travail d'intégration continue.

Quelles sont les meilleures pratiques pour maintenir l'accessibilité des PDF dans les applications d'entreprise ?

La création de documents accessibles individuels est simple une fois que vous avez compris les techniques. Le maintien de l'accessibilité à l'échelle d'une entreprise nécessite des approches systématiques et une discipline organisationnelle.

La normalisation des modèles réduit la variabilité et garantit la cohérence. La création d'une bibliothèque de modèles HTML approuvés avec une structure sémantique, des modèles de formulaires accessibles et un style cohérent donne aux développeurs une base qui produit par défaut des documents conformes.

Le code met en œuvre une classe réutilisable AccessibleDocumentService qui encapsule les modèles de génération de PDF. Le constructeur initialise un ChromePdfRenderer partagé avec la création de formulaire activée. Les méthodes publiques telles que CreateReport() et CreateForm() acceptent des paramètres de contenu et appliquent des modèles HTML standardisés avec un style et une structure sémantique cohérents. Une méthode privée ConfigureStandardMetadata() veille à ce que chaque document reçoive les informations appropriées concernant le titre, l'auteur, le créateur et la date. Ce modèle de service assure la conformité à l'accessibilité de tous les documents générés.

:path=/static-assets/pdf/content-code-examples/tutorials/accessible-pdfs-government-compliance/enterprise-service.cs
using IronPdf;
using System;
using System.Web;

ChromePdfRenderer renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CreatePdfFormsFromHtml = true;

string title = "Quarterly Report";
string author = "Finance Team";
string content = "<p>Financial performance overview for Q4 2024.</p>";

// Build report HTML from template
string reportHtml = $@"
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <meta charset='UTF-8'>
            <title>{HttpUtility.HtmlEncode(title)}</title>
            <style>
                body {{
                    font-family: 'Segoe UI', Arial, sans-serif;
                    line-height: 1.6;
                    max-width: 800px;
                    margin: 0 auto;
                    padding: 40px;
                    color: #333;
                }}
                h1 {{ font-size: 28px; color: #1a1a1a; border-bottom: 2px solid #0066cc; padding-bottom: 10px; }}
                h2 {{ font-size: 22px; color: #333; margin-top: 30px; }}
                p {{ margin-bottom: 15px; }}
                table {{ border-collapse: collapse; width: 100%; margin: 20px 0; }}
                th, td {{ border: 1px solid #ddd; padding: 12px; text-align: left; }}
                th {{ background-color: #f5f5f5; }}
            </style>
        </head>
        <body>
            <h1>{HttpUtility.HtmlEncode(title)}</h1>
            {content}
        </body>
        </html>";

PdfDocument pdf = renderer.RenderHtmlAsPdfUA(reportHtml);

// Configure standard metadata
pdf.MetaData.Title = title;
pdf.MetaData.Author = author;
pdf.MetaData.Creator = "Enterprise Document System";
pdf.MetaData.CreationDate = DateTime.Now;
pdf.MetaData.ModifiedDate = DateTime.Now;

pdf.SaveAs("quarterly-report-accessible.pdf");
Imports IronPdf
Imports System
Imports System.Web

Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.CreatePdfFormsFromHtml = True

Dim title As String = "Quarterly Report"
Dim author As String = "Finance Team"
Dim content As String = "<p>Financial performance overview for Q4 2024.</p>"

' Build report HTML from template
Dim reportHtml As String = $"
        <!DOCTYPE html>
        <html lang='en'>
        <head>
            <meta charset='UTF-8'>
            <title>{HttpUtility.HtmlEncode(title)}</title>
            <style>
                body {{
                    font-family: 'Segoe UI', Arial, sans-serif;
                    line-height: 1.6;
                    max-width: 800px;
                    margin: 0 auto;
                    padding: 40px;
                    color: #333;
                }}
                h1 {{ font-size: 28px; color: #1a1a1a; border-bottom: 2px solid #0066cc; padding-bottom: 10px; }}
                h2 {{ font-size: 22px; color: #333; margin-top: 30px; }}
                p {{ margin-bottom: 15px; }}
                table {{ border-collapse: collapse; width: 100%; margin: 20px 0; }}
                th, td {{ border: 1px solid #ddd; padding: 12px; text-align: left; }}
                th {{ background-color: #f5f5f5; }}
            </style>
        </head>
        <body>
            <h1>{HttpUtility.HtmlEncode(title)}</h1>
            {content}
        </body>
        </html>"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdfUA(reportHtml)

' Configure standard metadata
pdf.MetaData.Title = title
pdf.MetaData.Author = author
pdf.MetaData.Creator = "Enterprise Document System"
pdf.MetaData.CreationDate = DateTime.Now
pdf.MetaData.ModifiedDate = DateTime.Now

pdf.SaveAs("quarterly-report-accessible.pdf")
$vbLabelText   $csharpLabel

Les tests automatisés doivent faire partie de votre pipeline d'intégration continue. Tout processus qui génère des PDF doit inclure des étapes de validation qui font échouer la construction lorsque les exigences d'accessibilité ne sont pas respectées. Cela permet d'éviter que des documents inaccessibles n'atteignent le stade de la production.

La formation du personnel est aussi importante que la mise en œuvre technique. Les auteurs du contenu doivent comprendre pourquoi l'accessibilité est importante et comment leurs choix affectent le résultat final. En apprenant aux rédacteurs à utiliser correctement les niveaux de titres, à fournir des descriptions d'images significatives et à bien structurer les tableaux, on obtient un meilleur matériel source qui est converti en PDF conformes.

Le contrôle des versions des modèles et les audits réguliers de l'accessibilité permettent de maintenir la conformité au fil du temps. Au fur et à mesure que les besoins de l'entreprise évoluent et que les modèles sont modifiés, des examens périodiques permettent de s'assurer que les changements n'ont pas introduit par inadvertance des obstacles à l'accessibilité.

La documentation de votre approche de l'accessibilité crée un savoir institutionnel qui survit à la rotation du personnel. L'enregistrement des normes que vous suivez, des outils que vous utilisez pour la validation et des procédures de remédiation pour les problèmes identifiés permet de maintenir des pratiques cohérentes dans l'ensemble de l'organisation.

L'accessibilité n'est pas une réalisation ponctuelle, mais un engagement permanent. Les normes évoluent, les technologies d'assistance s'améliorent et les besoins des utilisateurs changent. Les organisations qui intègrent l'accessibilité dans leurs flux de travail standard au lieu de la traiter après coup sont les mieux placées pour répondre aux exigences actuelles et aux attentes futures.

Les techniques abordées dans ce guide constituent une base solide pour la création de PDF conformes à la section 508 à l'aide d'IronPDF. En combinant une structure HTML adéquate, des métadonnées appropriées, des aides à la navigation et des tests de validation, les développeurs .NET peuvent produire des documents qui répondent aux exigences légales tout en servant véritablement les utilisateurs qui dépendent d'un contenu accessible.

Conclusion

IronPDF simplifie la complexité des normes d'accessibilité PDF, permettant aux développeurs .NET de se concentrer sur le contenu tandis que la bibliothèque gère les exigences sous-jacentes PDF/UA structure. Ce tutoriel couvre la conversion des PDF existants au format PDF/UA, le rendu HTML directement dans les PDF accessibles, la configuration des métadonnées du document et les spécifications linguistiques pour la compatibilité avec les lecteurs d'écran, la création de structures de documents balisés à partir de HTML sémantique, la création de formulaires accessibles et la navigation avec des bookmarks, et la validation de la conformité à l'aide d'outils externes tels que veraPDF.

Lorsque l'accessibilité fait partie d'un cycle de vie de document plus large, ces modèles s'associent naturellement avec la conformité des archives PDF/A pour la conservation à long terme et le traitement par lots pour générer des documents accessibles à grande échelle dans les systèmes gouvernementaux ou de soins de santé.

Prêt à commencer la construction ? Téléchargez IronPDF et essayez-le avec une version d'essai gratuite. La même bibliothèque permet de tout gérer, de la génération d'un seul document accessible aux pipelines de conformité PDF/UA à l'échelle de l'entreprise. Si vous avez des questions sur la mise en œuvre de l'accessibilité ou sur les exigences de la section 508, prenez contact avec notre équipe d'assistance technique.

Questions Fréquemment Posées

Qu'est-ce que la conformité à la section 508 pour les PDF ?

La conformité à la section 508 garantit que les technologies électroniques et informatiques, telles que les PDF, sont accessibles aux personnes handicapées. IronPDF aide à créer des PDF qui répondent à ces normes en vous permettant d'ajouter du texte alt, de construire des tableaux accessibles, et bien plus encore.

Comment puis-je utiliser IronPDF pour convertir des PDF existants en PDF/UA ?

IronPDF propose des fonctionnalités permettant de convertir les PDF existants en PDF/UA, en veillant à ce qu'ils respectent les normes d'accessibilité. Il s'agit notamment d'ajouter les métadonnées nécessaires et de structurer les éléments pour rendre le contenu accessible.

IronPDF peut-il aider à rendre le HTML accessible ?

Oui, IronPDF peut restituer du contenu HTML accessible et conforme aux normes PDF/UA, ce qui facilite la création de documents accessibles à partir de contenu web.

Comment ajouter du texte alt aux images dans les PDF à l'aide d'IronPDF ?

IronPDF vous permet d'ajouter un texte alt aux images dans les PDF, ce qui est crucial pour l'accessibilité. Cette fonctionnalité garantit que les images sont décrites pour les utilisateurs utilisant des lecteurs d'écran.

Quelles sont les fonctionnalités offertes par IronPDF pour la construction de tableaux et de formulaires accessibles ?

IronPDF fournit des outils pour créer des tableaux structurés et des formulaires accessibles, ce qui permet de s'assurer que les données et les champs de saisie sont navigables et compréhensibles pour tous les utilisateurs.

Comment puis-je valider la conformité de mes PDF avec les exigences gouvernementales en utilisant IronPDF ?

IronPDF inclut des outils de validation pour vérifier si vos PDF sont conformes aux exigences de la Section 508 et du PDF/UA, vous aidant ainsi à vous assurer que vos documents respectent les normes d'accessibilité nécessaires.

Est-il possible d'automatiser la création de PDF accessibles avec IronPDF ?

Oui, IronPDF peut être intégré à des flux de travail automatisés afin de produire de manière cohérente des PDF accessibles, rationalisant ainsi le processus de respect des normes de conformité.

Quels sont les langages de programmation compatibles avec IronPdf pour la création de PDF accessibles ?

IronPDF est conçu pour fonctionner avec C#, ce qui permet aux développeurs de créer des PDF accessibles directement dans le cadre .NET.

Existe-t-il des tutoriels pour apprendre à utiliser IronPDF ?

Oui, IronPDF fournit des tutoriels et une documentation complète pour vous guider tout au long du processus de création de PDF accessibles et d'utilisation efficace de toutes ses fonctionnalités.

IronPDF peut-il contribuer à l'accessibilité multilingue des PDF ?

IronPDF prend en charge la création de PDF accessibles multilingues en gérant le texte et les langues Unicode, garantissant ainsi l'accessibilité des documents dans différentes langues.

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 17,386,124 | Version : 2026.2 vient de sortir