C#でIronPDFを使ってセクション508に準拠したアクセシブルなPDFを作成する方法

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

アクセシブルなPDF生成C# .NETで行うIronPDFは、セクション508WCAG 2.0 AAの要件を満たすPDF/UA準拠ドキュメントを生成します。 IronPDFのRenderHtmlAsPdfUAメソッドは自動的にHTMLから生成されたPDFにタグ付けされたコンテンツ構造、読み上げ順序、代替テキスト処理、アクセシビリティメタデータを追加し、.NET開発者が政府機関、医療プロバイダー、連邦政府の契約を扱うあらゆる組織のためにスクリーンリーダーと互換性のあるドキュメントを構築できるようにします。

TL;DR:クイックスタートガイド

このチュートリアルでは、タグ付き構造の生成からフォームのアクセシビリティやコンプライアンス検証まで、C# .NETでセクション508に準拠し、PDF/UAアクセシブルなドキュメントを作成する方法を説明します。

  • 対象者:政府契約、連邦政府プロジェクト、またはPDFアクセシビリティが法的に要求される医療/教育システムの.NET開発者。
  • 構築するもの: HTMLからのPDF/UA生成、レガシーPDFからPDF/UAへの変換、言語タグ付け、セマンティックHTMLからのタグ付き構造、画像のaltテキスト、アクセシブルテーブル、ブックマークナビゲーション、ラベル付きフォームフィールド。
  • Where it runs: .NET 10、.NET 8 LTS、.NET Framework 4.6.2+、.NET Standard 2.0。
  • このアプローチを使用する場合: PDFがセクション508監査、PDF/UA (ISO 14289)検証、またはWCAG 2.0レベルAA要件に合格しなければならない場合。
  • 技術的に重要な理由 標準的なPDFには意味的な構造がありません。 IronPDFは整形されたHTMLからスクリーンリーダーが必要とするタグ付きコンテンツツリーを自動的に構築します。

わずか数行のコードで、セクション508に準拠したPDF/UAドキュメントを作成します:

Nuget Icon今すぐ NuGet で PDF を作成してみましょう:

  1. NuGet パッケージ マネージャーを使用して IronPDF をインストールします

    PM > Install-Package IronPdf

  2. このコード スニペットをコピーして実行します。

    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. 実際の環境でテストするためにデプロイする

    今すぐ無料トライアルでプロジェクトに IronPDF を使い始めましょう
    arrow pointer

IronPDFを購入または30日間のトライアルにサインアップした後、アプリケーションの最初にライセンスキーを追加してください。

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

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

今日あなたのプロジェクトでIronPDFを無料トライアルで使用開始。

最初のステップ:
green arrow pointer
NuGet 購入の準備ができていませんか?

PM >  Install-Package IronPdf

IronPDFNuGet でチェックしてください。1000万回以上のダウンロードで、C#によるPDF開発を変革しています。 DLL または Windowsインストーラー をダウンロードすることもできます。

目次を参照してください。


セクション 508 コンプライアンスとは何ですか?

508条とは、1973年に制定されたリハビリテーション法を1998年に改正したものです。この連邦法は、連邦政府機関が開発、調達、維持、または使用するすべての電子技術および情報技術について、障害者がアクセスできるようにすることを義務付けています。 翻訳範囲は、官公庁以外にも及びます。 また、連邦政府から資金援助を受けている組織、連邦政府機関と契約している組織、政府機関に技術サービスを提供している組織も遵守しなければなりません。

実用的な意味合いは大きい。 連邦政府の医療プログラムのソフトウェアを構築する請負業者は、単に画面上で正しく見えるPDFレポートを納品することはできません。 これらの文書は、スクリーンリーダーで読みやすく、キーボードで操作でき、支援技術が解釈できるように構成されていなければなりません。 これらの要件を満たさない場合、成果物の不合格、契約の破棄、法的措置の可能性があります。

PDFには、アクセシビリティに関する独自の課題があります。 ブラウザがアクセシビリティ機能を内蔵してレンダリングするHTMLウェブページとは異なり、PDFファイルは自己完結型の文書であり、独自の構造情報を持たなければなりません。 視覚的には完璧に見えるPDFでも、適切なタグ付け、論理的な読み上げ順序、画像の代替テキストが欠けていると、スクリーンリーダーに頼っている人にとってはまったく使い物にならないかもしれません。

