How to Archive PDFs with PDF/A Compliance in C

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

IronPDF ile C#'ta PDF/A uyumluluğu, .NET geliştiricilerine, ISO 19005 standartlarına uyan arşivleme PDF'leri oluşturmak, dönüştürmek ve doğrulamak için doğrudan bir yol sunar — belgelerin herhangi bir sistemde aynı şekilde görüntülenmesini sağlar, şimdi veya on yıllar sonra. Mevcut dosyaları PDF/A-1b, PDF/A-2b veya PDF/A-3b olarak dönüştürmek ve ZUGFeRD ve Factur-X e-faturalama uyumluluğu için kaynak verileri eklemekten, HTML'i PDF/A'ya dönüştürmeye kadar, IronPDF, .NET ekosisteminden çıkmadan tam PDF/A dönüştürme iş akışını yönetir.

Kısa-Özet: Hızlı Başlangıç Kılavuzu

Bu kılavuz, C#'ta PDF/A uyumlu belgeler oluşturma, dönüştürme ve doğrulama konularını kapsar — e-faturalama formatları ve gerçek dünya hükümet arşiv gereksinimlerini dahil eder.

  • Bu kimler için: Uzun süreli depolama veya düzenlenmiş arşivleme için belgeler oluşturan uygulamalar oluşturan .NET geliştiricileri — hükümet kayıt yönetimi, yasal dosyalamalar, finansal denetim izleri, sağlık kayıtları saklama veya PDF/A'nın zorunlu bir uyum gereksinimi olduğu e-faturalama platformları.
  • Ne yapacaksınız: Sıfırdan HTML'den PDF/A'ya dönüştürme, mevcut PDF'leri PDF/A-1b/2b/3b'ye dönüştürme, ZUGFeRD/Factur-X e-faturalama için gömülü kaynak veri ekleme, PDF/A uyumluluk doğrulaması ve başarısızlık raporlama, NARA, mahkeme belgeleri ve tıbbi kayıt gereksinimleri için gerçek dünya arşivleme kalıpları oluşturma.
  • Nerede çalışır: Herhangi bir .NET ortamı — .NET 10, .NET 8 LTS, .NET Framework 4.6.2+, .NET Standard 2.0. PDF/A dönüştürme ve doğrulama tamamen yerel çalışır; üretim için harici doğrulayıcı araçlara gerek yoktur.
  • Bu yaklaşımı ne zaman kullanmalısınız: Uygulamanızın uzun vadeli hayatta kalması gereken belgeler oluşturduğunda — faturalar, sözleşmeler, uyum raporları, mahkeme dosyaları veya tıbbi kayıtlar — ve düzenlemelere uygun olarak (NARA, AB arşiv standartları, HIPAA, SEC) kendi kendine yeten, doğrulanabilir PDF/A formatı gerektirir.
  • Teknik olarak neden önemlidir: Standart PDF'ler harici yazı tiplerine referans verebilir, etkileşimli içerikler ekleyebilir ve sistemlere özgü sonuçlar sağlayabilir — bunların tümü zamanla bozulabilir. PDF/A, bu bağımlılıkları biçim düzeyinde yasaklar, görüntüleme için gerekli olan her şeyi dosyanın içine yerleştirerek, gelecekte herhangi bir uyumlu görüntüleyicide sonsuza dek aynı çıktıyı garanti eder.

Mevcut bir PDF'yi PDF/A'ya sadece birkaç kod satırıyla dönüştürün:

  1. IronPDF aşağıdaki NuGet Paket Yöneticisi ile yükleyin

    PM > Install-Package IronPdf
  2. Bu kod parçacığını kopyalayın ve çalıştırın.

    using IronPdf;
    
    PdfDocument pdf = PdfDocument.FromFile("report.pdf");
    pdf.SaveAsPdfA("archived-report.pdf", PdfAVersions.PdfA3b);
  3. Canlı ortamınızda test için dağıtım yapın

    Ücretsiz deneme ile bugün projenizde IronPDF kullanmaya başlayın

    arrow pointer

IronPDF'yi satın aldıktan veya 30 günlük denemeye kaydolduktan sonra, başvurunuzda lisans anahtarınızı ekleyin.

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

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

NuGet NuGet ile yükleyin

PM >  Install-Package IronPdf

NuGet'te hızlı kurulum için https://www.nuget.org/packages/IronPdf'i kontrol edin. 10 milyonun üzerinde indirme ile, C# ile PDF geliştirmeyi dönüştürüyor. DLL veya Windows yükleyici'yi de indirebilirsiniz.

İçindekiler


PDF/A Nedir ve Neden Önemlidir?

PDF/A, elektronik belgelerin uzun vadeli, güvenilir arşivlenmesi için tasarlanmış ISO standartlaştırılmış bir PDF formatı alt kümesidir (ISO 19005). Standart bir PDF'nin aksine, harici yazı tiplerine referans verebilir, dış içeriklere bağlantı yapabilir ve sistemlere özgü görüntüleme davranışlarına güvenebilirken, bir PDF/A dosyası tamamen kendi başına yeterli bir yapıdır. Belgeyi görüntülemek için gereken her yazı tipi, renk profili ve meta veri parçası dosyanın içine doğrudan gömülüdür.

Bu önemlidir çünkü PDF/A belgesi, bugün ya da 100 yıl sonra, uyumlu herhangi bir görüntüleyicide, işletim sistemi veya yazılım sürümü fark etmeksizin aynı şekilde görüntülenecektir. Kaybolabilecek harici kaynaklara bağımlılık yoktur, belirli bir yazı tipinin yüklenmesi gerektiğine dair bir bağımlılık yoktur ve renklerin veya şeffaflığın nasıl gösterileceği konusunda belirsizlik yoktur.

Teknik dayanıklılığın ötesinde, PDF/A uyumluluğu sıklıkla katı bir gerekliliktir — sadece en iyi uygulama değildir. PDF/A'yı zorunlu kılan sektörler ve kurumlar şunlardır:

Hukuk ve yargı sistemleri — ABD, AB ve diğer birçok yargı bölgesinde mahkemeler, elektronik dosyalamalar için PDF/A'yı önerir veya kuvvetle tavsiye eder. ABD federal mahkeme sisteminin CM/ECF dosyalama standartları, uzun vadeli kayıt tutma için PDF/A'yı tercih edilen format olarak referans alır.

Hükümet kurumları — ABD Ulusal Arşivler ve Kayıtlar Yönetimi (NARA), kalıcı elektronik kayıtların aktarımı için kabul edilen format olarak PDF/A'yı belirtir. Benzer şekilde, Avrupa Komisyonu belirli resmi yayınlar ve düzenleyici dosyalamalar için PDF/A'yı zorunlu kılar.

Finansal hizmetler ve denetim — SEC gibi düzenleyici otoriteler PDF/A dosyalamalarını kabul eder ve iç denetim ekipleri, finansal tabloların, raporların ve destekleyici belgelerin değiştirilemez ve zamanla doğrulanabilir olmalarını sağlamak için sıklıkla PDF/A benimser.

