How to Archive PDFs with PDF/A Compliance in C
C# ile IronPDF altında PDF/A uyumluluğu, .NET geliştiricilerine ISO 19005 standartlarına uygun arşiv PDF'leri oluşturmak, dönüştürmek ve doğrulamak için doğrudan bir yol sunar — belgelerin herhangi bir sistemde, şimdi veya gelecekte aynı şekilde görüntülenmesini sağlar. IronPDF, .NET ekosistemini terketmeden HTML'den PDF/A'ya dönüştürme ve mevcut dosyaları PDF/A-1b, PDF/A-2b veya PDF/A-3b olarak dönüştürmeden, ZUGFeRD ve Factur-X e-fatura uyumluluğu için kaynak verileri yerleştirmeye kadar tam PDF/A dönüşüm iş akışını ele alır.
Kısa Başlangıç Rehberi
Bu eğitim, C#'ta PDF/A uyumlu belgeler oluşturma, dönüştürme ve doğrulama konusunu kapsar — e-faturalama biçimlerini ve gerçek dünyadaki hükümet arşivleme gereksinimlerini içerir.
- Kimin için: Uzun süreli depolama veya düzenlemeli arşivleme için belgeler üreten uygulamalar geliştiren .NET geliştiricileri — hükümet kayıt yönetimi, hukuki başvurular, finansal denetim izleri, sağlık kayıtları veya PDF/A'nın sıkı bir uyumluluk gereksinimi olduğu e-faturalama platformları.
- Ne inşa edeceksiniz: 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 uyumluluğu doğrulaması ile hata raporlaması ve NARA, mahkeme belgeleri ve tıbbi kayıtlar gereksinimleri için gerçek dünya arşivleme örüntüleri.
- Nerede çalışır: Herhangi bir .NET ortamında — .NET 10, .NET 8 LTS, .NET Framework 4.6.2+, .NET Standard 2.0. PDF/A dönüştürme ve doğrulama işlemleri tamamen yerel olarak çalışır; üretim için harici doğrulayıcı araçlar gerektirmez.
- Bu yaklaşımı ne zaman kullanmalı: Uygulamanız uzun süreli hayatta kalması gereken belgeler ürettiğinde — faturalar, sözleşmeler, uyumluluk raporları, mahkeme başvuruları veya tıbbi kayıtlar — ve düzenleyici gereklilikler (NARA, AB arşivleme standartları, HIPAA, SEC) kendine ait, doğrulanabilir PDF/A formatını gerektirdiğinde.
- Teknik açıdan neden önemli: Standart PDF'ler harici yazı tiplerine başvurabilir, aktif içerik yerleştirebilir ve sisteme özgü render işlemine güvenebilir — bunların hepsi zamanla bozulur. PDF/A, bu bağımlılıkları format seviyesinde yasaklar, render için gerekli olan her şeyi dosyanın içine yerleştirir ve böylece herhangi bir uyumlu görüntüleyicede aynı çıktıyı garantiler.
Mevcut bir PDF'yi PDF/A'ya sadece birkaç satır kod ile dönüştürün:
-
NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronPdf yükleyin
PM > Install-Package IronPdf -
Bu kod parçasını kopyalayıp çalıştırın.
using IronPdf; PdfDocument pdf = PdfDocument.FromFile("report.pdf"); pdf.SaveAsPdfA("archived-report.pdf", PdfAVersions.PdfA3b); -
Canlı ortamınızda test etmek için dağıtın
Bugün projenizde IronPDF kullanmaya başlayın ücretsiz deneme ile
IronPDF'nin 30 günlük deneme sürümünü satın aldıktan veya kaydolduktan sonra, uygulamanızın başlangıcında lisans anahtarınızı ekleyin.
IronPdf.License.LicenseKey = "KEY";
IronPdf.License.LicenseKey = "KEY";
Imports IronPdf
IronPdf.License.LicenseKey = "KEY"
İçindekiler
- PDF/A'yı Anlamak
- PDF/A Belgeleri Oluşturma
- Gelişmiş PDF/A İş Akışları
- Gerçek Dünya Arşivleme Senaryoları
PDF/A Nedir ve Neden Önemlidir?
PDF/A, elektronik belgelerin uzun süreli, güvenilir arşivlenmesi için özel olarak tasarlanmış, PDF formatının (ISO 19005) ISO standartlarına uygun bir alt kümesidir. Standart bir PDF'den farklı olarak, sistem özelinde görüntüleme davranışlarına, dış yazı tiplerine veya dış içeriklere referans vermeyen bir PDF/A dosyası tamamen kendine yeterlidir. Belgeyi görüntülemek için gereken her yazı tipi, renk profili ve meta veri, dosya içine doğrudan gömülmüştür.
Bu önemlidir çünkü bir PDF/A belgesi bugün veya 100 yıl sonra, hangi işletim sistemi veya yazılım sürümü olursa olsun, tüm uyumlu görüntüleyicilerde aynı şekilde görüntülenir. Kaybolabilecek dış kaynaklara bağımlılık yok, belirli bir yazı tipinin kurulmasına gerek yok ve renklerin veya şeffaflığın nasıl görüntülenmesi gerektiği konusunda belirsizlik yok.
Teknik dayanıklılığın ötesinde, PDF/A uyumluluğu sıklıkla zorunlu bir gerekliliktir - sadece en iyi uygulama olmakla sınırlı değildir. PDF/A'yı zorunlu kılan sektörler ve kurumlar şunlardır:
Hukuk ve adli sistemler — ABD, AB ve birçok diğer yargı alanındaki mahkemeler elektronik dosyalamalar için PDF/A'yı önerir veya zorunlu kılar. ABD federal mahkeme sisteminin CM/ECF dosyalama standartları, uzun vadeli kayıt tutma için tercih edilen format olarak PDF/A'ya atıfta bulunur.
Devlet kurumları — ABD Ulusal Arşivleri ve Kayıt Yönetimi (NARA) sürekli elektronik kayıtların transferi için PDF/A'yı kabul edilebilir format olarak 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 kurumlar PDF/A dosyalamalarını kabul eder ve iç denetim ekipleri finansal tabloların, raporların ve destekleyici belgelerin zaman içinde değişmeden ve doğrulanabilir kalmasını sağlamak için sıklıkla PDF/A'yı benimser.
Sağlık hizmetleri — Tıbbi kayıt saklama düzenlemeleri (ABD'de HIPAA gibi) belirli bir dosya formatını zorunlu kılmaz, ancak 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ü bu uzun vadeli okunabilirliği garanti eder.
Kısacası, bir belgenin zaman, sistemler ve organizasyonel sınırlar boyunca değişmeden kalması gerektiğinde PDF/A kullanırsınız. Uygulamanız belgeler oluşturuyorsa ve bu belgeler yıllar sonra - faturalar, sözleşmeler, uyum raporları, tıbbi kayıtlar gibi - referans alınabilecekse, PDF/A doğru seçimdir.
PDF/A Sürümleri Açıklaması
PDF/A standardı, katı arşiv garantilerini korurken ek PDF özelliklerini desteklemek amacıyla birkaç sürüm üzerinden evrimleşmiştir. Sürümler arasındaki farklılıkları anlamak, kullanım durumunuza en uygun olanını seçmek için gereklidir.
PDF/A-1 (Temel Arşivleme)
PDF/A-1 (ISO 19005-1:2005), PDF 1.4'e dayalı standardın ilk sürümüydü. Şifreleme yasaktır; Ses/video içeriği yasaktır; JavaScript yasaktır. PDF/A-1, iki uyumluluk seviyesiyle gelir:
PDF/A-1b (temel): Belgenin güvenilir görsel yeniden üretimini sağlar. Bu minimum uyumluluk seviyesidir ve belgenin doğru rendere edildiğinde doğru görüneceğini garanti eder.
PDF/A-1a (erişilebilir): Erişilebilirlik için etiketlenmiş içerik, Unicode karakter eşlemesi ve mantıksal okuma sırası dahil olmak üzere 1b üzerine yapısal ve anlamsal gereklilikler ekler. Bu, erişilebilirlik uyumluluğunun önemli olduğu durumlarda gerekli olan daha yüksek bir standarttır.
PDF/A-1 en yaygın desteklenen sürümdür ve yeni özelliklerden ziyade geniş uyumluluğun öncelikli olduğu yasal ve devlet bağlamlarında hala sıkça kullanılır.
PDF/A-2 (JPEG2000, Şeffaflık)
PDF/A-2 (ISO 19005-2:2011), PDF 1.7'ye dayalıdır ve PDF/A-1'de bulunmayan özelliklerin desteğini getirir:
JPEG2000 görüntü sıkıştırma: PDF/A-1'deki JPEG sıkıştırmasına göre daha iyi kalite-boyut oranları sunar.
Şeffaflık ve katman desteği: Her şeyi opak öğelere düzlemlemeden daha karmaşık görsel düzenleri mümkün kılar.
Yerleşik PDF/A ekleri: PDF/A-2 belgeleri, ekler olarak diğer PDF/A uyumlu dosyaları gömebilir (ancak yalnızca PDF/A dosyaları, rastgele formatlar değil).
PDF/A-2, PDF/A-1 (2b ve 2a) ile aynı uygunluk seviyelerini içerir, artı yeni bir seviye: PDF/A-2u (Unicode), tüm metinler için Unicode eşlemesini gerektirir ancak a seviyesinin tam yapısal etiketlenmesini gerektirmez.
PDF/A-3 (Gömülü Dosyalar)
PDF/A-3 (ISO 19005-3:2012), modern iş akışları için en önemli genişlemedir. PDF/A-2 (PDF 1.7) ile aynı tabanı paylaşır ve tüm özelliklerini korur, ancak kritik bir yetenek ekler: PDF/A belgesine herhangi bir formatta dosya gömme yeteneği.
Bu, orijinal XML kaynak verilerini, CSV çıkışlarını, hesap tablolarını veya herhangi bir makineyle okunabilir dosyayı insan tarafından okunabilir görsel belgenin yanına ekleyebileceğiniz anlamına gelir. PDF/A-3 konteyneri, hem sunum katmanını hem de alttaki verileri içeren tek bir paket haline gelir.
Bu yetenek, modern e-faturalama standartlarının temelidir:
ZUGFeRD: Almanya'dan gelmiş olup şimdi AB genelinde Factur-X olarak benimsenmiştir. Yapılandırılmış XML fatura verilerini (Endüstriler Arası Fatura formatında) hem insan tarafından okunabilir görsel fatura hem de makine işlemesine uygun PDF/A-3 belgesine yerleştirir. Tek bir dosya hem insan hem de makine işleme ihtiyaçlarını karşılar.
PDF/A-3 uygunluk seviyeleri aynı deseni takip eder: 3b (görsel), 3a (erişilebilir + etiketlenmiş) ve 3u (Unicode eşlenmiş).
PDF/A-4 (PDF 2.0 Tabanlı)
PDF/A-4 (ISO 19005-4:2020), en yeni sürüm olup, PDF 2.0 tabanlıdır. Uyumluluk seviye yapısını basitleştirir; artık a/b/u ayrımı 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'e benzer).
PDF/A-4e: Özellikle mühendislik belgeleri için tasarlanmıştır; 3D içerik, zengin medya ve diğer teknik unsurları destekler.
PDF/A-4, PDF 2.0'un kendisindeki iyileştirmelerden de yararlanır, geliştirilen etiketleme yapıları ve XMP (Genişletilebilir Metadata Platformu) kullanarak geliştirilen meta veri yetenekleri dahil.
PDF/A-4'ün benimsenmesi artıyor, ancak PDF/A-2 ve PDF/A-3'e kıyasla görüntüleyiciler ve doğrulayıcılar tarafından henüz daha geniş desteklenmiyor.
Hangi Sürümü Kullanmalısınız?
Doğru PDF/A sürümünü seçmek, özel ihtiyaçlarınıza bağlıdır:

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 verileri 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 (PDF/A-1a, PDF/A-2a veya PDF/A-3a) uygunluk seviyesini seçin.
Modern iş akışları: Tüketicileriniz PDF 2.0'ı destekliyorsa, en son özellikler için PDF/A-4 kullanın.
Şüpheye düştüğünüzde, PDF/A-3b modern yetenek ile 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 sürümü hedeflemeniz gerektiğini anladığınıza göre kodlamaya geçelim. IronPDF, HTML içerikten doğrudan PDF/A uyumlu belgeler üretmeyi veya mevcut PDF'leri PDF/A formatına dönüştürmeyi kolaylaştırır.
IronPDF Kurulumu
Başlamadan önce IronPDF NuGet paketini .NET projenize yükleyin. Bunu, NuGet Paket Yöneticisi Konsolü, .NET CLI veya Visual Studio NuGet UI aracılığıyla yapabilirsiniz.
Install-Package IronPdf
Install-Package IronPdf
.NET CLI kullanarak:
dotnet add package IronPdf
dotnet add package IronPdf
IronPDF, .NET Framework 4.6.2+, .NET Core, .NET 5+ ve .NET Standard 2.0'ı destekler, böylece herhangi bir modern .NET projesine uyum sağlar ve uyumluluk sorunları olmadan entegrasyon sağlar.
HTML'den PDF/A'ya Dönüştürme
En yaygın iş akışı, HTML içeriğinden PDF üretmek ve bunu doğrudan PDF/A formatında kaydetmektir. IronPDF'in ChromePdfRenderer HTML'den PDF'e dönüştürmeyi ele alır ve SaveAsPdfA yöntemi tek adımda uyumluluk dönüştürmesini ele alır.
: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
Çıktı
Bu örnekte, HTML, modern web standartlarına pixel-mükemmel bir sadakat sağlayan IronPDF'nin Chromium tabanlı işleme motoru kullanılarak bir PDF'ye dönüştürülür. Daha sonra SaveAsPdfA yöntemi gerekli tüm yazı tiplerini gömüp gerektiği gibi renk alanlarını dönüştürür, yasaklanmış özellikleri (JavaScript veya dış bağlantılar gibi) kaldırır ve uygun XMP meta verilerini yazar. Sonuç, arşiv saklamaya hazır tamamen kendine yeten bir PDF/A-3b dosyasıdır.
Bu yaklaşım, IronPDF'nin diğer işleme özellikleriyle de sorunsuz çalışır. Başlıklar ve alt bilgiler uygulayabilir, sayfa boyutları ve kenar boşlukları ayarlayabilir, CSS stilini dahil edebilir ve RenderingOptions kullanarak çıktıyı ince ayarlayabilirsiniz - tüm bunlar PDF/A dönüştürme adımından önce. SaveAsPdfA çağrısı PDF'nin nasıl oluşturulduğuna bakılmaksızın uyumluluk dönüşümünü ele alır.
Mevcut PDF'leri PDF/A'ya Dönüştürme
Her zaman HTML'den başlamış olmanız gerekmez. Gerçek dünyadaki birçok senaryoda, tarayıcılardan, üçüncü taraf sistemlerden, eski arşivlerden veya kullanıcı yüklemelerinden gelen mevcut PDF dosyaları alırsınız ve bunları uyumlu saklama için PDF/A'ya dönüştürmeniz gerekir.
IronPDF, bunu aynı SaveAsPdfA yöntemiyle ele alır:
: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
Dönüştürme sırasında IronPDF, mevcut PDF'yi analiz eder ve gerekli dönüşümleri uygular: başvurulmuş ancak dahil edilmemiş 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 özellikleri kaldırır. Dönüştürmeden hemen ardından diske kaydetmeden bellekte dönüştürmek istiyorsanız ConvertToPdfA yöntemini de kullanabilirsiniz — ek işlemelerin dönüştürme sonrasında takip ettiği hatlarda kullanışlıdır.
Bu desen, eski bir belge deposunu modern arşiv standartlarıyla uyumlu hale getirmeniz gerektiği göç projeleri için idealdir.
Kaynak Verileri Gömme (PDF/A-3)
PDF/A-3 standardının en güçlü özelliklerinden biri, XML, CSV, JSON, elektronik tablolar veya diğer herhangi bir format gibi keyfi dosyaları — doğrudan PDF belgesi içinde — gömme yeteneğidir. Bu işlem, PDF'yi yalnızca görsel bir belge olmaktan çıkarır ve hem insan tarafından okunabilir sunum hem de makine tarafından okunabilir kaynak verileri tek bir dosyada taşıyan hibrit bir konteynere dönüştürür.
Görsel Belge Yanında XML/CSV Eklemek
Temel iş akışı basittir: Görsel PDF'nizi oluşturun veya yükleyin, kaynak veri dosyasını katıştırılmış ek olarak ekleyin ve PDF/A-3 olarak kaydedin. IronPDF, ConvertToPdfA yönteminin birden fazla aşırı yüklenmesinden dosyaları gömme işlemini destekler — dosya yollarını doğrudan IEnumerable<string> olarak geçebilir, bellekte zaten bulunan bayt dizileri için EmbedFileByte kullanabilir veya kaynak temelli 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
Bu model, görsel PDF'nin biçimlendirilmiş bir bilanço veya gelir tablosu olabileceği, ekli XML veya CSV dosyasının ise raporun oluşturulmasında kullanılan ham verileri içerebildiği finansal raporlama iş akışları için özellikle değerlidir. Denetleyiciler, aynı dosyanın içinden görsel belgeyi inceleyebilir ve katıştırılmış kaynak verileri kullanarak temel sayıları bağımsız olarak doğrulayabilir. ConvertToPdfA yönteminin koleksiyon parametresine ek dosya yolları veya bayt dizileri geçirerek aynı belgeye birden fazla eki gömebilirsiniz.
ZUGFeRD ve Factur-X E-Fatura Uyumu
ZUGFeRD (Zentraler User Guide des Forums elektronische Rechnung Deutschland) ve uluslararası karşılığı Factur-X, yapılandırılmış fatura verilerinin PDF/A-3 belgesi içinde nasıl gömüleceğini belirleyen e-fatura standartlarıdır. Görsel PDF insan tarafından okunabilir fatura olarak hizmet ederken, ekli XML dosyası (Çapraz Endüstri Faturası veya CII formatında) makine tarafından işlenebilir verileri taşır.
ZUGFeRD/Factur-X uyumluluğu için ana gereksinimler şunlardır:
PDF, (en az) PDF/A-3b'ye uygun olmalıdır. Gömülü XML dosyası, UN/CEFACT Çapraz Endüstri Faturası şemasına uymalıdır. XML dosyası, standardın spesifikasyonuna göre adlandırılmalıdır (genellikle Factur-X için factur-x.xml veya ZUGFeRD için zugferd-invoice.xml olarak). Özel XMP metadata özellikleri, belgeyi bir ZUGFeRD/Factur-X faturası olarak tanımlamak için ayarlanmalıdır.
IronPDF'in EmbedFileConfiguration sınıfı, bu gereklilikler üzerinde ince ayar kontrolü sağlar. ConformanceLevel.XRECHNUNG gibi, ConformanceLevel ayarlayabilir, SchemaNamespace, SchemaPrefix, PropertyVersion ve AFRelationship özelliklerini hedef sisteminizin beklediği tam e-fatura profiline uydurabilirsiniz.
IronPDF ile ZUGFeRD-uyumlu bir fatura nasıl oluşturabilirsiniz:
: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
Çıktı
Bu yaklaşım, faturalama sisteminizin hem insan tarafından incelemenin (görsel PDF) hem de otomatik olarak işlemenin (gömülü XML) yapılabileceği tek bir standartlarla uyumlu paket oluşturmasını sağlar.
Hesap Verilerinin Korunması
E-faturalamanın ötesinde, PDF/A-3'ün gömme yeteneği, tam bir iz izi korumanın önemli olduğu her türlü iş akışı için değerlidir. Orijinal kaynak verileri, işlem günlükleri veya değişiklik geçmişini nihai belgenin yanında ekleyerek, gelecekte herhangi bir zamanda bağımsız olarak doğrulanabilir kendi kendine yeterli bir kayıt yaratıyorsunuz.
Yaygın hesap verisi gömme desenleri şunları içerir:
Finansal tablolar — Ham muhasebe verilerini (ERP sisteminizden XML veya CSV ihracı) biçimlendirilmiş finansal raporun yanına gömün. Denetçiler, görsel belgede yer alan rakamların, orijinal sisteme erişim gerektirmeden kaynak verilerle eşleştiğini doğrulayabilir.
Regülasyon başvuruları — Nihai başvuru belgesi içinde orijinal başvuru verilerini, doğrulama sonuçlarını ve destekleyici hesaplamaları gömülü dosyalar olarak ekleyin. Bu, başvurunun tam kaydını içeren tek bir arşiv paketi oluşturur.
Sözleşme yönetimi — Nihai imzalı sözleşme PDF'si içinde sürüm tarihçelerini, onay zincirlerini veya imzalı metadata dosyalarını gömün. Bu, belgenin tam yaşam döngüsünü tek bir arşiv dosyası içinde korur.
: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
PDF/A Uyumluluğunu Doğrulama
Bir belge oluşturup ona PDF/A demek yeterli değildir — çıktının gerçekten standardın gereksinimlerini karşıladığını doğrulamanız gerekir. PDF/A olduğunu iddia eden ancak doğrulamayı geçmeyen bir dosya, arşiv sistemleri, devlet portalları veya e-fatura platformları tarafından kabul edilmeyecektir.
IronPDF'in SaveAsPdfA ve ConvertToPdfA yöntemleri uyumluluk dönüşümünün ağır işlerini üstlenir — yazı tiplerini gömme, renk alanlarını dönüştürme, yasaklanmış özellikleri kaldırma ve XMP meta verilerini yazma. Ancak, çıktının bağımsız olarak doğrulanması için, veraPDF veya Adobe Acrobat Pro'nun yerleşik Preflight aracı gibi özel dış araçlarla doğrulamanız gerekir. veraPDF'i CI/CD boru hattınıza veya belge işleme iş akışınıza entegre etmek, üretilen her dosyanın depolanmadan veya dağıtılmadan önce iddia edilen standardı karşıladığını onaylayan yetkili bir üçüncü şahıs onayı almanızı sağlar.
Yaygın Uyumluluk Hataları ve Çözümleri
IronPDF, uyumluluk işinin çoğunu halletmesine rağmen, belirli giriş koşulları doğrulama hatalarına neden olabilir. İşte en yaygın sorunlar ve bunların nasıl çözüleceği:
Gömülü olmayan fontlar — Bu, en yaygın hata. Kaynak PDF, font verilerini gömmeden bir fontu adla referans alıyorsa, çıktı PDF/A uygun olmayacaktır. IronPDF, dönüşüm sırasında fontları otomatik olarak gömlemeye çalışır, ancak IronPDF'in çalıştığı sistemde bir font dosyası yoksa, gömme başarısız olacaktır. Çözüm: Kaynak belgelerinizde kullanılan tüm fontların sunucuda yüklü olmasını sağlayın veya HTML içeriğinizde evrensel olarak mevcut web-güvenli fontları kullanın.
Desteklenmeyen renk alanları — PDF/A, tüm renklerin bir ICC profili ile desteklenen belirli, gömülü bir renk alanı içinde tanımlanmasını gerektirir (ekran odaklı belgeler için genellikle sRGB veya baskı için bir CMYK profili). Ekli bir profil olmadan cihaz bağımlı renk alanları kullanan kaynak PDF'ler doğrulamayı geçmeyecektir. Çözüm: IronPDF, çoğu durumda renk alanı dönüşümünü otomatik olarak yapar. Uç durumlar için, kaynak içeriğinizin renkleri sRGB olarak belirtmesini sağlayın.
Şifreleme veya parola koruması — PDF/A, şifrelemeyi kesinlikle yasaklar. Parola korumalı bir PDF'i çeviriyorsanız, önce şifresini çözmelisiniz. Çözüm: Dönüştürmeden önce korumalı dosyayı açmak için PdfDocument.FromFile("encrypted.pdf", "password") kullanın.
JavaScript veya multimedya içeriği — PDF/A, JavaScript, ses, video ve diğer etkileşimli öğeleri yasaklar. Kaynak HTML'niz <script> etiketleri, gömülü video veya etkileşimli formlar içeriyorsa, bunların kaldırılması gerekecek veya dönüşüm onları çıkartacaktır. Çözüm: HTML içeriğinizin statik olmasını sağlayın, ardından PDF/A'ya dönüştürün.
Ş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ürmek için sayfaların düzleştirilmesi gerekir. Çözüm: Belgeleriniz saydamlık kullanıyorsa PDF/A-2 veya daha sonrasını hedefleyin veya opacity, rgba veya PDF/A-1'i hedeflerken saydam PNG'leri kullanmamaya çaba gösterin.
Yazı Tipleri, Renk Alanları ve Meta Veriler Gereksinimleri
PDF/A uyumluluğunun üç temel taşı olan — fontlar, renk alanları ve metadata — anlamak, ilk denemede doğrulamayı geçecek belgeler tasarlamanıza yardımcı olur.
Fontlar: Belgedeki her font tamamen gömülmelidir. Bu, metinde görünen tüm glifleri içerir, sadece bir alt kümesini değil. PDF/A-1a, 2a ve 3a uygunluk seviyeleri için, her karakterin aynı zamanda bir Unicode haritası olması gerekir, böylece metin güvenilir bir şekilde çıkarılabilir ve aranabilir.
IronPDF'in HTML'den PDF'ye dönüştürmesini kullanırken, Chromium motoru sistemde mevcut olan fontları otomatik olarak gömer. Farklı dağıtım ortamları (geliştirme, sahneleme, üretim) arasında tutarlılığı garanti etmek için, HTML'nizde <link> etiketleri üzerinden yüklü Google Yazı Tiplerini kullanmayı veya yazı tipi dosyalarını uygulamanızla paketleyip CSS @font-face üzerinden bunlara referans vermeyi düşünün.
Renk alanları: PDF/A, tüm renklerin bir Cihazdan Bağımsız renk alanı içinde belirtilmesini ve bir ICC profili tarafından desteklenmesini gerektirir. Pratikte, bu, çoğu belge için sRGB kullanmak anlamına gelir. IronPDF, uygun ICC profilini gömer ve SaveAsPdfA sürecinde renkleri otomatik olarak dönüştürür — iş akışınız özel bir profil gerektiriyorsa özel bir ICC dosya yolunu da geçebilirsiniz. Ancak, CMYK hassasiyeti gerektiren yazdırma odaklı belgelerle çalışıyorsanız, kaynak içeriğinizin CMYK-uygun profiller kullandığından ve bu profillerin dönüşüm sırasında korunduğundan emin olun.
Metadata: PDF/A, belgenin içine XMP (Genişletilebilir Metadata Platformu) metadata gömülmesini gerektirir. Bu, belgenin başlığı, yazarı, oluşturma tarihi, değiştirilme tarihi ve PDF/A uygunluk düzeyi tanımlayıcısını içerir. IronPDF bu alanları otomatik olarak doldurur, ancak MetaData özelliği üzerinden de daha fazla kontrol için 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
Metadata'yı açık olarak ayarlamak, kayıt yönetim sistemlerinde indekslenecek belgeler için özellikle önemlidir, çünkü başlık ve yazar alanları kataloglama ve arama için sıkça kullanılır.
Hükümet Kayıt Yönetimi Kullanım Durumları
PDF/A sadece teknik bir spesifikasyon değildir — birçok hükümet, yasal ve sağlık bağlamında pratik bir gerekliliktir. Bu bölümde, PDF/A'nın belirli düzenleyici çerçevelere nasıl uyduğunu ve IronPDF kullanarak gereksinimlerini karşılamak için ne bilmeniz gerektiğini inceleyeceğiz.
NARA Gereksinimleri (ABD Ulusal Arşivleri)
Amerika Birleşik Devletleri Ulusal Arşivler ve Kayıtlar Yönetimi (NARA), kalıcı değer taşıyan federal kayıtları korumaktan sorumludur. NARA'nın transfer kılavuzu, ulusal arşivlere kalıcı elektronik kayıtlar transferi için tercih edilen formatlardan biri olarak PDF/A'yı belirtir.
NARA için PDF/A başvurularındaki ana gereksinimler:
NARA, çoğu kayıt türü için PDF/A-1, PDF/A-2 ve PDF/A-3'ü kabul eder. Belgeler, transferden önce iddia edilen PDF/A sürümüne karşı doğrular yapılmalıdır. Metadata, oluşturan ajansı, kayıt serisi tanımlayıcısını ve kapsanan tarih aralığını içermelidir. Gömülü fontlar zorunludur — NARA, eksik veya referanslı-only fontlara sahip belgeleri açıkça reddeder. Dijitalleştirilen (tarama yapılan) kayıtlar için, NARA, minimum 300 DPI çözünürlük önerir ve gelişmiş görüntü sıkıştırması nedeniyle PDF/A-2 veya daha sonraki versiyonları tercih eder.
Ajans kayıtlarını NARA transferi için nasıl hazırlayabilirsiniz:
Giriş

: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
Çıktı
@
NARA transferi için kayıtları hazırlarken, her dosyanın ayrı ayrı doğrulanması kritik öneme sahiptir. NARA'nın giriş süreci uyumsuz dosyaları reddeder ve büyük bir partiyi yeniden işlemek, hem zaman hem de çaba açısından maliyetlidir. Her SaveAsPdfA çağrısından sonra veraPDF gibi bir araç kullanarak doğrulamayı doğrudan dönüşüm hattınıza eklemek en güvenilir yaklaşımdır.
Mahkeme Belgesi Arşivleme
ABD federal mahkeme sistemi ve birçok eyalet mahkeme sistemi, PDF/A'yı kabul eden veya talep eden (özellikle federal düzeyde CM/ECF) elektronik dosyalama sistemleri kullanmaktadır. Kesin gereksinimler yargı yetkisine göre değişmekle birlikte, genel beklentiler tutarlıdır:
Federal mahkemeler — ABD Mahkemeler İdaresi Ofisi, daimi dosya kaydı olacak belgeler için PDF/A'yı önerir. CM/ECF sistemleri genellikle minimum standart olarak PDF/A-1b'yi kabul eder, ancak karmaşık biçimlendirmeye sahip belgeler için giderek daha fazla PDF/A-2b tercih edilmektedir.
Eyalet mahkemeleri — Gereksinimler geniş ölçüde değişiklik gösterir. Bazı eyaletler (Teksas ve Kaliforniya gibi) belirli dosyalama türleri için PDF/A'yı zorunlu tutarken, diğerleri basitçe en iyi uygulama olarak önerir. Hedef yargı yetkiniz için belirli kuralları kontrol etmek önemlidir.
Mahkeme sistemleri genelinde yaygın gereksinimler şunları içerir:
Belgeler metin aranabilir olmalıdır (yalnızca taranmış görüntüler değil), bu da mümkünse PDF/A-1a veya 2a uygunluğunu kullanmak ya da taranmış belgelere OCR uygulanmasını sağlamak anlamına gelir. Sayfa boyutları standart olmalıdır (genellikle ABD Letter, 8.5" × 11"). Metadata, dosya sisteminin desteklediği durumda dava numarası, dosyalama tarihi 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> Plaintiff,</p>
<p>v.</p>
<p>EXAMPLE INDUSTRIES, INC.,<br> 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> Plaintiff,</p>
<p>v.</p>
<p>EXAMPLE INDUSTRIES, INC.,<br> 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
Çıktı
Belge yönetim sistemleri kuran hukuk firmaları ve yasal teknoloji şirketleri için, dosyalama iş akışına PDF/A dönüşümünü entegre etmek, her arşivlenen belgenin mahkemenin uzun süreli koruma gereksinimlerini karşılamasını — paralegaller veya avukatlar tarafından manuel müdahale olmadan — sağlar.
Tıbbi Kayıtları Saklama
Sağlık hizmeti organizasyonları, hasta kayıtlarını saklamak için katı gereksinimlerle karşı karşıyadır. HIPAA belirli bir dosya formatını zorunlu kılmasa da, uzun saklama süreleri (genellikle yetişkinler için 7–10 yıl, küçükler için daha uzun), erişilebilirlik gereksinimleri ve denetim beklentileri göz önüne alındığında PDF/A, tıbbi belgeleri arşivlemek için doğal bir seçimdir.
Tıbbi kayıtların arşivlenmesi için dikkate alınması gereken önemli noktalar:
Saklama süreleri — Federal ve eyalet düzenlemeleri, tıbbi kayıtların çeşitli sürelerle, çoğunlukla 10 yılı aşkın süre saklanmasını gerektirir. PDF/A'nın uzun vadeli okunabilirlik garantisi, bu gereksinimleri formatın zaman aşımına uğramasından endişe etmeden 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 uygunluk seviyelerinin kullanılması (yapısal etiketleme içerir) bu erişilebilirlik gereksinimlerini karşılamaya yardımcı olur.
İşbirliği Yapılabilirlik — Tıbbi kayıtlar genellikle sağlayıcılar, sigortacılar ve hastalar arasında paylaşılır. PDF/A'nın kendi kendine yeterli doğası, belgelerin görüntüleyici veya belgeleri açmak için kullanılan sistemden bağımsız olarak tutarlı bir şekilde görüntülenmesini sağlar.
Denetime Hazır Olma — Sağlık denetimleri, tıbbi kayıtların oluşturuldukları tarihten yıllar sonra üretilmesini gerektirebilir. PDF/A, bir denetim sırasında üretilen belgelerin, belge bütünlüğü hakkında soru işaretleri uyandırabilecek herhangi bir görüntü farkı olmadan, orijinalleriyle aynı 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
Çıktı
Elektronik sağlık kaydı (EHR) sistemleri için en etkili yaklaşım, belgeleri oluşturma noktasında PDF/A'ya dönüştürmektir — laboratuvar sonuçları üretildiğinde, klinik notlar tamamlandığında veya taburcu özetleri hazırlandığında. Bu 'oluşturma sırasında arşivleme' stratejisi, sonraki toplu geçişlerin maliyetini ve karmaşıklığını önler.
Sonraki Adımlar
Belgelerin PDF/A formatında arşivlenmesi karmaşık olmak zorunda değil. IronPDF, .NET geliştiricilerine C# ekosisteminin içinde PDF/A uyumlu belgeler oluşturmak, dönüştürmek ve zenginleştirmek için tam bir araç seti sunar. HTML kaynaklı arşiv belgeleri oluşturuyor, hükümet ve sağlık dağıtımı için erişilebilir PDF'ler üretiyor, eski PDF'leri uzun vadeli depolama için dönüştürüyor veya yüksek hacimli toplu iş hatları içine dış doğrulama entegrasyonu sağlıyorsanız, IronPDF teknik detaylarla ilgilenir, böylece uygulamanızın ihtiyaçlarına odaklanabilirsiniz.
Temel PDF/A-1 standardından modern PDF/A-3 ve PDF/A-4 yeteneklerine kadar, IronPDF, belge versiyonlarını ve uyum seviyelerini — PDF/A-1a, 1b, 2a, 2b, 3a, 3b, 4, 4e ve 4f dahil — tam destekler. Özel PDF/A nasıl yapılır kılavuzu dönüşüm seçeneklerini ve uyum seviyelerini detaylı bir şekilde ele alır. meta veri yönetimi, EmbedFileConfiguration ile dosya gömme ve ZUGFeRD/Factur-X e-fatura desteğiyle birleştiğinde, devlet kurumları, adalet sistemleri, sağlık kuruluşları ve finansal kurumların arşivleme gerekliliklerini karşılamak için ihtiyaç duyduğunuz her şeyi sağlar.
Arşivlemeye başlamak için hazır mısınız? IronPDF İndir ve ücretsiz deneme ile deneyin. Sorularınız varsa ya da belirli uyumluluk senaryonuzu tartışmak istiyorsanız, mühendislik destek ekibimize ulaşın — doğru bir şekilde yapmanıza yardımcı olmaktan mutluluk duyarız.
Sıkça Sorulan Sorular
PDF/A uyumluluğu nedir?
PDF/A uyumluluğu, elektronik belgelerin arşivlenmesi ve uzun vadeli korunması için tasarlanmış ISO standartlı PDF sürümüne atıfta bulunur. Belgelerin uzun yıllar boyunca aynı şekilde yeniden üretilebilmesini garantiler.
C# kullanarak PDF/A uyumlu belgeler nasıl oluşturabilirim?
C# kullanarak IronPDF kütüphanesini kullanarak çeşitli PDF/A formatlarına PDFs oluşturma ve dönüştürme için sağlam araçlar sağlar.
IronPDF'nin desteklediği farklı PDF/A sürümleri nelerdir?
IronPDF, belge arşivlemesi ve korunması için farklı gereksinimlere hitap eden birçok PDF/A sürümünü, PDF/A-1, PDF/A-2 ve PDF/A-3 dahil olmak üzere destekler.
IronPDF, ZUGFeRD ve Factur-X gibi e-faturalama standartları için kaynak veri gömmede yardımcı olabilir mi?
Evet, IronPDF, elektronik fatura işleme ve uygunluk amacıyla ZUGFeRD ve Factur-X gibi e-faturalama standartları için kaynak veri gömebilir.
C#'ta PDF/A uyumunu nasıl doğrularım?
Belirtilen PDF/A spesifikasyonlarına uygunlığını sağlamak için, IronPDF'nin dahili doğrulama araçlarını kullanarak belgelerinizi doğrulayabilirsiniz.
IronPDF ile devlet arşivleme senaryolarını yönetmek mümkün mü?
Evet, IronPDF, NARA, mahkeme belgeleri ve tıbbi kayıtlar için gerekli standartlara uygunluk dahil olmak üzere çeşitli devlet arşivleme senaryolarını yönetme kapasitesine sahiptir.
Arşivleme için PDF/A kullanmanın faydaları nelerdir?
Arşivleme için PDF/A kullanmanın faydaları arasında belgelerin zaman içinde bütünlüğünü sağlamak, uzun vadeli koruma için standart bir format sunmak ve yasal ve kurumsal gereksinimlere uyum sağlamak bulunur.
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, böylece kolay uygunluk ve uzun vadeli belge koruması sağlar.
IronPDF, PDF/A dönüşümlerinde belge bütünlüğünü nasıl sağlar?
IronPDF, yazı tipleri, görseller ve düzen bütünlüğünü koruyarak PDF/A dönüşümlerinde belge bütünlüğünü sağlar, böylece arşivlenen belgeler tam olarak amaçlandığı gibi görünür.
Tıbbi kayıt arşivlemesi için IronPDF'yi kullanabilir miyim?
Evet, IronPDF, endüstri standartları ve belge koruma düzenlemelerine uyumu sağlamak için tıbbi kayıt arşivlemesinde kullanılabilir.