コンプライアンス違反がもたらす結果は、法的リスクだけにとどまりません。 アクセシビリティの低い文書を作成する組織は、読者のかなりの部分を効果的に排除しています。 世界保健機関(WHO)によると、世界人口の約16%が何らかの障害を経験しています。 政府サービスや連邦政府が資金を提供するプログラムにおいて、これらの人々を排除することは、不適切な慣行であるだけでなく、公民権保護の違反となります。

PDF/UAとWCAGとは何ですか、また、508条とどのように関連していますか?

さまざまなアクセシビリティ標準の関係を理解することで、開発者が実際に実装する必要があるものが明確になります。 アクセシブルなPDFについて議論する際には、3つの重要な基準が交錯します:508条、WCAG、PDF/UAです。

一般にWCAGとして知られるウェブコンテンツアクセシビリティガイドラインは、ワールド・ワイド・ウェブ・コンソーシアムから生まれました。 これらのガイドラインは、デジタルコンテンツを知覚可能、操作可能、理解可能、堅牢にするための原則を定めています。WCAGは主にウェブコンテンツのために設計されましたが、その原則はPDF文書にも同様に適用されます。 2017年に改訂された508条基準は、準拠のための技術的ベンチマークとしてWCAG 2.0 Level AAを直接取り入れています。 つまり、WCAG 2.0 AA の要件を満たすことは、事実上、電子文書のセクション 508 の要件を満たすことと同じです。

PDF/UAは、PDF/Universal Accessibilityの略で、アクセシブルなPDF文書のために特別に設計されたISO規格(ISO 14289)です。 WCAGがアクセシブルなコンテンツが達成すべきことを記述しているのに対し、PDF/UAは、その目標を達成するためにPDFファイルが内部的にどのように構造化されなければならないかを正確に規定しています。 この規格は、タグ付けされたコンテンツ、メタデータ、言語仕様、代替テキスト、その他多くの技術的要素に関する要件を定義しています。

これらの標準は、補完的なレイヤーだと考えてください。 WCAGは、ユーザーが必要とするアクセシビリティの成果を確立します。 PDF/UAは、これらの成果をPDFフォーマットで実現するための技術仕様を提供します。 508条は、WCAGへの準拠を要求する法的義務を生み出し、その結果、PDF文書の実装経路としてPDF/UAを指し示しています。

開発者にとって、実用的な要点は簡単です。 PDF/UA準拠のドキュメントを作成することで、508条準拠の技術的要件を満たします。 IronPdfは組み込みのアクセシビリティ機能によってこの複雑さの多くを処理し、ライブラリがPDFの構造を管理する間、あなたはコンテンツに集中することができます。

C#で既存のPDFをPDF/UA形式に変換するには?

多くの組織には、アクセシビリティが優先されるようになる前に作成された既存のPDF文書のライブラリがあります。 IronPdfはこれらの文書を一から作り直すのではなく、標準的なPDFをPDF/UAフォーマットに変換することを可能にします。 この変換プロセスでは、支援技術との互換性のために必要なタグ付き構造とメタデータが追加されます。

変換にはSaveAsPdfUAメソッドを使用し、既存のPdfDocumentオブジェクトを受け取ってPDF/UA形式でエクスポートします。 以下はその例です。

入力PDF

この例では、sample-document.pdfを使用します。これは、アクセシビリティ機能のない標準的なPDFで、変換を必要とする典型的なレガシー文書を表しています。

以下のコードは、PdfDocument.FromFile()を使って既存のPDFファイルをロードし、SaveAsPdfUA()を呼び出して、PDF/UA-1に準拠した新しいバージョンをエクスポートしています。 IronPdfは自動的にドキュメントの構造を分析し、必要なタグ付きコンテンツ、メタデータ、アクセシビリティマーカーを追加します。

: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

SaveAsPdfUAメソッドは、ドキュメントの自然言語を指定するオプションのパラメータを受け付けます。 英語のドキュメントの場合、次のように呼び出しを変更します。

入力PDF

この例では、benefits-summary.pdfを使用しています。

