IronPDF How-Tos Export PDF/A Documents How to Export PDF/A or PDF/A-3 Format Documents in C# Chaknith Bin Updated:July 28, 2025 Your business is spending too much on yearly subscriptions for PDF security and compliance. Consider IronSecureDoc, which provides solutions for managing SaaS services like digital signing, redaction, encryption, and protection, all for a one-time payment. Explore IronSecureDoc's Documentation IronPDF supports export of PDFs to the PDF/A-3b standard. PDF/A-3B is a strict subset of the ISO PDF specification used to create archival versions of documents with the intent that they will always render exactly the same as when they were saved. Get started making PDFs with NuGet now: Install IronPDF with NuGet PM > Install-Package IronPdf Copy the code PdfDocument.FromFile("input.pdf").SaveAsPdfA("pdfa‑output.pdf", PdfAVersions.PdfA3b); Deploy to test on your live environment Start using IronPDF in your project today with a free trial Free 30 day Trial Section 508 Compliance IronPDF is happy to follow Google's initiative to increase PDF archiving and accessibility and the Section 508 Compliance of PDF documents. In 2021, we moved to rendering PDFs from HTML using the Google Chromium HTML rendering engine. This allows our software to inherit the accessibility work Google has already implemented: Get started with IronPDF Start using IronPDF in your project today with a free trial. First Step: Start for Free How to Convert PDF to PDF/A in C# Download C# Library for Creating PDF/A Documents Load existing or create a PDF from file, HTML, or URL Export a PDF/A Document from an Existing PDF File Export a PDF/A Document from an HTML Design or URL Save the PDF/A compliant document to the desired location PDF/A Versions The two conformance levels that IronPDF supports are A and B. 'A' represents 'accessible,' and 'B' represents 'basic.' These levels are available across PDF/A-1, PDF/A-2, and PDF/A-3 standards. The information below has been taken from Adobe's documentation on PDF/A. Level A conformance meets all requirements in its specification, allowing assistive software to improve accessibility for physically impaired users. Level B has a lower level of conformance, with minimal compliance, focusing on preserving the visual appearance of the file long-term. PDF/A-1: The PDF/A format is based on the original PDF 1.4 version. PDF/A-2: Released in July 2011 as a new standard called ISO 32001-1, this standard includes all features of PDF versions up to 1.7 as well as new features. Its features include the support of JPEG2000 which is handy for scanned documents and specific requirements for customized XMP metadata. PDF/A-3: This PDF/A format includes all of the requirements of Level 2. It also allows the embedding of additional file formats—like XML, CSV, and word processing formats—into PDF/A conforming documents. Please noteIronPdf does not support converting a PDF with an attachment file to PDF/A-3B yet. From an Existing PDF File I have an example PDF "wikipedia.pdf," which was generated using IronPDF and saved as a PDF file. I will load and re-save it as a PDF/A-3B compliant PDF file in this demonstration. Input file: "wikipedia.pdf" Code :path=/static-assets/pdf/content-code-examples/how-to/pdfa-fromfile.cs using IronPdf; // Create a PdfDocument object or open any PDF File PdfDocument pdf = PdfDocument.FromFile("wikipedia.pdf"); // Use the SaveAsPdfA method to save to file pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b); Imports IronPdf ' Create a PdfDocument object or open any PDF File Private pdf As PdfDocument = PdfDocument.FromFile("wikipedia.pdf") ' Use the SaveAsPdfA method to save to file pdf.SaveAsPdfA("pdf-a3-wikipedia.pdf", PdfAVersions.PdfA3b) $vbLabelText $csharpLabel Output The output file is PDF/A-3b compliant: From an HTML Design or URL I have an example HTML design "design.html," which I would like to render from HTML to PDF using IronPDF and then export as a PDF/A compliant file. I will save it as a PDF/A-3B compliant PDF file in this demonstration. HTML Design Example :path=/static-assets/pdf/content-code-examples/how-to/pdfa-fromhtml.cs using IronPdf; // Use the Chrome Renderer to make beautiful HTML designs var chromeRenderer = new ChromePdfRenderer(); // Render an HTML design as a PdfDocument object using Chrome PdfDocument pdf = chromeRenderer.RenderHtmlAsPdf("design.html"); // Use the SaveAsPdfA method to save to file pdf.SaveAsPdfA("design-accessible.pdf", PdfAVersions.PdfA3b); Imports IronPdf ' Use the Chrome Renderer to make beautiful HTML designs Private chromeRenderer = New ChromePdfRenderer() ' Render an HTML design as a PdfDocument object using Chrome Private pdf As PdfDocument = chromeRenderer.RenderHtmlAsPdf("design.html") ' Use the SaveAsPdfA method to save to file pdf.SaveAsPdfA("design-accessible.pdf", PdfAVersions.PdfA3b) $vbLabelText $csharpLabel The output file is PDF/A-3B compliant: URL Example I have the following website "https://www.microsoft.com," which I would like to render from URL to PDF using IronPDF and then export as a PDF/A compliant file. I will save it as a PDF/A-3B compliant PDF file in this demonstration. :path=/static-assets/pdf/content-code-examples/how-to/pdfa-fromurl.cs using IronPdf; // Use the Chrome Renderer to make beautiful HTML designs from URLs var chromeRenderer = new ChromePdfRenderer(); // Render a Website as a PdfDocument object using Chrome PdfDocument pdf = chromeRenderer.RenderUrlAsPdf("https://www.microsoft.com"); // Use the SaveAsPdfA method to save to file pdf.SaveAsPdfA("website-accessible.pdf", PdfAVersions.PdfA3b); Imports IronPdf ' Use the Chrome Renderer to make beautiful HTML designs from URLs Private chromeRenderer = New ChromePdfRenderer() ' Render a Website as a PdfDocument object using Chrome Private pdf As PdfDocument = chromeRenderer.RenderUrlAsPdf("https://www.microsoft.com") ' Use the SaveAsPdfA method to save to file pdf.SaveAsPdfA("website-accessible.pdf", PdfAVersions.PdfA3b) $vbLabelText $csharpLabel The output file is PDF/A-3B compliant: Support Embedding Attachment IronPdf provides the ability to embed files into a PDF document while converting it to PDF/A format. This can be achieved using various input types such as file paths, byte arrays, or streams. Embed with File Paths Allows embedding of files using their file paths. A collection of file paths is provided, and these files are included as attachments during the PDF/A conversion. :path=/static-assets/pdf/content-code-examples/how-to/pdfa-attachment-path.cs using IronPdf; using System.Collections.Generic; PdfDocument pdf = new PdfDocument("Google.pdf"); // Initialize collection of embed file as string of path IEnumerable<string> embedPaths = new[] { "File1.xml", "File2.png" }; // Convert to Pdf/A-3B with embeded files pdf.ConvertToPdfA(embedPaths); Imports IronPdf Imports System.Collections.Generic Private pdf As New PdfDocument("Google.pdf") ' Initialize collection of embed file as string of path Private embedPaths As IEnumerable(Of String) = { "File1.xml", "File2.png" } ' Convert to Pdf/A-3B with embeded files pdf.ConvertToPdfA(embedPaths) $vbLabelText $csharpLabel Embed with Byte Arrays Enables embedding of files by providing the file content as byte arrays along with their respective file types. This is useful when files are already loaded into memory. :path=/static-assets/pdf/content-code-examples/how-to/pdfa-attachment-byte.cs using IronPdf; using System.Collections.Generic; using System.IO; PdfDocument pdf = new PdfDocument("Google.pdf"); // Initialize collection of embed file as Bytes and their file type byte[] fileData1 = File.ReadAllBytes("File1.png"); byte[] fileData2 = File.ReadAllBytes("File2.xml"); var embedFileConfig1 = new EmbedFileConfiguration(EmbedFileType.png); embedFileConfig1.EmbedFileName = "logo.png"; var embedFileConfig2 = new EmbedFileConfiguration(EmbedFileType.xml) { EmbedFileName = "supportSystem.xml", AFDesc = "Internal system", ConformanceLevel = ConformanceLevel.XRECHNUNG, SchemaNamespace = SchemaNamespace.Zugferd1, SchemaPrefix = SchemaPrefix.rsm, PropertyVersion = PropertyVersion.v1p0, AFRelationship = AFRelationship.Supplement, }; IEnumerable<EmbedFileByte> embedBytes = new[] { new EmbedFileByte(fileData1, embedFileConfig1), new EmbedFileByte(fileData2, embedFileConfig2) }; // Convert to Pdf/A-3B with embeded files pdf.ConvertToPdfA(embedBytes).SaveAs("PdfACompliance.pdf"); Imports IronPdf Imports System.Collections.Generic Imports System.IO Private pdf As New PdfDocument("Google.pdf") ' Initialize collection of embed file as Bytes and their file type Private fileData1() As Byte = File.ReadAllBytes("File1.png") Private fileData2() As Byte = File.ReadAllBytes("File2.xml") Private embedFileConfig1 = New EmbedFileConfiguration(EmbedFileType.png) embedFileConfig1.EmbedFileName = "logo.png" Dim embedFileConfig2 = New EmbedFileConfiguration(EmbedFileType.xml) With { .EmbedFileName = "supportSystem.xml", .AFDesc = "Internal system", .ConformanceLevel = ConformanceLevel.XRECHNUNG, .SchemaNamespace = SchemaNamespace.Zugferd1, .SchemaPrefix = SchemaPrefix.rsm, .PropertyVersion = PropertyVersion.v1p0, .AFRelationship = AFRelationship.Supplement } Dim embedBytes As IEnumerable(Of EmbedFileByte) = { New EmbedFileByte(fileData1, embedFileConfig1), New EmbedFileByte(fileData2, embedFileConfig2) } ' Convert to Pdf/A-3B with embeded files pdf.ConvertToPdfA(embedBytes).SaveAs("PdfACompliance.pdf") $vbLabelText $csharpLabel Embed with Streams Provides the capability to embed files using streams for their content, along with their file types. This method is ideal for scenarios where file data is processed as a stream. :path=/static-assets/pdf/content-code-examples/how-to/pdfa-attachment-stream.cs using IronPdf; using System.Collections.Generic; using System.IO; PdfDocument pdf = new PdfDocument("Google.pdf"); // Initialize collection of embed file as Stream and their file type Stream stream1 = new MemoryStream(File.ReadAllBytes("File1.png")); Stream stream2 = new MemoryStream(File.ReadAllBytes("File2.xml")); var embedFileConfig1 = new EmbedFileConfiguration(EmbedFileType.png); embedFileConfig1.EmbedFileName = "logo.png"; var embedFileConfig2 = new EmbedFileConfiguration(EmbedFileType.xml) { EmbedFileName = "supportSystem.xml", AFDesc = "Internal system", ConformanceLevel = ConformanceLevel.XRECHNUNG, SchemaNamespace = SchemaNamespace.Zugferd1, SchemaPrefix = SchemaPrefix.rsm, PropertyVersion = PropertyVersion.v1p0, AFRelationship = AFRelationship.Supplement, }; IEnumerable<EmbedFileStream> embedStreams = new[] { new EmbedFileStream(stream1, embedFileConfig1), new EmbedFileStream(stream2, embedFileConfig2) }; // Convert to Pdf/A-3B with embeded files pdf.ConvertToPdfA(embedStreams).SaveAs("PdfACompliance.pdf"); Imports IronPdf Imports System.Collections.Generic Imports System.IO Private pdf As New PdfDocument("Google.pdf") ' Initialize collection of embed file as Stream and their file type Private stream1 As Stream = New MemoryStream(File.ReadAllBytes("File1.png")) Private stream2 As Stream = New MemoryStream(File.ReadAllBytes("File2.xml")) Private embedFileConfig1 = New EmbedFileConfiguration(EmbedFileType.png) embedFileConfig1.EmbedFileName = "logo.png" Dim embedFileConfig2 = New EmbedFileConfiguration(EmbedFileType.xml) With { .EmbedFileName = "supportSystem.xml", .AFDesc = "Internal system", .ConformanceLevel = ConformanceLevel.XRECHNUNG, .SchemaNamespace = SchemaNamespace.Zugferd1, .SchemaPrefix = SchemaPrefix.rsm, .PropertyVersion = PropertyVersion.v1p0, .AFRelationship = AFRelationship.Supplement } Dim embedStreams As IEnumerable(Of EmbedFileStream) = { New EmbedFileStream(stream1, embedFileConfig1), New EmbedFileStream(stream2, embedFileConfig2) } ' Convert to Pdf/A-3B with embeded files pdf.ConvertToPdfA(embedStreams).SaveAs("PdfACompliance.pdf") $vbLabelText $csharpLabel Explore the EmbedFileConfiguration When converting a PdfDocument to a PDF/A-3 format that includes embedded files, it’s important to configure parameters such as EmbedFilePath, EmbedFileByte, or EmbedFileStream. These settings let you specify the type of file being embedded, its name, and any custom XMP metadata you wish to include. Proper configuration ensures that the embedded content is organized effectively and complies with PDF/A-3 standards. Customizing the XMP metadata allows for additional information about the embedded files, enhancing the overall usability and accessibility of the document. Using the EmbedFileConfiguration class developers can easily customize the values and formats for the file. var config = new EmbedFileConfiguration { EmbedFileName = "Attachment.xml", AFDesc = "Associated File Description", ConformanceLevel = ConformanceLevel.EN16931, SchemaNamespace = SchemaNamespace.facturX, SchemaPrefix = SchemaPrefix.fx, PropertyVersion = PropertyVersion.v1, AFRelationship = AFRelationship.Alternative }; // Load a PDF document var document = PdfDocument.FromFile("wikipedia.pdf"); // Configure embedded file parameters document.EmbedFileFromFilePath("path/to/attachment", config); // Save the document as PDF/A-3b document.SaveAsPdfA3B("output-with-configured-attachment.pdf"); var config = new EmbedFileConfiguration { EmbedFileName = "Attachment.xml", AFDesc = "Associated File Description", ConformanceLevel = ConformanceLevel.EN16931, SchemaNamespace = SchemaNamespace.facturX, SchemaPrefix = SchemaPrefix.fx, PropertyVersion = PropertyVersion.v1, AFRelationship = AFRelationship.Alternative }; // Load a PDF document var document = PdfDocument.FromFile("wikipedia.pdf"); // Configure embedded file parameters document.EmbedFileFromFilePath("path/to/attachment", config); // Save the document as PDF/A-3b document.SaveAsPdfA3B("output-with-configured-attachment.pdf"); Dim config = New EmbedFileConfiguration With { .EmbedFileName = "Attachment.xml", .AFDesc = "Associated File Description", .ConformanceLevel = ConformanceLevel.EN16931, .SchemaNamespace = SchemaNamespace.facturX, .SchemaPrefix = SchemaPrefix.fx, .PropertyVersion = PropertyVersion.v1, .AFRelationship = AFRelationship.Alternative } ' Load a PDF document Dim document = PdfDocument.FromFile("wikipedia.pdf") ' Configure embedded file parameters document.EmbedFileFromFilePath("path/to/attachment", config) ' Save the document as PDF/A-3b document.SaveAsPdfA3B("output-with-configured-attachment.pdf") $vbLabelText $csharpLabel EmbedFileName: A string property representing the name of the embedded file in the PDF/A document. By default, this string is empty. AFDesc: A string property representing the associated file description for the embedded file. By default, this string is empty. ConformanceLevel: The conformance level of embedding XML files applying to XMP Metadata of PDF/A document. Default is ConformanceLevel.EN16931. IronPDF provides different values via the ConformanceLevel enum. SchemaNamespace: The PDF/A Schema NamespaceURI embedding the XML file and applying it to the XMP metadata of the PDF/A document. Default is SchemaNamespace.facturX, with various options available for developers in the SchemaNamespace enum. SchemaPrefix: The PDF/A Schema Prefix for embedding an XML file applying to the XMP Metadata of a PDF/A document. Default is SchemaPrefix.fx, with several options available in the SchemaPrefix enum. PropertyVersion: The property version of the embedding XML file applied to XMP Metadata of PDF/A document. Default is PropertyVersion.v1, with multiple options in the PropertyVersion enum. AFRelationship: The relation of the associated file (embedded file) to the PDF/A document. Several options are available in the AFRelationship enum. Character Display Issues PDF/A requires that all characters in the document are mapped to a visually and semantically correct font. While not all fonts must be embedded, the font used must support the required glyphs. If an incorrect or incomplete font is used, certain characters may appear broken, missing, or incorrectly rendered—especially in languages with special scripts or symbols. For example, in the issue below, the top sample uses the correct font and displays the characters properly, while the bottom sample fails to render them correctly due to font mismatch. Ready to see what else you can do? Check out our tutorial page here: Create PDFs Frequently Asked Questions How can I convert a PDF to PDF/A format in C#? You can use IronPDF's conversion functions to convert a standard PDF into a PDF/A format in C#. This is done by loading the PDF document and saving it with the PDF/A conformance level specified. What is the difference between PDF/A-3b and other PDF/A standards? PDF/A-3b is a subset of the ISO PDF specification focused on long-term preservation of documents by ensuring that they render consistently. Unlike other PDF/A standards, PDF/A-3b allows for the embedding of additional files, such as XML or CSV, within the document. How can I embed files into a PDF/A document using C#? IronPDF allows embedding files such as XML or CSV into a PDF/A document via file paths, byte arrays, or streams. This is configured using the EmbedFileConfiguration class to set parameters like file name, description, and metadata. Can HTML or URL content be converted to PDF/A-3b? Yes, IronPDF can convert HTML content or URLs to PDF/A-3b. This involves rendering the HTML or URL into a PDF format and then saving the document with PDF/A-3b compliance. What are the accessibility features supported in PDF/A documents? IronPDF uses Google's Chromium HTML rendering engine, which inherits accessibility features implemented by Google, thus supporting accessibility for PDF/A documents compliant with Section 508 standards. How can I ensure my PDF/A documents are Section 508 compliant? IronPDF can ensure that your PDF/A documents are Section 508 compliant by leveraging the accessibility features of the Google Chromium HTML rendering engine, which helps in making PDFs accessible for assistive software. What is the purpose of the EmbedFileConfiguration class? The EmbedFileConfiguration class in IronPDF allows developers to configure parameters for embedding files in PDF/A documents, such as specifying file metadata and ensuring compliance with PDF/A-3 standards. Can I convert PDFs with attachments to PDF/A-3b format? IronPDF can convert PDFs with attachments to PDF/A-3b, but the attachments need to be specifically configured and embedded using the appropriate methods provided by IronPDF. What benefits does IronPDF offer for PDF/A conversion? IronPDF offers several benefits for PDF/A conversion, including compliance with archival standards, support for various input formats, the ability to embed additional files, and the inclusion of comprehensive metadata customization. Chaknith Bin Chat with engineering team now Software Engineer Chaknith works on IronXL and IronBarcode. He has deep expertise in C# and .NET, helping improve the software and support customers. His insights from user interactions contribute to better products, documentation, and overall experience. Ready to Get Started? Free NuGet Download Total downloads: 15,030,178 View Licenses