Sağlık — Tıbbi kayıtları saklama düzenlemeleri (ABD'deki HIPAA gibi) belirli bir dosya formatını zorunlu kılmasa da, PDF/A hasta kayıtlarının, görüntüleme raporlarının ve klinik belgelerin arşivlenmesi için fiili standart haline gelmiştir çünkü uzun vadeli okunabilirlik sağlar.

Kısacası, PDF/A, belgelerin zaman, sistemler ve örgütsel sınırlar boyunca değişmeden kalmasını sağlaması gereken formattır. Uygulamanızın yıllar sonra örneğin faturalar, sözleşmeler, uyum raporları, tıbbi kayıtlar gibi referans verilebilecek belgeler oluşturması gerekiyorsa — PDF/A doğru tercihtir.


PDF/A Versiyonları Açıklanıyor

PDF/A standardı, her birinin üzerinde oluşturularak ek PDF özelliklerini desteklemek için ve arşivleme garantilerini sıkı bir şekilde koruyarak birkaç sürüm geçirdi. Versiyonlar arasındaki farkları anlamak, kullanım durumu için doğru olanı seçmek açısından önemlidir.

PDF/A-1 (Temel Arşivleme)

PDF/A-1 (ISO 19005-1:2005), PDF 1.4'e dayanan standardın ilk sürümüydü. Tüm yazı tiplerinin gömülü olması gerektiği temel arşivleme gerekliliklerini belirledi; şifreleme yasaktır; ses/video içeriği izin verilmez; JavaScript yasaktır. PDF/A-1 iki uyumluluk seviyesiyle gelir:

PDF/A-1b (temel): Belgenin güvenilir şekilde görsel yeniden üretilmesini sağlar. Bu, minimum uyumluluk seviyesidir ve belgenin doğru göründüğünü garanti eder.

PDF/A-1a (erişilebilir): 1b'ye ek olarak, erişilebilirlik için etiketli içerik, Unicode karakter eşlemesi ve mantıksal okuma sırası dahil olmak üzere yapısal ve anlamsal gereksinimler ekler. Bu daha yüksek bir standarttır ve erişilebilirlik uyumu önemli olduğunda gereklidir.

PDF/A-1 en yaygın olarak desteklenen sürümdür ve bugün hala kullanılmaktadır, özellikle yasal ve hükümet bağlamlarında geniş uyumluluğun daha yeni özelliklere karşı öncelikli olduğu durumlarda.

PDF/A-2 (JPEG2000, Şeffaflık)

PDF/A-2 (ISO 19005-2:2011), PDF 1.7'ye dayanmaktadır ve PDF/A-1'de olmayan özellikleri desteklemektedir:

JPEG2000 görüntü sıkıştırma: PDF/A-1'deki JPEG sıkıştırmasından daha iyi kalite-ölçü oranları sunar.

Şeffaflık ve katman desteği: Bütün her şeyin opak unsurlara dönüştürülmeden daha karmaşık görsel düzenler oluşturmasına olanak tanır.

Gömülü PDF/A ekleri: PDF/A-2 belgeleri, ekler olarak diğer PDF/A uyumlu dosyaları gömebilir (ancak yalnızca PDF/A dosyaları, keyfi formatlar değil).

PDF/A-2, PDF/A-1 (2b ve 2a) ile aynı uygunluk düzeylerini içerir; buna ek olarak, tüm metinler için Unicode eşlemesi gerektiren ancak a seviyesindeki tam yapısal etiketlemeyi gerektirmez.

PDF/A-3 (Gömülü Dosyalar)

PDF/A-3 (ISO 19005-3:2012), modern iş akışlarına en büyük genişlemedir. PDF/A-2 ile aynı temeli (PDF 1.7) paylaşır ve tüm özelliklerini korur, ancak bir kritik kabiliyeti ekler: PDF/A belgesine herhangi bir formatta dosyalar gömme kabiliyeti.

Bu, orijinal XML kaynak verisini, CSV dışa aktarımlarını, e-tablo dosyalarını veya diğer makine tarafından okunabilir dosyaları insan tarafından okunabilir görsel belge yanına ekleyebileceğiniz anlamına gelir. PDF/A-3 konteyneri, hem sunum katmanını hem de altta yatan veriyi tutan tek bir paket haline gelir.

Bu kabiliyet, modern e-fatura standartlarının temelidir:

ZUGFeRD: Almanya'dan başlamış, şimdi AB genelinde Factur-X olarak benimsenmiştir. Yapılandırılmış XML fatura verilerini (Endüstriler Arası Fatura formatı) görsel, insan tarafından okunabilir fatura içeren bir PDF/A-3 belgesinin içine gömer. Tek bir dosya, hem insan hem de makine işlem gereksinimlerine hizmet eder.

PDF/A-3 uyumluluk düzeyleri aynı şablonu izler: 3b (görsel), 3a (erişilebilir + etiketli) ve 3u (Unicode eşlemeli).

PDF/A-4 (PDF 2.0 Tabanlı)

PDF/A-4 (ISO 19005-4:2020), en yeni sürümdür ve PDF 2.0'a dayanır. Uyumluluk seviyesi yapısını basitleştirir; a/b/u ayrımı artık yoktur. Bunun yerine, PDF/A-4 üç profil tanımlar:

PDF/A-4: Genel arşivleme için temel profil.

PDF/A-4f: Herhangi bir formatta gömülü dosyalara izin verir (PDF/A-3 ile benzer).

PDF/A-4e: Mühendislik belgeleri için özel olarak tasarlanmıştır; 3D içerik, zengin medya ve diğer teknik unsurları destekler.

PDF/A-4, geliştirilmiş etiketleme yapıları ve XMP (Genişletilebilir Meta Veri Platformu) kullanılarak geliştirilmiş meta veri yetenekleri dahil olmak üzere, PDF 2.0'daki iyileştirmelerden de yararlanmaktadır.

PDF/A-4'ün benimsenmesi artmakta, ancak hala PDF/A-2 ve PDF/A-3'e kıyasla görüntüleyiciler ve doğrulayıcılar tarafından evrensel olarak daha az desteklenmektedir.

Hangi Versiyonu Kullanmalısınız?

Doğru PDF/A sürümünü seçmek, belirli gereksinimlerinize bağlıdır:

Gömülü dosyalar, JPEG2000, şeffaflık ve uyumluluk gibi gereksinimlere göre PDF/A sürümünü seçme yolunu gösteren karar akış şeması

Maksimum uyumluluk: Mevcut sistemler, doğrulayıcılar ve görüntüleyiciler için özellikle yasal ve hükümet bağlamlarında, PDF/A-1b veya PDF/A-2b kullanın.

E-faturalama: ZUGFeRD, Factur-X veya gömülü kaynak veri gerektiren benzer standartlar için, PDF/A-3b kullanın.

Erişilebilirlik uyumluluğu: Bölüm 508 veya WCAG gereklilikleri için, kullandığınız sürümün a uyumluluk düzeyini seçin (PDF/A-1a, PDF/A-2a veya PDF/A-3a).

Modern iş akışları: Tüketicilerinizin PDF 2.0'ı desteklediği en yeni özellikler için, PDF/A-4 kullanın.

Şüphede olduğunuzda, PDF/A-3b modern kapasite ve geniş destek arasında en iyi dengeyi sağlar.


Sıfırdan PDF/A Belgeleri Oluşturma

Artık PDF/A'nın ne olduğunu ve hangi versiyonu hedefleyeceğinizi anladığınıza göre, koda geçelim. IronPDF, HTML içeriğinden doğrudan PDF/A uyumlu belgeler üretmeyi veya mevcut PDF'leri PDF/A formatına dönüştürmeyi kolaylaştırır.

Installing IronPDF

Başlamadan önce, IronPdf NuGet paketini .NET projenize yükleyin. Bunu NuGet Paket Yöneticisi Konsolu, .NET CLI veya Visual Studio NuGet kullanıcı arayüzünü kullanarak yapabilirsiniz.

Install-Package IronPdf
Install-Package IronPdf
SHELL

.NET CLI kullanarak:

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

IronPDF, .NET Framework 4.6.2+, .NET Core, .NET 5+ ve .NET Standard 2.0'ı destekler, bu da onu neredeyse her modern .NET projesine uyumlu hale getirir.

HTML'i PDF/A'ya Dönüştürme

En yaygın iş akışı, bir PDF'yi HTML içeriğinden oluşturmak ve doğrudan PDF/A formatında kaydetmektir. IronPDF'nin ChromePdfRenderer öğesi HTML'den PDF'ye dönüştürmeyi, SaveAsPdfA yöntemi ise tek adımda uyumluluk dönüştürmesini gerçekleştirir.

:path=/static-assets/pdf/content-code-examples/tutorials/pdfa-archiving-csharp/pdfa-render-html-to-pdfa.cs
using IronPdf;

// Create HTML content for the document
string htmlContent = @"
E html>


le>
body { font-family: Arial, sans-serif; margin: 40px; }
h1 { color: #2c3e50; }
.section { margin: 20px 0; }
table { width: 100%; border-collapse: collapse; }
th, td { border: 1px solid #ddd; padding: 10px; text-align: left; }
th { background: #3498db; color: white; }
yle>


Quarterly Financial Report</h1>
eport Period: Q4 2025</p>
 class='section'>
<table>
    <tr><th>Metric</th><th>Value</th></tr>
    <tr><td>Total Revenue</td><td>$4.2M</td></tr>
    <tr><td>Operating Expenses</td><td>$2.1M</td></tr>
    <tr><td>Net Income</td><td>$2.1M</td></tr>
</table>
v>
his document is archived in PDF/A-3b format for long-term preservation.</p>

;

// Render HTML to PDF
var renderer = new ChromePdfRenderer();
using var pdf = renderer.RenderHtmlAsPdf(htmlContent);

// Save as PDF/A-3b for archival compliance
pdf.SaveAsPdfA("quarterly-report-archived.pdf", PdfAVersions.PdfA3b);
Imports IronPdf

' Create HTML content for the document
Dim htmlContent As String = "
<!DOCTYPE html>
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        h1 { color: #2c3e50; }
        .section { margin: 20px 0; }
        table { width: 100%; border-collapse: collapse; }
        th, td { border: 1px solid #ddd; padding: 10px; text-align: left; }
        th { background: #3498db; color: white; }
    </style>
</head>
<body>
    <h1>Quarterly Financial Report</h1>
    <p>Report Period: Q4 2025</p>
    <div class='section'>
        <table>
            <tr><th>Metric</th><th>Value</th></tr>
            <tr><td>Total Revenue</td><td>$4.2M</td></tr>
            <tr><td>Operating Expenses</td><td>$2.1M</td></tr>
            <tr><td>Net Income</td><td>$2.1M</td></tr>
        </table>
    </div>
    <p>This document is archived in PDF/A-3b format for long-term preservation.</p>
</body>
</html>
"

' Render HTML to PDF
Dim renderer As New ChromePdfRenderer()
Using pdf = renderer.RenderHtmlAsPdf(htmlContent)
    ' Save as PDF/A-3b for archival compliance
    pdf.SaveAsPdfA("quarterly-report-archived.pdf", PdfAVersions.PdfA3b)
End Using
$vbLabelText   $csharpLabel

Çıktı

Bu örnekte, HTML, IronPDF'nin Chrome tabanlı işleme motoru kullanılarak bir PDF'ye dönüştürülür, bu da modern web standartları ile piksellerin doğru şekilde hizalanmasını sağlar. SaveAsPdfA yöntemi daha sonra gerekli tüm yazı tiplerini gömer, renk alanlarını gerektiği gibi dönüştürür, yasaklanmış özellikleri (JavaScript veya harici bağlantılar gibi) kaldırır ve uyumlu XMP meta verilerini yazar. Sonuç, arşiv depolama için hazır tamamen kendi kendine yeten bir PDF/A-3b dosyasıdır.

Bu yaklaşım, IronPDF'nin diğer işleme özellikleri ile sorunsuz çalışır. PDF/A dönüştürme adımından önce başlık ve altbilgi ekleyebilir, sayfa boyutlarını ve kenar boşluklarını ayarlayabilir, CSS stilini dahil edebilir ve RenderingOptions kullanarak çıktıyı ince ayarlayabilirsiniz. SaveAsPdfA çağrısı, PDF'nin nasıl oluşturulduğuna bakılmaksızın uyumluluk dönüşümünü gerçekleştirir.

Mevcut PDF'leri PDF/A'ya Dönüştürme

Her zaman HTML'den başlamazsınız. Birçok gerçek dünya senaryosunda, tarayıcılardan, üçüncü taraf sistemlerden, eski arşivlerden veya kullanıcı yüklemelerinden mevcut PDF dosyaları alırsınız ve bunları uyumlu depolama için PDF/A'ya dönüştürmeniz gerekir.

IronPDF bunu aynı SaveAsPdfA yöntemiyle halleder:

:path=/static-assets/pdf/content-code-examples/tutorials/pdfa-archiving-csharp/pdfa-convert-existing-pdf.cs
using IronPdf;

// Load an existing PDF file
using var pdf = PdfDocument.FromFile("existing-document.pdf");

// Convert and save as PDF/A-3b
// IronPDF automatically embeds fonts, converts color spaces, adds XMP metadata,
// and removes non-compliant features during conversion
pdf.SaveAsPdfA("existing-document-archived.pdf", PdfAVersions.PdfA3b);

// Alternative: Use ConvertToPdfA for in-memory conversion
using var pdf2 = PdfDocument.FromFile("another-document.pdf");
using var pdfA = pdf2.ConvertToPdfA(PdfAVersions.PdfA2b);
pdfA.SaveAs("another-document-archived.pdf");
Imports IronPdf

' Load an existing PDF file
Using pdf As PdfDocument = PdfDocument.FromFile("existing-document.pdf")
    ' Convert and save as PDF/A-3b
    ' IronPDF automatically embeds fonts, converts color spaces, adds XMP metadata,
    ' and removes non-compliant features during conversion
    pdf.SaveAsPdfA("existing-document-archived.pdf", PdfAVersions.PdfA3b)
End Using

' Alternative: Use ConvertToPdfA for in-memory conversion
Using pdf2 As PdfDocument = PdfDocument.FromFile("another-document.pdf")
    Using pdfA As PdfDocument = pdf2.ConvertToPdfA(PdfAVersions.PdfA2b)
        pdfA.SaveAs("another-document-archived.pdf")
    End Using
End Using
$vbLabelText   $csharpLabel

Dönüştürme sırasında, IronPDF mevcut PDF'yi analiz eder ve gerekli dönüşümleri uygular: referans verilen ancak eklenmemiş yazı tiplerini gömer, RGB veya CMYK renk alanlarını uygun profillere dönüştürür, gerekli XMP meta verilerini ekler ve şifreleme, multimedya veya JavaScript gibi uyumsuz herhangi bir özelliği çıkarır. Hemen diske kaydetmeden bellekte dönüştürmek istiyorsanız ConvertToPdfA yöntemini de kullanabilirsiniz. Bu, dönüştürmenin ardından ek işlemlerin yapıldığı iş akışları için kullanışlıdır.

Bu model, mevcut belge deposunu modern arşiv standartlarıyla uyumlu hale getirmeniz gereken geçiş projeleri için idealdir.


Gömülü Kaynak Verileri (PDF/A-3)

PDF/A-3 standardının en güçlü kabiliyetlerinden biri, XML, CSV, JSON, hesap tabloları veya diğer herhangi bir formatta dosyaları doğrudan PDF belgesiy içine gömme yeteneğidir. Bu, PDF'yi salt görsel bir belge olmaktan çıkarır ve tek bir dosyada hem insan tarafından okunabilir sunumu hem de makine tarafından okunabilir kaynak verisini taşıyan bir hibrit konteyner haline getirir.

XML/ÇCSV'yi Görsel Belge Yanına Eklemek

Temel iş akışı basittir: görsel PDF'nizi oluşturun veya yükleyin, kaynak veri dosyasını gömülü bir ek olarak ekleyin ve PDF/A-3 olarak kaydedin. IronPDF, ConvertToPdfA yönteminin birden fazla aşırı yüklemesi yoluyla dosya gömme işlemini destekler — dosya yollarını doğrudan IEnumerable<string> olarak aktarabilir, bellekte bulunan bayt dizileri için EmbedFileByte kullanabilir veya akış tabanlı iş akışları için EmbedFileStream kullanabilirsiniz. Her yaklaşım, tam PDF/A uyumluluğunu korur.

:path=/static-assets/pdf/content-code-examples/tutorials/pdfa-archiving-csharp/pdfa-embed-xml-attachment.cs
using IronPdf;
using System.Collections.Generic;

// Load the visual PDF document
using var pdf = PdfDocument.FromFile("financial-report.pdf");

// Prepare XML source data to embed
string xmlData = @"<?xml version='1.0' encoding='UTF-8'?>
alReport>
iod>Q4 2025</Period>
enue>4200000</Revenue>
enses>2100000</Expenses>
Income>2100000</NetIncome>
ialReport>";

byte[] xmlBytes = System.Text.Encoding.UTF8.GetBytes(xmlData);

// Configure the embedded file
var xmlConfig = new EmbedFileConfiguration(EmbedFileType.xml)
{
    EmbedFileName = "financial-data.xml",
    AFDesc = "Source financial data in XML format",
    AFRelationship = AFRelationship.Data
};

// Create embed file collection
var embedFiles = new List<EmbedFileByte>
{
    new EmbedFileByte(xmlBytes, xmlConfig)
};

// Convert to PDF/A-3b with embedded data
using var archivedPdf = pdf.ConvertToPdfA(embedFiles, PdfAVersions.PdfA3b);
archivedPdf.SaveAs("financial-report-with-data.pdf");
Imports IronPdf
Imports System.Collections.Generic
Imports System.Text

' Load the visual PDF document
Using pdf = PdfDocument.FromFile("financial-report.pdf")

    ' Prepare XML source data to embed
    Dim xmlData As String = "<?xml version='1.0' encoding='UTF-8'?>
<FinancialReport>
<Period>Q4 2025</Period>
<Revenue>4200000</Revenue>
<Expenses>2100000</Expenses>
<NetIncome>2100000</NetIncome>
</FinancialReport>"

    Dim xmlBytes As Byte() = Encoding.UTF8.GetBytes(xmlData)

    ' Configure the embedded file
    Dim xmlConfig As New EmbedFileConfiguration(EmbedFileType.xml) With {
        .EmbedFileName = "financial-data.xml",
        .AFDesc = "Source financial data in XML format",
        .AFRelationship = AFRelationship.Data
    }

    ' Create embed file collection
    Dim embedFiles As New List(Of EmbedFileByte) From {
        New EmbedFileByte(xmlBytes, xmlConfig)
    }

    ' Convert to PDF/A-3b with embedded data
    Using archivedPdf = pdf.ConvertToPdfA(embedFiles, PdfAVersions.PdfA3b)
        archivedPdf.SaveAs("financial-report-with-data.pdf")
    End Using

End Using
$vbLabelText   $csharpLabel

Bu model, finansal raporlama iş akışları için özellikle değerlidir, burada görsel PDF biçimlendirilmiş bir bilanço veya gelir tablosu olabilirken, eklenmiş XML veya CSV, raporu oluşturmak için kullanılan ham verileri içerebilir. Denetçiler, görsel belgeyi inceleyebilir ve gömülü kaynak verileri kullanarak altta yatan rakamları bağımsız olarak doğrulayabilir — hepsi tek bir dosyadan. Ek dosya yollarını veya bayt dizilerini ConvertToPdfA yönteminin koleksiyon parametresine aktararak aynı belgeye birden fazla ek ekleyebilirsiniz.

ZUGFeRD ve Factur-X E-Faturalama Uyumluluğu

ZUGFeRD (Zentraler User Guide des Forums elektronische Rechnung Deutschland) ve uluslararası karşılığı Factur-X, yapılandırılmış fatura verilerinin bir PDF/A-3 belgesi içinde nasıl gömülmesi gerektiğini belirten e-faturalama standartlarıdır. Görsel PDF, insan tarafından okunabilir fatura olarak hizmet ederken, gömülü XML dosyası (Endüstriler Arası Fatura veya CII formatına uygun) makine tarafından işlenebilir verileri taşır.

ZUGFeRD/Factur-X uyumluluğu için temel gereklilikler:

PDF dosyası PDF/A-3b standardına (en azından) uygun olmalıdır. Gömülü XML dosyası, UN/CEFACT Endüstriler Arası Fatura şemasına uygun olmalıdır. XML dosyasının adı, standardın spesifikasyonuna göre belirlenmelidir (genellikle Factur-X için factur-x.xml veya ZUGFeRD için zugferd-invoice.xml). Belgenin bir ZUGFeRD/Factur-X faturası olarak tanımlanması için belirli XMP meta veri özellikleri ayarlanmalıdır.

IronPDF'nin EmbedFileConfiguration sınıfı, bu gereksinimler üzerinde hassas bir kontrol sağlar. ConformanceLevel (örneğin ConformanceLevel.XRECHNUNG), SchemaNamespace, SchemaPrefix, PropertyVersion ve AFRelationship özelliklerini, hedef sisteminizin beklediği e-fatura profiline tam olarak uyacak şekilde ayarlayabilirsiniz.

IronPDF ile ZUGFeRD uyumlu bir fatura oluşturmanın yolu:

:path=/static-assets/pdf/content-code-examples/tutorials/pdfa-archiving-csharp/pdfa-zugferd-invoice.cs
using IronPdf;
using System.Collections.Generic;

// Create visual invoice HTML
string invoiceHtml = @"
E html>


le>
body { font-family: Arial, sans-serif; margin: 40px; }
.header { border-bottom: 2px solid #e74c3c; padding-bottom: 15px; }
h1 { color: #e74c3c; }
.invoice-details { margin: 30px 0; }
.line-item { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid #eee; }
.total { font-size: 20px; font-weight: bold; margin-top: 20px; text-align: right; }
yle>


 class='header'>
<h1>INVOICE #INV-2026-0042</h1>
<p>Date: February 7, 2026</p>
v>
 class='invoice-details'>
<p><strong>Bill To:</strong> Acme Corporation</p>
<p><strong>Address:</strong> 123 Business Ave, Suite 100</p>
v>
 class='line-item'><span>Software License (Enterprise)</span><span>$2,499.00</span></div>
 class='line-item'><span>Annual Support Contract</span><span>$499.00</span></div>
 class='line-item'><span>Implementation Services</span><span>$1,500.00</span></div>
 class='total'>Total: $4,498.00</div>
tyle='margin-top: 40px; font-size: 12px; color: #666;'>
This invoice complies with ZUGFeRD/Factur-X e-invoicing standards.


;

// Render the visual invoice
var renderer = new ChromePdfRenderer();
using var invoicePdf = renderer.RenderHtmlAsPdf(invoiceHtml);

// Prepare ZUGFeRD/Factur-X XML invoice data
string zugferdXml = @"<?xml version='1.0' encoding='UTF-8'?>
ssIndustryInvoice xmlns:rsm='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'>
:ExchangedDocument>
<ram:ID>INV-2026-0042</ram:ID>
<ram:IssueDateTime>2026-02-07</ram:IssueDateTime>
m:ExchangedDocument>
:SupplyChainTradeTransaction>
<ram:ApplicableHeaderTradeSettlement>
    <ram:InvoiceCurrencyCode>USD</ram:InvoiceCurrencyCode>
    <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
        <ram:GrandTotalAmount>4498.00</ram:GrandTotalAmount>
    </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
</ram:ApplicableHeaderTradeSettlement>
m:SupplyChainTradeTransaction>
ossIndustryInvoice>";

byte[] xmlBytes = System.Text.Encoding.UTF8.GetBytes(zugferdXml);

// Configure for ZUGFeRD/Factur-X compliance
var zugferdConfig = new EmbedFileConfiguration(EmbedFileType.xml)
{
    EmbedFileName = "factur-x.xml",
    AFDesc = "Factur-X Invoice Data",
    ConformanceLevel = ConformanceLevel.EN16931,
    SchemaNamespace = SchemaNamespace.facturX,
    SchemaPrefix = SchemaPrefix.fx,
    PropertyVersion = PropertyVersion.v1,
    AFRelationship = AFRelationship.Alternative
};

var embedFiles = new List<EmbedFileByte>
{
    new EmbedFileByte(xmlBytes, zugferdConfig)
};

// Convert to PDF/A-3b with embedded ZUGFeRD data
using var zugferdInvoice = invoicePdf.ConvertToPdfA(embedFiles, PdfAVersions.PdfA3b);

// Set invoice metadata
zugferdInvoice.MetaData.Title = "Invoice INV-2026-0042";
zugferdInvoice.MetaData.Author = "IronSoftware Billing";
zugferdInvoice.MetaData.Subject = "ZUGFeRD/Factur-X Compliant Invoice";

zugferdInvoice.SaveAs("invoice-zugferd.pdf");
Imports IronPdf
Imports System.Collections.Generic
Imports System.Text

' Create visual invoice HTML
Dim invoiceHtml As String = "
<!DOCTYPE html>
<html>
<head>
    <style>
        body { font-family: Arial, sans-serif; margin: 40px; }
        .header { border-bottom: 2px solid #e74c3c; padding-bottom: 15px; }
        h1 { color: #e74c3c; }
        .invoice-details { margin: 30px 0; }
        .line-item { display: flex; justify-content: space-between; padding: 10px 0; border-bottom: 1px solid #eee; }
        .total { font-size: 20px; font-weight: bold; margin-top: 20px; text-align: right; }
    </style>
</head>
<body>
    <div class='header'>
        <h1>INVOICE #INV-2026-0042</h1>
        <p>Date: February 7, 2026</p>
    </div>
    <div class='invoice-details'>
        <p><strong>Bill To:</strong> Acme Corporation</p>
        <p><strong>Address:</strong> 123 Business Ave, Suite 100</p>
    </div>
    <div class='line-item'><span>Software License (Enterprise)</span><span>$2,499.00</span></div>
    <div class='line-item'><span>Annual Support Contract</span><span>$499.00</span></div>
    <div class='line-item'><span>Implementation Services</span><span>$1,500.00</span></div>
    <div class='total'>Total: $4,498.00</div>
    <p style='margin-top: 40px; font-size: 12px; color: #666;'>
        This invoice complies with ZUGFeRD/Factur-X e-invoicing standards.
    </p>
</body>
</html>"

' Render the visual invoice
Dim renderer As New ChromePdfRenderer()
Using invoicePdf = renderer.RenderHtmlAsPdf(invoiceHtml)

    ' Prepare ZUGFeRD/Factur-X XML invoice data
    Dim zugferdXml As String = "<?xml version='1.0' encoding='UTF-8'?>
    <rsm:CrossIndustryInvoice xmlns:rsm='urn:un:unece:uncefact:data:standard:CrossIndustryInvoice:100'>
        <rsm:ExchangedDocument>
            <ram:ID>INV-2026-0042</ram:ID>
            <ram:IssueDateTime>2026-02-07</ram:IssueDateTime>
        </rsm:ExchangedDocument>
        <rsm:SupplyChainTradeTransaction>
            <ram:ApplicableHeaderTradeSettlement>
                <ram:InvoiceCurrencyCode>USD</ram:InvoiceCurrencyCode>
                <ram:SpecifiedTradeSettlementHeaderMonetarySummation>
                    <ram:GrandTotalAmount>4498.00</ram:GrandTotalAmount>
                </ram:SpecifiedTradeSettlementHeaderMonetarySummation>
            </ram:ApplicableHeaderTradeSettlement>
        </rsm:SupplyChainTradeTransaction>
    </rsm:CrossIndustryInvoice>"

    Dim xmlBytes As Byte() = Encoding.UTF8.GetBytes(zugferdXml)

    ' Configure for ZUGFeRD/Factur-X compliance
    Dim zugferdConfig As New EmbedFileConfiguration(EmbedFileType.xml) With {
        .EmbedFileName = "factur-x.xml",
        .AFDesc = "Factur-X Invoice Data",
        .ConformanceLevel = ConformanceLevel.EN16931,
        .SchemaNamespace = SchemaNamespace.facturX,
        .SchemaPrefix = SchemaPrefix.fx,
        .PropertyVersion = PropertyVersion.v1,
        .AFRelationship = AFRelationship.Alternative
    }

    Dim embedFiles As New List(Of EmbedFileByte) From {
        New EmbedFileByte(xmlBytes, zugferdConfig)
    }

    ' Convert to PDF/A-3b with embedded ZUGFeRD data
    Using zugferdInvoice = invoicePdf.ConvertToPdfA(embedFiles, PdfAVersions.PdfA3b)

        ' Set invoice metadata
        zugferdInvoice.MetaData.Title = "Invoice INV-2026-0042"
        zugferdInvoice.MetaData.Author = "IronSoftware Billing"
        zugferdInvoice.MetaData.Subject = "ZUGFeRD/Factur-X Compliant Invoice"

        zugferdInvoice.SaveAs("invoice-zugferd.pdf")
    End Using
End Using
$vbLabelText   $csharpLabel

Çıktı

Bu yaklaşım, fatura sisteminizin hem insan değerlendirmesini (görsel PDF) hem de otomatik işleme sürecini (gömülü XML) karşılayan belgeler üretmesini sağlar.

Denetim İzinin Korunması

E-faturanın ötesinde, PDF/A-3'ün gömme yeteneği, tam bir denetim izi sürdürmenin önemli olduğu herhangi bir iş akışı için değerlidir. Orijinal kaynak verileri, işlem günlükleri veya değişiklik geçmişlerini nihai belgeyle birlikte ekleyerek, gelecekte herhangi bir zamanda bağımsız olarak doğrulanabilecek kendi kendine yeterli bir kayıt oluşturursunuz.

Yaygın denetim izi gömme kalıpları şunları içerir:

Finansal tablolar — Biçimlendirilmiş finansal raporun yanına ham muhasebe verilerini (CSV veya ERP sisteminizden XML dışa aktarma) ekleyin. Denetçiler, görsel belge içindeki sayıların kaynak verilerle eşleştiğini, orijinal sistem erişimine ihtiyaç duymadan doğrulayabilirler.

Düzenleyici dosya sunumları — Son dosya belgesine gömülü dosyalar olarak orijinal gönderim verilerini, doğrulama sonuçlarını ve destekleyici hesaplamaları ekleyin. Bu, dosya kaydının tam kaydını içeren tek bir arşivleme paketi oluşturur.

Sözleşme yönetimi — Tamamlanmış sözleşme PDF dosyasının içine sürüm geçmişlerini, onay zincirlerini veya imzalanmış meta veri dosyalarını gömün. Bu, belgenin tam yaşam döngüsünü tek bir arşiv dosyasında saklar.

:path=/static-assets/pdf/content-code-examples/tutorials/pdfa-archiving-csharp/pdfa-audit-trail.cs
using IronPdf;
using System;
using System.Collections.Generic;
using System.Text.Json;

// Load the final document to archive
using var pdf = PdfDocument.FromFile("executed-contract.pdf");

// Create audit trail data
var auditTrail = new
{
    DocumentId = "CONTRACT-2026-00142",
    CreatedDate = "2026-01-15T09:30:00Z",
    FinalizedDate = "2026-02-07T14:22:00Z",
    Versions = new[]
    {
        new { Version = 1, Date = "2026-01-15", Action = "Draft created", User = "john.smith@company.com" },
        new { Version = 2, Date = "2026-01-20", Action = "Legal review completed", User = "legal@company.com" },
        new { Version = 3, Date = "2026-02-01", Action = "Client revisions incorporated", User = "john.smith@company.com" },
        new { Version = 4, Date = "2026-02-07", Action = "Final execution", User = "ceo@company.com" }
    },
    Signatures = new[]
    {
        new { Signer = "Company CEO", SignedDate = "2026-02-07T14:20:00Z", IPAddress = "192.168.1.100" },
        new { Signer = "Client Representative", SignedDate = "2026-02-07T14:22:00Z", IPAddress = "10.0.0.50" }
    },
    Checksum = "SHA256:a1b2c3d4e5f6..."
};

string auditJson = JsonSerializer.Serialize(auditTrail, new JsonSerializerOptions { WriteIndented = true });
byte[] auditBytes = System.Text.Encoding.UTF8.GetBytes(auditJson);

// Configure audit trail attachment
var auditConfig = new EmbedFileConfiguration(EmbedFileType.xml)
{
    EmbedFileName = "audit-trail.json",
    AFDesc = "Complete document audit trail and version history",
    AFRelationship = AFRelationship.Supplement
};

// Create validation log
string validationLog = @"
on Report
=========
: CONTRACT-2026-00142
d: 2026-02-07T14:25:00Z

erformed:
ll required fields present
ignature blocks completed
ate formats valid
urrency amounts verified
egal clauses match template v2.1

atus: APPROVED FOR ARCHIVAL


byte[] validationBytes = System.Text.Encoding.UTF8.GetBytes(validationLog);

var validationConfig = new EmbedFileConfiguration(EmbedFileType.xml)
{
    EmbedFileName = "validation-report.txt",
    AFDesc = "Pre-archive validation report",
    AFRelationship = AFRelationship.Supplement
};

// Embed both files
var embedFiles = new List<EmbedFileByte>
{
    new EmbedFileByte(auditBytes, auditConfig),
    new EmbedFileByte(validationBytes, validationConfig)
};

// Convert to PDF/A-3b with full audit trail
using var archivedContract = pdf.ConvertToPdfA(embedFiles, PdfAVersions.PdfA3b);

// Set archival metadata
archivedContract.MetaData.Title = "Executed Contract - CONTRACT-2026-00142";
archivedContract.MetaData.Author = "Contract Management System";
archivedContract.MetaData.Subject = "Fully executed agreement with audit trail";
archivedContract.MetaData.Keywords = "contract, executed, 2026, archived";

archivedContract.SaveAs("contract-archived-with-audit.pdf");
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Text.Json

' Load the final document to archive
Using pdf = PdfDocument.FromFile("executed-contract.pdf")

    ' Create audit trail data
    Dim auditTrail = New With {
        .DocumentId = "CONTRACT-2026-00142",
        .CreatedDate = "2026-01-15T09:30:00Z",
        .FinalizedDate = "2026-02-07T14:22:00Z",
        .Versions = New Object() {
            New With {.Version = 1, .Date = "2026-01-15", .Action = "Draft created", .User = "john.smith@company.com"},
            New With {.Version = 2, .Date = "2026-01-20", .Action = "Legal review completed", .User = "legal@company.com"},
            New With {.Version = 3, .Date = "2026-02-01", .Action = "Client revisions incorporated", .User = "john.smith@company.com"},
            New With {.Version = 4, .Date = "2026-02-07", .Action = "Final execution", .User = "ceo@company.com"}
        },
        .Signatures = New Object() {
            New With {.Signer = "Company CEO", .SignedDate = "2026-02-07T14:20:00Z", .IPAddress = "192.168.1.100"},
            New With {.Signer = "Client Representative", .SignedDate = "2026-02-07T14:22:00Z", .IPAddress = "10.0.0.50"}
        },
        .Checksum = "SHA256:a1b2c3d4e5f6..."
    }

    Dim auditJson As String = JsonSerializer.Serialize(auditTrail, New JsonSerializerOptions With {.WriteIndented = True})
    Dim auditBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(auditJson)

    ' Configure audit trail attachment
    Dim auditConfig As New EmbedFileConfiguration(EmbedFileType.xml) With {
        .EmbedFileName = "audit-trail.json",
        .AFDesc = "Complete document audit trail and version history",
        .AFRelationship = AFRelationship.Supplement
    }

    ' Create validation log
    Dim validationLog As String = "
on Report
=========
: CONTRACT-2026-00142
d: 2026-02-07T14:25:00Z

erformed:
ll required fields present
ignature blocks completed
ate formats valid
urrency amounts verified
egal clauses match template v2.1

atus: APPROVED FOR ARCHIVAL
"

    Dim validationBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(validationLog)

    Dim validationConfig As New EmbedFileConfiguration(EmbedFileType.xml) With {
        .EmbedFileName = "validation-report.txt",
        .AFDesc = "Pre-archive validation report",
        .AFRelationship = AFRelationship.Supplement
    }

    ' Embed both files
    Dim embedFiles As New List(Of EmbedFileByte) From {
        New EmbedFileByte(auditBytes, auditConfig),
        New EmbedFileByte(validationBytes, validationConfig)
    }

    ' Convert to PDF/A-3b with full audit trail
    Using archivedContract = pdf.ConvertToPdfA(embedFiles, PdfAVersions.PdfA3b)

        ' Set archival metadata
        archivedContract.MetaData.Title = "Executed Contract - CONTRACT-2026-00142"
        archivedContract.MetaData.Author = "Contract Management System"
        archivedContract.MetaData.Subject = "Fully executed agreement with audit trail"
        archivedContract.MetaData.Keywords = "contract, executed, 2026, archived"

        archivedContract.SaveAs("contract-archived-with-audit.pdf")
    End Using
End Using
$vbLabelText   $csharpLabel

PDF/A Uyumluluğunu Doğrulama

Bir belge oluşturmak ve buna PDF/A demek yeterli değildir — çıktının standartın gereksinimlerini gerçekten karşıladığını doğrulamanız gerekir. PDF/A olduğunu iddia eden ancak doğrulamadan geçemeyen bir dosya, arşivleme sistemleri, hükümet portalları veya e-fatura platformları tarafından kabul edilmeyecektir.

IronPDF'nin SaveAsPdfA ve ConvertToPdfA yöntemleri, yazı tiplerini gömme, renk alanlarını dönüştürme, yasaklanmış özellikleri kaldırma ve XMP meta verilerini yazma gibi uyumluluk dönüştürme işlemlerinin zorlu kısmını üstlenir. Bununla birlikte, çıktıyı bağımsız olarak doğrulamak için, dış araçlar kullanarak, veraPDF (sektör standart açık kaynak PDF/A doğrulayıcı) veya Adobe Acrobat Pro'nun yerleşik Preflight aracını kullanarak doğrulama yapmalısınız. veraPDF'yi CI/CD hattınıza veya belge işleme iş akışınıza entegre etmek, her üretilen dosyanın iddia edilen standardı karşıladığını saklanmadan veya dağıtılmadan önce otoriter, üçüncü taraf doğrulaması sağlar.

Yaygın Uyumluluk Hataları ve Çözümleri

IronPDF çoğu uyumluluk çalışmasını yönetirken, belirli giriş koşulları doğrulama başarısızlıklarına neden olabilir. İşte en yaygın sorunlar ve bunları nasıl çözebileceğiniz:

Gömülü olmayan yazı tipleri — Bu, en yaygın başarısızlıktır. Kaynak PDF bir yazı tipine isim ile referans verir ancak yazı tipi verisini gömmezse, çıktı PDF/A uyumlu olmayacaktır. IronPDF, dönüşüm sırasında yazı tiplerini otomatik olarak gömmeyi dener, ancak IronPDF'nin çalıştığı sistemde bir yazı tipi dosyası mevcut değilse, gömme işlemi başarılı olmayacaktır. Çözüm: Kaynak belgelerinizde kullanılan tüm fontların sunucuda yüklü olduğundan emin olun veya HTML içeriğinizde evrensel olarak kullanılabilir web güvenli yazı tiplerini kullanın.

Desteklenmeyen renk alanları — PDF/A, tüm renk verilerinin belirli, gömülü bir renk profili içinde tanımlanmasını gerektirir (genellikle ekran odaklı belgeler için sRGB veya baskı için bir CMYK profili). Gömülü bir profil olmaksızın cihaz bağımlı renk alanları kullanan kaynak PDF'ler doğrulama başarısız olur. Çözüm: IronPDF, çoğu durumda renk alanı dönüşümünü otomatik olarak gerçekleştirir. Sınır durumları için, kaynak içeriğinizin renkleri sRGB olarak belirttiğinden emin olun.

Şifreleme veya şifre koruması — PDF/A, şifrelemeyi kesinlikle yasaklar. Parola korumalı bir PDF dosyasını dönüştürüyorsanız, önce şifresini çözmeniz gerekir. Çözüm: Dönüştürme işleminden önce korumalı dosyayı açmak için PdfDocument.FromFile("encrypted.pdf", "password") kullanın.

JavaScript veya multimedya içerik — PDF/A, JavaScript, ses, video ve diğer etkileşimli öğeleri yasaklar. Kaynak HTML'nizde <script> etiketleri, gömülü videolar veya etkileşimli formlar varsa, bunların kaldırılması gerekir; aksi takdirde dönüştürme işlemi sırasında bunlar silinecektir. Çözüm: HTML içeriğinizin PDF/A'ya dönüştürmeden önce statik olduğundan emin olun.

Şeffaflık sorunları (yalnızca PDF/A-1) — PDF/A-1 şeffaflığı desteklemez. Belgeniz şeffaf öğeler içeriyorsa (modern CSS düzenlerinde yaygın), PDF/A-1'e dönüştürme düzleştirme gerektirecektir. Düzeltme: Belgelerinizde şeffaflık kullanılıyorsa PDF/A-2 veya daha yeni bir sürümü hedefleyin ya da PDF/A-1'i hedeflerken CSS'nin opacity, rgba veya şeffaf PNG'ler kullanmadığından emin olun.

Fontlar, Renk Uzayları ve Metadata Gereksinimleri

PDF/A uyumluluğunun üç ayağını anlamak — yazı tipleri, renk alanları ve metaveri — belgeleri ilk denemede doğrulamayı geçecek şekilde tasarlamanıza yardımcı olur.

Yazı tipleri: Belge içinde kullanılan her font tamamen gömülü olmalıdır. Bu yalnızca metindeki bir alt küme değil, tüm glifleri içerir. PDF/A-1a, PDF/A-2a ve PDF/A-3a uyumluluk düzeyleri için, her karakterin bir Unicode eşlemesi olmalıdır; bu sayede metnin güvenilir bir şekilde çıkarılması ve aranması sağlanır.

IronPDF'nin HTML-to-PDF işleme kullanıldığında, Chromium motoru, sistemde mevcut olan yazı tiplerini otomatik olarak gömer. Farklı dağıtım ortamları (geliştirme, hazırlık, üretim) arasında tutarlılığı sağlamak için, HTML'nizde <link> etiketleri aracılığıyla yüklenen Google Fonts'u kullanmayı veya font dosyalarını uygulamanızla birlikte paketleyip CSS @font-face aracılığıyla bunlara başvurmayı düşünün.

Renk alanları: PDF/A, tüm renklerin bir ICC profili ile desteklenen cihaz bağımsız bir renk alanı içinde belirtilmesini gerektirir. Pratikte, bu, çoğu belge için sRGB kullanmak anlamına gelir. IronPDF, uygun ICC profilini gömer ve SaveAsPdfA işlemi sırasında renkleri otomatik olarak dönüştürür — iş akışınız belirli bir profil gerektiriyorsa, özel bir ICC dosya yolu da aktarabilirsiniz. Ancak, CMYK doğruluğu gerektiren baskı odaklı belgelerle çalışıyorsanız, kaynak içeriğinizin CMYK'ye uygun profiller kullandığından ve bunların dönüştürme sırasında korunacağından emin olun.

Metaveri: PDF/A, belgeye gömülü XMP (Extensible Metadata Platform) metaveri gerektirir. Bu belge başlığını, yazarı, oluşturulma tarihini, değiştirilme tarihini ve PDF/A uyumluluk seviyesi tanımlayıcısını içerir. IronPDF bu alanları otomatik olarak doldurur, ancak daha fazla kontrol için MetaData özelliğini kullanarak bunları açıkça ayarlayabilirsiniz:

:path=/static-assets/pdf/content-code-examples/tutorials/pdfa-archiving-csharp/pdfa-metadata-settings.cs
using IronPdf;
using System;

// Create a PDF document
var renderer = new ChromePdfRenderer();
using var pdf = renderer.RenderHtmlAsPdf("<h1>Annual Report 2025</h1><p>Corporate performance summary.</p>");

// Set standard metadata properties
pdf.MetaData.Title = "Annual Report 2025 - IronSoftware Inc.";
pdf.MetaData.Author = "Finance Department";
pdf.MetaData.Subject = "Corporate annual financial and operational report";
pdf.MetaData.Keywords = "annual report, financial, 2025, corporate, IronSoftware";
pdf.MetaData.Creator = "IronPDF Document Generator";
pdf.MetaData.CreationDate = DateTime.Now;
pdf.MetaData.ModifiedDate = DateTime.Now;

// For custom or batch metadata, use SetMetaDataDictionary
var metadataDict = new System.Collections.Generic.Dictionary<string, string>
{
    { "Title", "Quarterly Report Q4 2025" },
    { "Author", "Finance Team" },
    { "Subject", "Q4 Financial Results" },
    { "Keywords", "quarterly, Q4, 2025, finance" },
    { "Department", "Finance" },
    { "Classification", "Internal" },
    { "RetentionPeriod", "7 years" }
};

using var pdf2 = renderer.RenderHtmlAsPdf("<h1>Q4 Report</h1>");
pdf2.MetaData.SetMetaDataDictionary(metadataDict);

// Convert to PDF/A with metadata preserved
pdf.SaveAsPdfA("annual-report-2025.pdf", PdfAVersions.PdfA3b);
pdf2.SaveAsPdfA("q4-report-2025.pdf", PdfAVersions.PdfA3b);
Imports IronPdf
Imports System
Imports System.Collections.Generic

' Create a PDF document
Dim renderer As New ChromePdfRenderer()
Using pdf = renderer.RenderHtmlAsPdf("<h1>Annual Report 2025</h1><p>Corporate performance summary.</p>")

    ' Set standard metadata properties
    pdf.MetaData.Title = "Annual Report 2025 - IronSoftware Inc."
    pdf.MetaData.Author = "Finance Department"
    pdf.MetaData.Subject = "Corporate annual financial and operational report"
    pdf.MetaData.Keywords = "annual report, financial, 2025, corporate, IronSoftware"
    pdf.MetaData.Creator = "IronPDF Document Generator"
    pdf.MetaData.CreationDate = DateTime.Now
    pdf.MetaData.ModifiedDate = DateTime.Now

    ' For custom or batch metadata, use SetMetaDataDictionary
    Dim metadataDict As New Dictionary(Of String, String) From {
        {"Title", "Quarterly Report Q4 2025"},
        {"Author", "Finance Team"},
        {"Subject", "Q4 Financial Results"},
        {"Keywords", "quarterly, Q4, 2025, finance"},
        {"Department", "Finance"},
        {"Classification", "Internal"},
        {"RetentionPeriod", "7 years"}
    }

    Using pdf2 = renderer.RenderHtmlAsPdf("<h1>Q4 Report</h1>")
        pdf2.MetaData.SetMetaDataDictionary(metadataDict)

        ' Convert to PDF/A with metadata preserved
        pdf.SaveAsPdfA("annual-report-2025.pdf", PdfAVersions.PdfA3b)
        pdf2.SaveAsPdfA("q4-report-2025.pdf", PdfAVersions.PdfA3b)
    End Using
End Using
$vbLabelText   $csharpLabel

Metaveriyi açıkça ayarlamak, özellikle belge yönetim sistemleri tarafından indekslenecek belgeler için önemlidir, çünkü başlık ve yazar alanları sıklıkla kataloglama ve arama için kullanılır.


Hükümet Kayıt Yönetimi Kullanım Durumları

PDF/A sadece bir teknik spesifikasyon değildir — hükümet, hukuk ve sağlık hizmetleri bağlamlarında pratik bir gerekçedir. Bu bölümde, PDF/A'nın belirli düzenleyici çerçevelerle nasıl uyum sağladığını ve IronPDF kullanarak gereksinimlerini karşılamak için ne yapmanız gerektiğini inceleyeceğiz.

NARA Gereksinimleri (ABD Ulusal Arşivler)

ABD Ulusal Arşivler ve Kayıtlar İdaresi (NARA), kalıcı değeri olan federal kayıtları korumaktan sorumludur. NARA'nın transfer kılavuzları, kalıcı elektronik kayıtları Ulusal Arşivlere aktarmak için tercih edilen formatlardan biri olarak PDF/A'yı belirtir.

PDF/A sunumları için NARA'nın önemli gereksinimleri:

NARA,PDF/A-1, PDF/A-2 ve PDF/A-3 kabul eder ve belgeler, transfer öncesinde iddia edilen PDF/A sürümüne karşı doğrulanmalıdır. Metaveri oluşturma ajansı, kayıt serisi kimliği ve kapsanan tarih aralığını içermelidir. Gömülü yazı tipleri zorunludur — NARA, eksik veya yalnızca referans alınan yazı tipleri olan belgeleri açıkça reddeder. Dijitalleştirilmiş (tarama yapılmış) kayıtlar için, NARA en az 300 DPI çözünürlük önerir ve gelişmiş görüntü sıkıştırması nedeniyle PDF/A-2 veya daha sonraki sürümleri tercih eder.

İşte NARA aktarımı için bir grup ajans kaydını nasıl hazırlayabileceğiniz:

Girdi

5 PDF dosyası içeren ajans kayıtları klasörü

:path=/static-assets/pdf/content-code-examples/tutorials/pdfa-archiving-csharp/pdfa-nara-compliance.cs
using IronPdf;
using System;
using System.IO;

string inputFolder = "agency-records/";
string validatedFolder = "nara-transfer/validated/";
string rejectedFolder = "nara-transfer/rejected/";

// Create output directories
Directory.CreateDirectory(validatedFolder);
Directory.CreateDirectory(rejectedFolder);

// NARA transfer metadata requirements
string agencyName = "Department of Example";
string recordSeries = "Administrative Correspondence";
string dateRange = "2020-2025";

// Process all PDF files in the input folder
string[] pdfFiles = Directory.GetFiles(inputFolder, "*.pdf");

Console.WriteLine($"Preparing {pdfFiles.Length} records for NARA transfer");
Console.WriteLine($"Agency: {agencyName}");
Console.WriteLine($"Record Series: {recordSeries}");
Console.WriteLine();

int successCount = 0;
int failCount = 0;

foreach (string inputPath in pdfFiles)
{
    string fileName = Path.GetFileName(inputPath);

    try
    {
        using var pdf = PdfDocument.FromFile(inputPath);

        // Set NARA-required metadata
        var metadata = new System.Collections.Generic.Dictionary<string, string>
        {
            { "Title", Path.GetFileNameWithoutExtension(inputPath) },
            { "Author", agencyName },
            { "Subject", recordSeries },
            { "Keywords", $"NARA, {recordSeries}, {dateRange}" },
            { "Agency", agencyName },
            { "RecordSeries", recordSeries },
            { "DateRange", dateRange },
            { "TransferDate", DateTime.Now.ToString("yyyy-MM-dd") }
        };
        pdf.MetaData.SetMetaDataDictionary(metadata);

        // Convert to PDF/A-2b (NARA preferred for digitized records)
        string outputPath = Path.Combine(validatedFolder, fileName);
        pdf.SaveAsPdfA(outputPath, PdfAVersions.PdfA2b);

        // Verify the output
        using var verifyPdf = PdfDocument.FromFile(outputPath);
        if (verifyPdf.PageCount > 0)
        {
            successCount++;
            Console.WriteLine($"[OK] {fileName}");
        }
        else
        {
            throw new Exception("Output PDF has no pages");
        }
    }
    catch (Exception ex)
    {
        failCount++;
        Console.WriteLine($"[FAILED] {fileName}: {ex.Message}");

        // Move original to rejected folder for manual review
        try
        {
            File.Copy(inputPath, Path.Combine(rejectedFolder, fileName), overwrite: true);
        }
        catch { }
    }
}

Console.WriteLine();
Console.WriteLine("=== NARA Transfer Preparation Complete ===");
Console.WriteLine($"Successfully converted: {successCount}");
Console.WriteLine($"Failed (requires review): {failCount}");
Console.WriteLine($"Output location: {validatedFolder}");
Imports IronPdf
Imports System
Imports System.IO

Module Program
    Sub Main()
        Dim inputFolder As String = "agency-records/"
        Dim validatedFolder As String = "nara-transfer/validated/"
        Dim rejectedFolder As String = "nara-transfer/rejected/"

        ' Create output directories
        Directory.CreateDirectory(validatedFolder)
        Directory.CreateDirectory(rejectedFolder)

        ' NARA transfer metadata requirements
        Dim agencyName As String = "Department of Example"
        Dim recordSeries As String = "Administrative Correspondence"
        Dim dateRange As String = "2020-2025"

        ' Process all PDF files in the input folder
        Dim pdfFiles As String() = Directory.GetFiles(inputFolder, "*.pdf")

        Console.WriteLine($"Preparing {pdfFiles.Length} records for NARA transfer")
        Console.WriteLine($"Agency: {agencyName}")
        Console.WriteLine($"Record Series: {recordSeries}")
        Console.WriteLine()

        Dim successCount As Integer = 0
        Dim failCount As Integer = 0

        For Each inputPath As String In pdfFiles
            Dim fileName As String = Path.GetFileName(inputPath)

            Try
                Using pdf = PdfDocument.FromFile(inputPath)

                    ' Set NARA-required metadata
                    Dim metadata As New System.Collections.Generic.Dictionary(Of String, String) From {
                        {"Title", Path.GetFileNameWithoutExtension(inputPath)},
                        {"Author", agencyName},
                        {"Subject", recordSeries},
                        {"Keywords", $"NARA, {recordSeries}, {dateRange}"},
                        {"Agency", agencyName},
                        {"RecordSeries", recordSeries},
                        {"DateRange", dateRange},
                        {"TransferDate", DateTime.Now.ToString("yyyy-MM-dd")}
                    }
                    pdf.MetaData.SetMetaDataDictionary(metadata)

                    ' Convert to PDF/A-2b (NARA preferred for digitized records)
                    Dim outputPath As String = Path.Combine(validatedFolder, fileName)
                    pdf.SaveAsPdfA(outputPath, PdfAVersions.PdfA2b)

                    ' Verify the output
                    Using verifyPdf = PdfDocument.FromFile(outputPath)
                        If verifyPdf.PageCount > 0 Then
                            successCount += 1
                            Console.WriteLine($"[OK] {fileName}")
                        Else
                            Throw New Exception("Output PDF has no pages")
                        End If
                    End Using
                End Using
            Catch ex As Exception
                failCount += 1
                Console.WriteLine($"[FAILED] {fileName}: {ex.Message}")

                ' Move original to rejected folder for manual review
                Try
                    File.Copy(inputPath, Path.Combine(rejectedFolder, fileName), overwrite:=True)
                Catch
                End Try
            End Try
        Next

        Console.WriteLine()
        Console.WriteLine("=== NARA Transfer Preparation Complete ===")
        Console.WriteLine($"Successfully converted: {successCount}")
        Console.WriteLine($"Failed (requires review): {failCount}")
        Console.WriteLine($"Output location: {validatedFolder}")
    End Sub
End Module
$vbLabelText   $csharpLabel

Çıktı

Dönüştürülmüş PDF/A dosyalarının bulunduğu doğrulanmış klasör

NARA aktarımı için kayıtları hazırlarken, her dosyanın bireysel olarak doğrulanması hayati önem taşır. NARA'nın alma işlemi, uyumlu olmayan dosyaları reddedecektir ve büyük bir partiyi tekrar işlemden geçirmek hem zaman hem de emek açısından maliyetli olacaktır. Dönüştürme sürecinize doğrudan doğrulama eklemek — her SaveAsPdfA çağrısından sonra veraPDF gibi bir araç kullanarak — en güvenilir yaklaşımdır.

Mahkeme Belgesi Arşivleme

ABD federal mahkeme sistemi ve birçok eyalet mahkeme sistemi, uzun vadeli kayıt saklama amacıyla PDF/A'yı kabul eden veya gerektiren elektronik dosyalama sistemleri (temelde federal seviyede CM/ECF) kullanır. Tam gereksinimler yargı yetkisine göre değişiklik gösterse de genel beklentiler tutarlıdır:

Federal mahkemeler — ABD Mahkemeleri İdari Ofisi, kalıcı dava kaydının bir parçası olacak belgeler için PDF/A kullanmayı önerir. CM/ECF sistemleri genellikle PDF/A-1b'yi minimum standart olarak kabul eder, ancak karmaşık biçimlendirmeye sahip belgeler için PDF/A-2b giderek daha fazla tercih edilmektedir.

Eyalet mahkemeleri — Gereksinimler geniş ölçüde değişiklik gösterir. Bazı eyaletler (Teksas ve Kaliforniya gibi) belirli dosya türleri için açık PDF/A gereksinimlerine sahipken, diğerleri bunu en iyi uygulama olarak önerir. Hedef yargı yetkilinizin belirli kurallarını kontrol etmek önemlidir.

Mahkeme sistemleri arasındaki ortak gereksinimler:

Belgeler metin olarak aranabilir olmalıdır (sadece taranmış görüntüler değil); bu, mümkün olduğunda PDF/A-1a veya PDF/A-2a uyumluluğunun kullanılması veya taranmış belgelere OCR uygulanmış olmasının sağlanması anlamına gelir. Sayfa boyutları standart olmalıdır (genellikle ABD Mektup, 8,5 inç × 11 inç). Metaveri, dosyalama sisteminin desteklediği yerde vaka numarasını, dosyalama tarihini ve belge türünü içermelidir.

:path=/static-assets/pdf/content-code-examples/tutorials/pdfa-archiving-csharp/pdfa-court-filing.cs
using IronPdf;
using System;

// Court filing configuration
string caseNumber = "1:26-cv-00142-ABC";
string courtName = "US District Court, Northern District";
string documentType = "Motion for Summary Judgment";
string filingParty = "Plaintiff";

// Create legal document HTML
string legalDocumentHtml = $@"
E html>


le>
body {{
    font-family: 'Times New Roman', Times, serif;
    font-size: 12pt;
    line-height: 2;
    margin: 1in;
}}
.header {{ text-align: center; margin-bottom: 24pt; }}
.case-caption {{
    border: 1px solid black;
    padding: 12pt;
    margin: 24pt 0;
}}
.section {{ margin: 12pt 0; }}
h1 {{ font-size: 14pt; text-align: center; }}
.signature {{ margin-top: 48pt; }}
yle>


 class='header'>
<strong>{courtName}</strong>
v>

 class='case-caption'>
<p>ACME CORPORATION,<br>&nbsp;&nbsp;&nbsp;&nbsp;Plaintiff,</p>
<p>v.</p>
<p>EXAMPLE INDUSTRIES, INC.,<br>&nbsp;&nbsp;&nbsp;&nbsp;Defendant.</p>
<p style='text-align: right;'><strong>Case No. {caseNumber}</strong></p>
v>

{documentType.ToUpper()}</h1>

 class='section'>
<p>Plaintiff ACME Corporation, by and through undersigned counsel, respectfully
moves this Court for summary judgment pursuant to Federal Rule of Civil Procedure 56...</p>
v>

 class='section'>
<h2>I. INTRODUCTION</h2>
<p>This motion presents the Court with a straightforward question of contract interpretation...</p>
v>

 class='signature'>
<p>Respectfully submitted,</p>
<p>_________________________<br>
Jane Attorney, Esq.<br>
Bar No. 12345<br>
Law Firm LLP<br>
123 Legal Street<br>
City, State 12345<br>
(555) 123-4567<br>
jane@lawfirm.com</p>
<p>Attorney for Plaintiff</p>
v>

;

// Render with court-appropriate settings
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.Letter;
renderer.RenderingOptions.MarginTop = 72;
renderer.RenderingOptions.MarginBottom = 72;
renderer.RenderingOptions.MarginLeft = 72;
renderer.RenderingOptions.MarginRight = 72;

using var pdf = renderer.RenderHtmlAsPdf(legalDocumentHtml);

// Set metadata for court filing system indexing
var metadata = new System.Collections.Generic.Dictionary<string, string>
{
    { "Title", $"{documentType} - {caseNumber}" },
    { "Author", "Law Firm LLP" },
    { "Subject", $"Court Filing - {caseNumber}" },
    { "CaseNumber", caseNumber },
    { "DocumentType", documentType },
    { "FilingParty", filingParty },
    { "FilingDate", DateTime.Now.ToString("yyyy-MM-dd") }
};
pdf.MetaData.SetMetaDataDictionary(metadata);

// Convert to PDF/A-2b (widely accepted by federal courts)
string outputPath = $"court-filing-{caseNumber.Replace(":", "-")}.pdf";
pdf.SaveAsPdfA(outputPath, PdfAVersions.PdfA2b);
Imports IronPdf
Imports System
Imports System.Collections.Generic

' Court filing configuration
Dim caseNumber As String = "1:26-cv-00142-ABC"
Dim courtName As String = "US District Court, Northern District"
Dim documentType As String = "Motion for Summary Judgment"
Dim filingParty As String = "Plaintiff"

' Create legal document HTML
Dim legalDocumentHtml As String = $"
<!DOCTYPE html>
<html>
<head>
    <style>
        body {{
            font-family: 'Times New Roman', Times, serif;
            font-size: 12pt;
            line-height: 2;
            margin: 1in;
        }}
        .header {{ text-align: center; margin-bottom: 24pt; }}
        .case-caption {{
            border: 1px solid black;
            padding: 12pt;
            margin: 24pt 0;
        }}
        .section {{ margin: 12pt 0; }}
        h1 {{ font-size: 14pt; text-align: center; }}
        .signature {{ margin-top: 48pt; }}
    </style>
</head>
<body>
    <div class='header'>
        <strong>{courtName}</strong>
    </div>
    <div class='case-caption'>
        <p>ACME CORPORATION,<br>&nbsp;&nbsp;&nbsp;&nbsp;Plaintiff,</p>
        <p>v.</p>
        <p>EXAMPLE INDUSTRIES, INC.,<br>&nbsp;&nbsp;&nbsp;&nbsp;Defendant.</p>
        <p style='text-align: right;'><strong>Case No. {caseNumber}</strong></p>
    </div>
    <h1>{documentType.ToUpper()}</h1>
    <div class='section'>
        <p>Plaintiff ACME Corporation, by and through undersigned counsel, respectfully
        moves this Court for summary judgment pursuant to Federal Rule of Civil Procedure 56...</p>
    </div>
    <div class='section'>
        <h2>I. INTRODUCTION</h2>
        <p>This motion presents the Court with a straightforward question of contract interpretation...</p>
    </div>
    <div class='signature'>
        <p>Respectfully submitted,</p>
        <p>_________________________<br>
        Jane Attorney, Esq.<br>
        Bar No. 12345<br>
        Law Firm LLP<br>
        123 Legal Street<br>
        City, State 12345<br>
        (555) 123-4567<br>
        jane@lawfirm.com</p>
        <p>Attorney for Plaintiff</p>
    </div>
</body>
</html>
"

' Render with court-appropriate settings
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.Letter
renderer.RenderingOptions.MarginTop = 72
renderer.RenderingOptions.MarginBottom = 72
renderer.RenderingOptions.MarginLeft = 72
renderer.RenderingOptions.MarginRight = 72

Using pdf = renderer.RenderHtmlAsPdf(legalDocumentHtml)
    ' Set metadata for court filing system indexing
    Dim metadata As New Dictionary(Of String, String) From {
        {"Title", $"{documentType} - {caseNumber}"},
        {"Author", "Law Firm LLP"},
        {"Subject", $"Court Filing - {caseNumber}"},
        {"CaseNumber", caseNumber},
        {"DocumentType", documentType},
        {"FilingParty", filingParty},
        {"FilingDate", DateTime.Now.ToString("yyyy-MM-dd")}
    }
    pdf.MetaData.SetMetaDataDictionary(metadata)

    ' Convert to PDF/A-2b (widely accepted by federal courts)
    Dim outputPath As String = $"court-filing-{caseNumber.Replace(":", "-")}.pdf"
    pdf.SaveAsPdfA(outputPath, PdfAVersions.PdfA2b)
End Using
$vbLabelText   $csharpLabel

Çıktı

Belge yönetim sistemleri oluşturan hukuk firmaları ve hukuk teknolojisi şirketleri için, PDF/A dönüşümünü dosyalama iş akışına entegre etmek, her arşivlenen belgenin mahkemenin uzun süreli saklama gereksinimlerini karşılamasını sağlar — paralegaller veya avukatlar tarafından manuel müdahale gerektirmeden.

Medikal Kayıtların Saklanması

Sağlık kuruluşları, hasta kayıtlarını saklamak için sıkı gereksinimlerle karşı karşıya kalır. HIPAA belirli bir dosya formatı önermese de, uzun saklama sürelerinin (genellikle yetişkinler için 7–10 yıl, küçükler için daha uzun), erişilebilirlik gereksinimlerinin ve denetim beklentilerinin kombinasyonu, tıbbi belgeleri arşivlemek için PDF/A'yı doğal bir seçenek haline getirir.

Medikal kayıtların arşivlenmesi için önemli hususlar:

Saklama süreleri — Federal ve eyalet düzenlemeleri, medikal kayıtların farklı süreler boyunca saklanmasını gerektirir, genellikle 10+ yıla kadar genişler. PDF/A'nın uzun süreli okunabilirlik garantisi, format eskimesiyle ilgili endişelere kapılmadan bu gereksinimleri karşılamak için idealdir.

Erişilebilirlik — ADA ve Bölüm 508, elektronik tıbbi kayıtların erişilebilir olmasını gerektirir. PDF/A-2a veya PDF/A-3a uyumluluk düzeylerini (yapısal etiketlemeyi içerir) kullanmak, bu erişilebilirlik gereksinimlerini karşılamaya yardımcı olur.

İnteroperabilite — Tıbbi kayıtlar sık sık sağlayıcılar, sigortacılar ve hastalar arasında paylaşılır. PDF/A'nın kendi kendine yeterli doğası, belgelerin, hangi izleyici veya sistem kullanılırsa kullanılsın, tutarlı bir şekilde görüntülenmesini sağlar.

Denetim uygunluğu — Sağlık denetimleri, oluşturuldukları yıldan sonra tıbbi kayıtların üretilmesini gerektirebilir. PDF/A, bir denetim sırasında üretilen belgelerin, belgelerin bütünlüğü hakkında soruların yükselmesine neden olabilecek hiçbir yeniden görüntüleme farkı olmadan orijinallere özdeş olmasını sağlar.

:path=/static-assets/pdf/content-code-examples/tutorials/pdfa-archiving-csharp/pdfa-medical-records.cs
using IronPdf;
using System;
using System.Collections.Generic;

// Medical record metadata
string patientId = "MRN-2026-00847";
string documentType = "Discharge Summary";
string facility = "Metro General Hospital";
string department = "Internal Medicine";
DateTime encounterDate = new DateTime(2026, 2, 5);

// Create clinical document HTML
string clinicalDocumentHtml = $@"
E html>
ng='en'>

le>
body {{ font-family: Arial, sans-serif; margin: 40px; line-height: 1.6; }}
.header {{ border-bottom: 2px solid #2c3e50; padding-bottom: 15px; margin-bottom: 20px; }}
.patient-info {{ background: #ecf0f1; padding: 15px; margin: 15px 0; }}
.section {{ margin: 20px 0; }}
h1 {{ color: #2c3e50; }}
h2 {{ color: #3498db; font-size: 14pt; }}
.footer {{ margin-top: 40px; font-size: 10pt; color: #666; }}
yle>


 class='header'>
<h1>{facility}</h1>
<p>{department} | {documentType}</p>
v>

 class='patient-info'>
<p><strong>Patient ID:</strong> {patientId}</p>
<p><strong>Encounter Date:</strong> {encounterDate:MMMM d, yyyy}</p>
<p><strong>Attending Physician:</strong> Dr. Sarah Johnson, MD</p>
v>

 class='section'>
<h2>Chief Complaint</h2>
<p>Patient presented with acute respiratory symptoms including shortness of breath and persistent cough.</p>
v>

 class='section'>
<h2>Hospital Course</h2>
<p>Patient was admitted for observation and treatment. Symptoms improved with standard protocol...</p>
v>

 class='section'>
<h2>Discharge Instructions</h2>
<ul>
    <li>Continue prescribed medications as directed</li>
    <li>Follow up with primary care physician within 7 days</li>
    <li>Return to ED if symptoms worsen</li>
</ul>
v>

 class='footer'>
<p>Document generated: {DateTime.Now:yyyy-MM-dd HH:mm}</p>
<p>This document is archived in PDF/A-3a format for accessibility and long-term preservation.</p>
v>

;

var renderer = new ChromePdfRenderer();
using var pdf = renderer.RenderHtmlAsPdf(clinicalDocumentHtml);

// Set comprehensive metadata for medical records management
var metadata = new System.Collections.Generic.Dictionary<string, string>
{
    { "Title", $"{documentType} - {patientId}" },
    { "Author", "Metro General Hospital EHR System" },
    { "Subject", $"Clinical documentation for patient {patientId}" },
    { "PatientMRN", patientId },
    { "DocumentType", documentType },
    { "Facility", facility },
    { "Department", department },
    { "EncounterDate", encounterDate.ToString("yyyy-MM-dd") },
    { "RetentionCategory", "Medical Record - Adult" },
    { "RetentionPeriod", "10 years from last encounter" }
};
pdf.MetaData.SetMetaDataDictionary(metadata);

// Embed clinical data (HL7 FHIR format)
string fhirData = @"{
sourceType"": ""DocumentReference"",
atus"": ""current"",
pe"": { ""text"": ""Discharge Summary"" },
bject"": { ""reference"": ""Patient/MRN-2026-00847"" }


byte[] fhirBytes = System.Text.Encoding.UTF8.GetBytes(fhirData);

var fhirConfig = new EmbedFileConfiguration(EmbedFileType.xml)
{
    EmbedFileName = "clinical-data.json",
    AFDesc = "FHIR DocumentReference metadata",
    AFRelationship = AFRelationship.Data
};

var embedFiles = new List<EmbedFileByte>
{
    new EmbedFileByte(fhirBytes, fhirConfig)
};

// Convert to PDF/A-3a (accessible archival with embedded data)
using var archivedRecord = pdf.ConvertToPdfA(embedFiles, PdfAVersions.PdfA3a);

string outputPath = $"medical-record-{patientId}-{encounterDate:yyyyMMdd}.pdf";
archivedRecord.SaveAs(outputPath);
Imports IronPdf
Imports System
Imports System.Collections.Generic
Imports System.Text

' Medical record metadata
Dim patientId As String = "MRN-2026-00847"
Dim documentType As String = "Discharge Summary"
Dim facility As String = "Metro General Hospital"
Dim department As String = "Internal Medicine"
Dim encounterDate As DateTime = New DateTime(2026, 2, 5)

' Create clinical document HTML
Dim clinicalDocumentHtml As String = $"
<!DOCTYPE html>
<html lang='en'>
<head>
    <style>
        body {{ font-family: Arial, sans-serif; margin: 40px; line-height: 1.6; }}
        .header {{ border-bottom: 2px solid #2c3e50; padding-bottom: 15px; margin-bottom: 20px; }}
        .patient-info {{ background: #ecf0f1; padding: 15px; margin: 15px 0; }}
        .section {{ margin: 20px 0; }}
        h1 {{ color: #2c3e50; }}
        h2 {{ color: #3498db; font-size: 14pt; }}
        .footer {{ margin-top: 40px; font-size: 10pt; color: #666; }}
    </style>
</head>
<body>
    <div class='header'>
        <h1>{facility}</h1>
        <p>{department} | {documentType}</p>
    </div>
    <div class='patient-info'>
        <p><strong>Patient ID:</strong> {patientId}</p>
        <p><strong>Encounter Date:</strong> {encounterDate:MMMM d, yyyy}</p>
        <p><strong>Attending Physician:</strong> Dr. Sarah Johnson, MD</p>
    </div>
    <div class='section'>
        <h2>Chief Complaint</h2>
        <p>Patient presented with acute respiratory symptoms including shortness of breath and persistent cough.</p>
    </div>
    <div class='section'>
        <h2>Hospital Course</h2>
        <p>Patient was admitted for observation and treatment. Symptoms improved with standard protocol...</p>
    </div>
    <div class='section'>
        <h2>Discharge Instructions</h2>
        <ul>
            <li>Continue prescribed medications as directed</li>
            <li>Follow up with primary care physician within 7 days</li>
            <li>Return to ED if symptoms worsen</li>
        </ul>
    </div>
    <div class='footer'>
        <p>Document generated: {DateTime.Now:yyyy-MM-dd HH:mm}</p>
        <p>This document is archived in PDF/A-3a format for accessibility and long-term preservation.</p>
    </div>
</body>
</html>"

Dim renderer As New ChromePdfRenderer()
Using pdf = renderer.RenderHtmlAsPdf(clinicalDocumentHtml)
    ' Set comprehensive metadata for medical records management
    Dim metadata As New Dictionary(Of String, String) From {
        {"Title", $"{documentType} - {patientId}"},
        {"Author", "Metro General Hospital EHR System"},
        {"Subject", $"Clinical documentation for patient {patientId}"},
        {"PatientMRN", patientId},
        {"DocumentType", documentType},
        {"Facility", facility},
        {"Department", department},
        {"EncounterDate", encounterDate.ToString("yyyy-MM-dd")},
        {"RetentionCategory", "Medical Record - Adult"},
        {"RetentionPeriod", "10 years from last encounter"}
    }
    pdf.MetaData.SetMetaDataDictionary(metadata)

    ' Embed clinical data (HL7 FHIR format)
    Dim fhirData As String = "{
    ""resourceType"": ""DocumentReference"",
    ""status"": ""current"",
    ""type"": { ""text"": ""Discharge Summary"" },
    ""subject"": { ""reference"": ""Patient/MRN-2026-00847"" }
    }"

    Dim fhirBytes As Byte() = Encoding.UTF8.GetBytes(fhirData)

    Dim fhirConfig As New EmbedFileConfiguration(EmbedFileType.xml) With {
        .EmbedFileName = "clinical-data.json",
        .AFDesc = "FHIR DocumentReference metadata",
        .AFRelationship = AFRelationship.Data
    }

    Dim embedFiles As New List(Of EmbedFileByte) From {
        New EmbedFileByte(fhirBytes, fhirConfig)
    }

    ' Convert to PDF/A-3a (accessible archival with embedded data)
    Using archivedRecord = pdf.ConvertToPdfA(embedFiles, PdfAVersions.PdfA3a)
        Dim outputPath As String = $"medical-record-{patientId}-{encounterDate:yyyyMMdd}.pdf"
        archivedRecord.SaveAs(outputPath)
    End Using
End Using
$vbLabelText   $csharpLabel

Çıktı

Elektronik sağlık kayıt (EHR) sistemleri için, en etkili yaklaşım dokümanları oluşturmada PDF/A'ya dönüştürmektir — laboratuvar sonuçları çıktığında, klinik notlar tamamlandığında veya taburcu özetleri hazırlandığında. Bu "oluşturma sırasında arşivleme" stratejisi, daha sonra yığın göçünün maliyetini ve karmaşıklığını önler.


Sonraki Adımlar

PDF/A formatında belgeleri arşivlemek karmaşık olmak zorunda değildir. IronPDF, .NET geliştiricilerine, dosyya dokümanlar oluşturarak, dönüştürerek ve zenginleştirerek PDF/A uyumlu belgeler oluşturabilecekleri kapsamlı bir araç seti sunar — ve bunların tümü tanıdık C# ekosisteminde. Arşiv belgelerini HTML'den oluşturuyor, hükümet ve sağlık dağıtımı için erişilebilir PDF'ler üretiyor, uzun süreli saklama için eski PDF'leri dönüştürüyor ya da harici doğrulamayı yüksek hacimli bir yığın hattına entegre ediyor olun, IronPDF teknik detayları halleder, böylece uygulamanızın gereksinimlerine odaklanabilirsiniz.

Temel PDF/A-1 standardından PDF/A-3 ve PDF/A-4'ün modern yeteneklerine kadar, IronPDF PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-3a, PDF/A-3b, PDF/A-4, PDF/A-4e ve PDF/A-4f dahil olmak üzere tüm arşivleme sürümlerini ve uyumluluk seviyelerini destekler. Özel PDF/A nasıl yapılır kılavuzu, dönüşüm seçeneklerini ve uygunluk seviyelerini ayrıntılı olarak kapsar. Meta veri yönetimi, EmbedFileConfiguration aracılığıyla dosya gömme ve ZUGFeRD/Factur-X e-fatura desteği ile birleştirildiğinde, devlet kurumları, mahkeme sistemleri, sağlık kuruluşları ve finans kurumlarının arşivleme gereksinimlerini karşılamak için ihtiyacınız olan her şeyi sağlar.

Arşivlemeye hazır mısınız? IronPDF'i İndirin ve ücretsiz bir deneme ile deneyin. Özel uyum senaryonuzu konuşmak ya da sorularınız varsa, mühendislik destek ekibimize ulaşın — doğru yapmanıza yardımcı olmaktan memnuniyet duyarız.

Sıkça Sorulan Sorular

PDF/A uyumluluğu nedir?

PDF/A uyumluluğu, elektronik belgelerin arşivlenmesi ve uzun vadeli saklanması için tasarlanmış ISO standartlı PDF versiyonunu ifade eder. Belgelerin yıllar boyunca aynı şekilde çoğaltılabilmesini sağlar.

C# kullanarak PDF/A uyumlu belgeleri nasıl oluşturabilirim?

PDF/A uyumlu belgeleri, IronPDF kütüphanesini kullanarak C# ile oluşturabilirsiniz; bu kütüphane, çeşitli PDF/A formatlarına PDF oluşturma ve dönüştürme araçları sunar.

IronPDF tarafından desteklenen farklı PDF/A sürümleri nelerdir?

IronPDF, belge arşivleme ve saklama için farklı gereksinimlere uygun PDF/A-1, PDF/A-2 ve PDF/A-3 dahil olmak üzere birçok PDF/A sürümünü destekler.

IronPDF, ZUGFeRD ve Factur-X gibi e-fatura standartları için kaynak verileri gömmek konusunda yardımcı olabilir mi?

Evet, IronPDF, elektronik fatura işleme ve uygunluğu kolaylaştırmak için ZUGFeRD ve Factur-X gibi e-fatura standartları için kaynak verileri gömebilir.

C# içinde PDF/A uyumluluğunu nasıl doğrularım?

IronPDF'in yerleşik doğrulama araçlarını kullanarak C# içinde PDF/A uyumluluğunu doğrulayabilirsiniz; böylece belgelerinizin istenen PDF/A spesifikasyonlarına uygun olduğundan emin olun.

IronPDF ile devlet arşivleme senaryolarını ele almak mümkün mü?

Evet, IronPDF, NARA, mahkeme belgeleri ve tıbbi kayıtlar için gerekli standartlarla uyum dahil çeşitli hükümet arşivleme senaryolarını ele alabilir.

Arşivleme için PDF/A kullanmanın faydaları nelerdir?

Arşivleme için PDF/A kullanmanın avantajları, zamanla belgenin bütünlüğünü sağlama, uzun vadeli saklama için standartlaştırılmış bir format sağlama ve yasal ve kurumsal gereksinimlere uyma gibi avantajlar içerir.

IronPDF mevcut PDF'leri PDF/A formatına dönüştürmeyi destekliyor mu?

IronPDF mevcut PDF'leri PDF/A formatına dönüştürmeyi destekler, bu da kolay uyumluluk ve uzun vadeli belge saklama imkanı sağlar.

IronPDF, PDF/A dönüşümlerinde belge bütünlüğünü nasıl sağlar?

IronPDF, yazı tipleri, görüntüler ve yerleşim düzeni bütünlüğünü koruyarak PDF/A dönüşümlerinde belge bütünlüğünü sağlar, böylece arşivlenen belgeler tam olarak hedeflendiği gibi görünür.

IronPDF'i tıbbi kayıt arşivleme için kullanabilir miyim?

Evet, IronPDF tıbbi kayıt arşivlemesinde kullanılabilir ve belge saklama için sektör standartlarına ve düzenlemelerine uyumu sağlamaya yardımcı olur.

Ahmad Sohail
Full Stack Geliştirici

Ahmad, C#, Python ve web teknolojilerinde sağlam bir temele sahip bir full-stack geliştiricidir. Gerçek dünyadaki uygulamalarda ölçeklenebilir yazılım çözümleri oluşturmaktan ve tasarım ile işlevselliğin nasıl buluştuğunu keşfetmekten derin bir ilgi duyar.

...

Daha Fazla Oku
Başlamaya Hazır mısınız?
Nuget İndirmeler 19,014,616 | Sürüm: 2026.5 just released
Still Scrolling Icon

Hâlâ Kaydırıyor Musunuz?

Hızlıca kanıt ister misiniz? PM > Install-Package IronPdf
bir örnek çalıştır HTML'nizi bir PDF'ye dönüştüğünü izleyin.