コードはPDFをロードし、SaveAsPdfUA()の2番目のパラメータとしてNaturalLanguages.Englishを渡します。 これにより、言語識別子がPDFの構造に埋め込まれ、スクリーンリーダーが正しい英語の発音規則を使用できるようになります。

: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はデフォルトでPDF/UA-1出力を生成します。 変換プロセスでは、既存のPDF構造を分析し、見出し、段落、リスト、その他のコンテンツ要素に適切なタグを追加します。 多くの文書では自動変換がうまく機能しますが、複雑なレイアウトやスキャン画像では、完全なコンプライアンスを達成するために手作業が必要になる場合があります。

アクセシブルな PDF/UA ドキュメントに HTML を直接レンダリングするにはどうすればよいですか?

既存のPDFを変換することで、レガシーコンテンツに対処できますが、新しいドキュメントは、最初からアクセシビリティを考慮して作成することが有益です。 IronPDFのRenderHtmlAsPdfUAメソッドはHTML入力から標準に準拠した出力を直接生成します。 このアプローチでは、整形式のHTMLにすでに存在する意味構造を活用して、構造化されたPDFを作成します。

次の例は、HTML文字列をアクセシブルなPDFにレンダリングする例です。

コードは ChromePdfRenderer インスタンスを作成し、見出しや段落などのセマンティック要素を含む HTML 文字列で RenderHtmlAsPdfUA() を呼び出します。レンダラーはHTML構造をPDFタグとして保持し、MetaData.Titleによって文書タイトルを設定し、準拠した出力を保存します。 HTML要素上のlang='en'属性は、スクリーン・リーダーの言語検出のためにPDFにも引き継がれます。

: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

出力PDF

上記のコードは、意味的に構造化されたPDF/UAドキュメントを生成します:

HTMLには、html要素にlang属性が含まれていることに注目してください。 この属性はPDFにも引き継がれ、スクリーン・リーダーが文書の言語を識別するのに役立ちます。 h1、h2、pのような意味的なHTML要素は、適切なPDFタグに直接翻訳され、支援技術がナビゲートできる論理的な文書構造を作成します。

HTMLファイルURLを文字列ではなくレンダリングするために、IronPdfは対応するメソッドを提供します。

以下のコードは、2つのアプローチを示しています:RenderHtmlFileAsPdf()はローカルのファイルパスからHTMLをロードし、RenderUrlAsPdf()はウェブのURLからコンテンツをフェッチしてレンダリングします。 どちらの方法も標準的なPDFを生成し、それをSaveAsPdfUA()を使ってPDF/UA形式に変換します。 この2段階のアプローチは、アクセシビリティ変換の前に追加処理を行う必要がある場合に効果的です。

: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

アクセシビリティ準拠のためにドキュメントのメタデータを設定するには?

PDFメタデータは、アクセシビリティにおいて複数の役割を果たします。 支援技術は、タイトルや作者などの文書のプロパティをアナウンスし、ユーザーが読んでいるものを識別できるようにします。 検索エンジンと文書管理システムは、インデックス作成と検索にメタデータを使用します。 コンプライアンスバリデーターは、必要なメタデータフィールドが入力されていることをチェックします。

IronPdfはPdfDocumentオブジェクトのMetaDataプロパティを通してメタデータを公開します。 アクセシビリティに最も関係するのは、以下の特性です。

入力PDF

この例では、enrollment-guide-draft.pdfを使用しています。enrollment-guide-draft.pdfは、アクセシビリティのコンプライアンスと文書管理のために包括的なメタデータが必要な、給付金登録ガイドのドラフトです。

コードは既存のPDFを読み込み、すべての主要なメタデータプロパティを設定します:Title(スクリーンリーダーによってアナウンスされます)、Author(ソースを特定します)、Subject(簡単な説明)、Keywords(検索性のため)、Creator(元のアプリケーション)、および日付スタンプです。 最後に、SaveAsPdfUA()は、メタデータと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

タイトルは特に注意が必要です。 PDFビューアは、タイトルバーやタブにファイル名や文書のタイトルを表示することができます。 アクセシビリティの観点から、文書のタイトルを表示する必要があります。 Employee Benefits Enrollment Guide 2024"のようなタイトルは、"doc_final_v3_revised.pdf"のようなファイル名よりもはるかに有用です。

HTMLから新しいPDFを作成するとき、保存する前にメタデータを設定することができます。

コードは、RenderHtmlAsPdfUA()を使ってHTMLを直接PDF/UA形式にレンダリングし、SaveAs()を呼び出す前に、結果のPdfDocumentオブジェクトにメタデータプロパティのフルセットを設定します。 このアプローチは、アクセシビリティ構造とメタデータを単一のワークフローに組み込み、新しい準拠文書の生成に理想的です。

: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

スクリーンリーダー用に文書言語を指定するにはどうすればよいですか?

言語仕様は、コンテンツの発声方法に直接影響する基本的なアクセシビリティ要件です。 支援技術がテキストに遭遇すると、指定された言語を使用して、適切な発音規則、音声、および読み上げパターンを選択します。 言語指定のない文書は、ソフトウェアに推測を強いるため、文字化けや理解不能な音声出力になることがよくあります。

PDF/UAに準拠するため、文書は主要言語を宣言する必要があります。 IronPDFはSaveAsPdfUAメソッドの自然言語パラメータを通してこれを処理します。

コードは、2つの言語シナリオを示します。 最初の方法は英語の HTML コンテンツをレンダリングし、NaturalLanguages.English で保存します。 2つ目の方法はスペイン語のコンテンツを扱い、HTMLではlang='es'を、保存呼び出しではNaturalLanguages.Spanishを使用します。 言語設定は、スクリーン・リーダーがドキュメントの主要言語の正しい発音規則を適用することを保証します。

: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はNaturalLanguages列挙を通して多くの言語をサポートしています。 一般的な選択肢としては、英語、スペイン語、フランス語、ドイツ語、ポルトガル語、中国語、日本語、韓国語、アラビア語などがあります。

複数の言語を含むドキュメントの場合、主要なドキュメントの言語は、主要なコンテンツを反映する必要があります。 アシスト技術では、時折、外国語のフレーズをうまく処理することができますが、多言語でかなりの内容を含む文書には、より複雑な課題があり、専門的なアプローチが必要になることがあります。

HTMLからアクセシブルなタグ付きPDF構造を作成するには?

タグ付きPDFの構造は、アクセシビリティのバックボーンを形成します。 タグは、コンテンツの論理的な構成を定義し、見出しと段落を区別し、リストとリスト項目を識別し、表をマークアップし、読む順序を確立します。 正しいタグ付けがなければ、支援技術はユーザーに文書の構造を伝えることができません。

IronPdfでタグ付けされたPDFを作成する最も効率的な方法は、セマンティックHTMLから始めることです。 クロムレンダリングエンジンは、PDFに変換するときにHTML構造を保持し、HTML要素を対応するPDFタグに変換します。 良いHTMLを書けば、自動的に良いPDFの構造が出来上がります。

次の例は、適切なセマンティックマークアップを示しています。

コードは、明確な見出し階層(メインタイトルにはh1、セクションにはh2、サブセクションにはh3)、箇条書きには順序なしリスト(ul/li)、番号列には順序付きリスト(ol/li)を持つHTMLドキュメントを構築します。 RenderHtmlAsPdfUA()メソッドは、これらのセマンティック要素を、支援技術がナビゲートできる対応するPDFタグに変換します。

: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

出力PDF

このPDFは、ナビゲーションのための見出し階層とリスト構造を維持します:

この例の見出しの階層に注目してください。 ドキュメントには、メインタイトルのh1が1つあり、主要セクションのh2要素、サブセクションのh3要素が続きます。 この階層構造は、アクセシビリティに不可欠です。 支援技術のユーザーは、見出しの間をジャンプしてドキュメントをナビゲートすることが多いため、論理的な構造によって、必要なコンテンツをすばやく見つけることができます。

リストは、順序なしリストにはul、順序付きリストにはolで意味的に扱われます。 各li要素は、PDFのタグ付きリスト項目になります。 支援技術は、リストに含まれる項目の数を示し、各項目を順番に読み上げることで、リストをアナウンスします。

スクリーンリーダーとの互換性のために画像にオルトテキストを追加するにはどうすればよいですか?

画像は基本的なアクセシビリティの課題です。 視覚コンテンツは、目の見えないユーザーや弱視のユーザーには認識できません。 代替テキストは、一般的にaltテキストと呼ばれ、画像の代わりに発表できるテキストの説明を提供します。

HTMLからPDFを生成する際、img要素のalt属性は代替テキストとしてPDFに反映されます。

このコードでは、2つのチャート画像を含む販売レポートを作成します。 各img要素には、チャートの種類だけでなく、チャートのデータを説明する詳細なalt属性が含まれています。 例えば、altテキストには、実際の販売数や地域比較を明記します。 RenderHtmlAsPdfUA()メソッドは、これらの説明を代替テキストとしてPDFに埋め込み、スクリーン・リーダーが、目の見えるユーザーがチャートを見ることで得られるのと同じ洞察を伝えられるようにします。

: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

効果的なaltテキストを書くには、画像が伝える情報を理解する必要があります。 チャートやグラフの場合、altテキストは、チャートの存在を示すだけでなく、表示されるデータを説明する必要があります。 棒グラフ"と言っても、有益な情報は得られません。 第3四半期の売上高を4つの地域で比較した棒グラフで、西部が320万ドルでトップ"と説明することで、視覚障害のあるユーザーにも、目の見えるユーザーがグラフを見ることで得られるのと同じ洞察を与えることができます。

情報提供を目的としない装飾的な画像は、alt属性を空にしてください。 これは、スクリーン・リーダーに対して、画像をスキップできることを示すものです:

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

PDFドキュメントでアクセシブルな表を作成するには

テーブルは、2次元のデータ間の関係を符号化するため、複雑なアクセシビリティを考慮する必要があります。 目の見えるユーザーは、行や列を視覚的にスキャンして、セルとヘッダーの関係を理解することができます。 支援技術に依存するユーザーは、正しいマークアップによってこの関係を明確に定義する必要があります。

HTMLは、アクセシブルなテーブルに必要な構造要素を提供します。 重要な要素には、ヘッダー・セルのth、データ・セルのtd、ヘッダーが行に適用されるのか列に適用されるのかを明確にするscope属性などがあります。

このコードは、適切なアクセシビリティマークアップで従業員名簿テーブルを作成します。caption要素は、コンテンツの前に発表されるテーブルのタイトルを提供します。 ヘッダーセルは、thscope="col"を使用して、その列のすべてのセルに適用されることを示します。 theadtbody要素は、構造的なセクションを区切ります。 IronPDFのRenderHtmlAsPdfUA()はPDF構造内のこれらの関係を保持し、スクリーンリーダーがデータセルを列ヘッダーと関連付けることを可能にします。

: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

出力PDF

出力には、ヘッダの関連付けを含む正しい構造の表が含まれます:

th要素のscope属性は非常に重要です。 scope="col "を設定すると、ヘッダーがその列のすべてのセルに適用されることを示します。 各行の最初のセルが行のヘッダーとなるテーブルの場合は、代わりに scope="row" を使います。 行ヘッダーと列ヘッダーの両方がある複雑な表では、両方の属性が必要です。

caption要素は、表の内容を読む前に告知される表のタイトルを提供します。 これにより、ユーザーは、これからどのようなデータを聞こうとしているのか、文脈を理解することができます。

マージされたセルや不規則な構造を持つテーブルの場合、ヘッダーやidのような追加属性は、データセルと対応するヘッダーを明示的に接続することができます。 ただし、アクセシビリティの観点から、行と列が一貫したシンプルな表構造が望ましい。

ドキュメントのアクセシビリティのためにブックマークやナビゲーションを追加するにはどうすればよいですか?

ブックマークは、すべてのユーザーが長いドキュメントを読み進める際の目印となりますが、アクセシビリティの面では特に重要です。 視覚的にページをスキャンできないユーザーは、興味のあるセクションを見つけるためにブックマークを頼りにしています。これらの構造化されたアウトラインは、特定のコンテンツに直接ジャンプすることができます。

IronPdfは階層的なブックマーク構造をプログラムで作成することをサポートします。

コードは、複数の章からなる従業員ハンドブックをレンダリングし、Bookmarksコレクションを使用してブックマーク階層をプログラムで追加します。 トップレベルのブックマークは、AddBookMarkAtEnd()とページインデックスによって、章の開始ページを指します。 サブセクションの子ブックマークは、親のChildrenプロパティを通して追加され、入れ子になったナビゲーションツリーを作成します。 ページインデックスパラメータはゼロベースなので、0ページ目が最初のページになります。

: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

出力PDF

生成されたPDFには、セクションに素早くアクセスできるよう、ナビゲーション可能なブックマークパネルが含まれています:

AddBookMarkAtEndのページインデックスパラメータは、ゼロベースのインデックスを使用します。 Childrenプロパティによって作成された入れ子のブックマークは、ドキュメントの構造を反映した階層構造を確立します。

正しい見出し構造を持つHTMLドキュメントの場合、IronPdfは自動的にリンクされたナビゲーションを含む目次を生成することができます。

このコードでは、RenderingOptions.TableOfContentsTableOfContentsTypes.WithPageNumbersに設定することで、TOCの自動生成を可能にしています。 HTMLには、id="ironPdf-toc"のプレースホルダーdivが含まれており、そこに生成された目次が挿入されます。 IronPDFは見出し要素(h1, h2など)をスキャンし、ページ番号を含む階層的なTOCを構築し、プレースホルダーの位置に挿入します。

: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

id="ironPdf-toc "のdiv要素は、生成された目次が表示される場所を示しています。 IronPDFは見出し要素からTOCを構築し、各セクションにジャンプするクリッカブルリンクを作成します。

適切なラベルでアクセシブルな PDF フォームを作成するにはどうすればよいですか?

インタラクティブなフォームは、アクセシビリティに特に注意が必要です。 すべての入力フィールドには、期待される入力を知らせることができるように、プログラムで関連付けられたラベルが必要です。 視覚的なラベルだけでは、支援技術がフォームを正しく解釈するために必要な根本的なつながりがないため、不十分です。

IronPDFはHTMLフォーム要素をインタラクティブなPDFフォームフィールドとしてレンダリングします。 適切なHTMLフォームのマークアップは、アクセシブルなPDFフォームに変換されます。

RenderingOptions.CreatePdfFormsFromHtml = trueを設定することで、フォームフィールドの作成が可能になります。 各入力は、ラベルのfor属性と一致する一意のidを持ち、ラジオボタンは説明的なlegendを持つfieldsetにグループ化され、チェックボックスは関連するラベルを持ちます。 RenderHtmlAsPdfUA()メソッドは、これらの要素を、スクリーンリーダーのためにラベルの関連付けを保持したインタラクティブなPDFフォームフィールドに変換します。

: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

出力PDF

生成されるPDFには、正しいラベルの関連付けがされたインタラクティブなフォームフィールドが含まれます:

この例文には、いくつかのアクセシビリティ・パターンがあります。 各入力は、ラベルのfor属性と一致する一意のid属性を持っています。 この接続により、ユーザーがそのフィールドにタブでアクセスしたときに、"Full Name, edit text "とアナウンスすることができます。 ラジオボタンは、グループの目的を説明する凡例付きのフィールドセット内にグループ化されています。 チェックボックスのラベルは、標準的なフォームの規則に従って、入力要素の後に配置されます。

CreatePdfFormsFromHtml レンダリングオプションは、IronPDFがフォームを静的に表現するのではなく、インタラクティブなフォームフィールドを作成するために有効にする必要があります。

生成後にPDF/UAコンプライアンスを検証するにはどうすればよいですか?

アクセシビリティ機能を備えたPDFの作成は、プロセスの一部に過ぎません。 検証では、生成されたドキュメントが実際にPDF/UA標準の技術要件を満たしていることを確認します。 この目的のためにいくつかのツールが存在し、veraPDFは最も広く認知されているオープンソースのバリデータです。

IronPDFはバリデーションを内蔵していませんが、外部ツールを使ってバリデーションをワークフローに統合することができます。 veraPDFバリデーターは、C#コードから呼び出せるコマンドラインアプリケーションとして利用可能です。

まず、メタデータが設定されたRenderHtmlAsPdfUA()を使ってテストPDFを生成します。 次に、ValidateWithVeraPdf()メソッドでは、Process.Start()を使ってC#からveraPDFを呼び出す方法を示しています。 このメソッドは、PDF/UA-1検証のために--flavour ua1フラグでveraPDFを実行するようにプロセスを構成し、出力をキャプチャし、終了コードに基づいて合格/不合格を示すブール値を返します。

: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には、アクセシビリティのチェック機能も含まれています。 Acrobat Proのアクセシビリティ・チェッカーは、読み順の検証、代替テキストの検証、フォーム・フィールドのアクセシビリティを含む包括的なテストを実行します。 無料ではありませんが、Acrobat Proは企業環境では一般的に利用可能で、アクセシビリティの問題に関する詳細なレポートを提供しています。

自動テストパイプラインについては、PDF/UA FoundationのPAC(PDFアクセシビリティチェッカー)ツールが別の検証オプションを提供しています。 PACは、グラフィカル・インターフェースとコマンドライン機能の両方を提供するため、継続的インテグレーション・ワークフローへの統合に適しています。

企業アプリケーションでアクセシブルなPDFを維持するためのベストプラクティスとは

個々のアクセシブルな文書の作成は、テクニックを理解すれば簡単です。 企業全体でアクセシビリティを維持するには、体系的なアプローチと組織の規律が必要です。

テンプレートの標準化により、ばらつきを減らし、一貫性を確保します。 セマンティックな構造、アクセス可能なフォームパターン、一貫したスタイルを持つ、承認されたHTMLテンプレートのライブラリを作成することで、開発者はデフォルトで準拠した出力を生成する基盤を得ることができます。

コードは、PDF生成パターンをカプセル化した再利用可能なAccessibleDocumentServiceクラスを実装しています。 コンストラクタは、フォームの作成を有効にした共有の ChromePdfRenderer<//code> を初期化します。 CreateReport()CreateForm()のようなパブリックメソッドは、コンテンツパラメータを受け入れ、一貫したスタイルと意味構造を持つ標準化されたHTMLテンプレートを適用します。 private ConfigureStandardMetadata()メソッドは、すべてのドキュメントが適切なタイトル、作者、作成者、および日付情報を受け取るようにします。 このサービスパターンでは、生成されるすべてのドキュメントでアクセシビリティのコンプライアンスを実施します。

: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

自動テストは、継続的インテグレーションパイプラインの一部であるべきです。PDFを生成するすべてのプロセスには、アクセシビリティ要件が満たされていない場合にビルドを失敗させる検証ステップを含める必要があります。 これにより、アクセス不能なドキュメントが本番環境で使用されるのを防ぐことができます。

スタッフのトレーニングは、技術的な実装と同じくらい重要です。 コンテンツ作成者は、アクセシビリティが重要な理由と、その選択が最終的なアウトプットにどのように影響するかを理解する必要があります。 見出しレベルを正しく使用し、意味のある画像説明を提供し、表を適切に構成するようライターに指導することで、準拠したPDFに変換されるより良いソース資料が作成されます。

テンプレートのバージョン管理と定期的なアクセシビリティ監査は、長期にわたるコンプライアンスの維持に役立ちます。ビジネス要件が進化し、テンプレートが修正されると、定期的なレビューによって、変更によって不注意にアクセシビリティの障害が発生していないことが確認されます。

アクセシビリティ・アプローチを文書化することで、スタッフの入れ替わりにも耐えられる組織的な知識が生まれます。 どの標準に従うか、検証のためにどのツールを使用するか、特定された問題に対してどのような修正手順があるかを記録することは、組織全体で一貫した慣行を維持するのに役立ちます。

アクセシビリティは、一度だけの達成ではなく、継続的な取り組みです。 標準は進化し、支援技術は改善され、ユーザーのニーズは変化します。 アクセシビリティを後回しにするのではなく、標準的なワークフローに組み込むことで、現在の要件と将来の期待の両方を満たすことができます。

このガイドでカバーされているテクニックは、IronPDFを使ってセクション508に準拠したPDFを作成するための確かな基礎を提供します。 適切なHTML構造、適切なメタデータ、ナビゲーション補助、バリデーションテストを組み合わせることで、.NET開発者は法的要件を満たしながら、アクセシブルなコンテンツに依存するユーザーに真に応える文書を作成することができます。

結論

IronPDFは、PDFアクセシビリティ標準の複雑さを簡素化し、.NET開発者がコンテンツに集中できるようにする一方で、ライブラリは基盤となるPDF/UA構造要件を処理します。 このチュートリアルでは、既存のPDFをPDF/UA形式に変換すること、アクセシブルなPDFにHTMLを直接レンダリングすることドキュメントのメタデータを設定すること、スクリーンリーダーとの互換性のための言語仕様について説明しました、意味的HTMLからタグ付き文書構造を作成すること、アクセシブルなフォームブックマークによるナビゲーションを構築すること、veraPDFのような外部ツールを使ってコンプライアンスを検証すること。

アクセシビリティがより広いドキュメントのライフサイクルの一部である場合、これらのパターンは、長期保存のためのPDF/Aアーカイブ コンプライアンスや、政府や医療システム全体でアクセシブルなドキュメントを大規模に生成するためのバッチ処理と自然に組み合わされます。

構築開始の準備はできましたか? IronPdfをダウンロードして無料トライアルでお試しください。 同じライブラリで、単一のアクセシブルな文書生成から、企業全体のPDF/UAコンプライアンス・パイプラインまで、すべてを処理します。 アクセシビリティの実装やセクション 508 の要件について質問がある場合は、当社のエンジニアリング サポート チームにお問い合わせください。

よくある質問

PDFの508条準拠とは何ですか?

セクション508コンプライアンスは、PDFなどの電子技術や情報技術が障害者にとってアクセシブルであることを保証します。IronPDFはaltテキストの追加やアクセシブルなテーブルの作成などを可能にし、これらの基準を満たすPDFの作成を支援します。

既存のPDFをPDF/UAに変換するためにIronPdfをどのように使用できますか?

IronPDFは既存のPDFをPDF/UAに変換する機能を提供し、アクセシビリティ基準を満たしていることを保証します。これには必要なメタデータの追加や、コンテンツをアクセシブルにするための要素の構造化が含まれます。

IronPdfはアクセシブルなHTMLのレンダリングに役立ちますか?

IronPdfはアクセシブルでPDF/UA標準に準拠したHTMLコンテンツをレンダリングすることができ、ウェブコンテンツからアクセシブルなドキュメントを簡単に作成することができます。

IronPDFを使ってPDFの画像にaltテキストを追加するにはどうすればいいですか?

IronPDFはPDF内の画像にaltテキストを追加することができます。この機能により、スクリーンリーダーに頼っているユーザーにも画像が説明されるようになります。

IronPdfはアクセシブルなテーブルやフォームを作成するためにどのような機能を提供しますか?

IronPdfはアクセシブルな構造化されたテーブルやフォームを作成するツールを提供し、すべてのユーザーがデータや入力フィールドをナビゲートし、理解できるようにします。

IronPDFを使ってPDFが政府の要求事項に準拠していることをどのように検証できますか?

IronPDFにはPDFが508条やPDF/UAの要件に準拠しているかどうかをチェックする検証ツールが含まれており、あなたのドキュメントが必要なアクセシビリティ基準を満たしていることを保証します。

IronPDFでアクセシブルなPDFを自動作成することは可能ですか?

IronPdfは自動化されたワークフローに統合され、一貫してアクセシブルなPDFを作成し、コンプライアンス基準を満たすプロセスを合理化します。

アクセシブルなPDFを作成するためにIronPDFと互換性のあるプログラミング言語は何ですか?

IronPdfはC#で動作するように設計されており、開発者は.NETフレームワーク内でアクセシブルなPDFを直接作成することができます。

IronPDFの使い方を学ぶためのチュートリアルはありますか?

はい、IronPdfは包括的なチュートリアルとドキュメントを提供し、アクセシブルなPDFの作成とすべての機能の効果的な活用をガイドします。

IronPdfは多言語PDFアクセシビリティをサポートできますか?

IronPdfはUnicodeテキストと言語を扱うことにより、多言語でアクセシブルなPDFの作成をサポートし、異なる言語のドキュメント間のアクセシビリティを保証します。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 17,386,124 | バージョン: 2026.2 リリース