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를 사용하면 C# 에서 PDF/A 규격을 준수하는 .NET 개발자가 ISO 19005 표준을 충족하는 아카이브 PDF를 생성, 변환 및 유효성 검사할 수 있는 직접적인 경로를 제공하여 현재는 물론 수십 년 후에도 모든 시스템에서 문서가 동일하게 표시되도록 보장합니다. IronPDF는 HTML을 PDF/A로 렌더링하고 기존 파일을 PDF/A-1b , PDF/A-2b 또는 PDF/A-3b 로 변환하는 것부터 ZUGFeRDFactur-X 전자 송장 규정 준수를 위한 소스 데이터 삽입에 이르기까지 전체 PDF/A 변환 워크플로를 .NET 환경에서 처리합니다.

요약: 빠른 시작 가이드

이 튜토리얼에서는 C#을 사용하여 PDF/A 규격 문서를 생성, 변환 및 유효성 검사하는 방법을 다룹니다. 여기에는 전자 송장 형식과 실제 정부 문서 보관 요구 사항이 포함됩니다.

  • 이 솔루션은 장기 보관 또는 규제 대상 보관을 위한 문서를 생성하는 애플리케이션을 개발하는 .NET 개발자에게 적합합니다. 예를 들어 정부 기록 관리, 법률 서류 제출, 재무 감사 추적, 의료 기록 보존 또는 PDF/A 형식이 필수적인 전자 송장 플랫폼 등에 활용할 수 있습니다.
  • 개발 내용: HTML을 PDF/A로 처음부터 렌더링하는 기능, 기존 PDF를 PDF/A-1b/2b/3b로 변환하는 기능, ZUGFeRD/Factur-X 전자 송장을 위한 소스 데이터 첨부 파일 삽입 기능, 오류 보고 기능을 포함한 PDF/A 규정 준수 검증 기능, 그리고 NARA(미국 국립기록보관소), 법원 문서 및 의료 기록 요건에 맞는 실제 아카이빙 패턴 개발.
  • 실행 환경: 모든 .NET 환경 — .NET 10, .NET 8 LTS, .NET Framework 4.6.2 이상, .NET Standard 2.0. PDF/A 변환 및 유효성 검사는 전적으로 로컬에서 실행됩니다. 생성을 위해 외부 검증 도구가 필요하지 않습니다.
  • 이 접근 방식을 사용해야 하는 경우: 애플리케이션에서 송장, 계약서, 규정 준수 보고서, 법원 제출 서류 또는 의료 기록과 같이 장기간 보관해야 하는 문서를 생성하고, NARA, EU 기록 보관 표준, HIPAA, SEC와 같은 규제 기관에서 자체적으로 완전하고 검증 가능한 PDF/A 형식을 요구하는 경우입니다.
  • 기술적으로 중요한 이유: 일반 PDF는 외부 글꼴을 참조하고, 활성 콘텐츠를 포함하며, 시스템별 렌더링에 의존할 수 있는데, 이러한 기능들은 시간이 지남에 따라 호환성이 깨질 수 있습니다. PDF/A는 이러한 종속성을 형식 수준에서 금지하고, 렌더링에 필요한 모든 요소를 파일에 직접 포함시켜 호환되는 모든 뷰어에서 영구적으로 동일한 출력을 보장합니다.

단 몇 줄의 코드로 기존 PDF 파일을 PDF/A 형식으로 변환하세요:

Nuget Icon지금 바로 NuGet을 사용하여 PDF 만들기를 시작하세요.

  1. NuGet 패키지 관리자를 사용하여 IronPDF를 설치하세요.

    PM > Install-Package IronPdf

  2. 다음 코드 조각을 복사하여 실행하세요.

    using IronPdf;
    
    PdfDocument pdf = PdfDocument.FromFile("report.pdf");
    pdf.SaveAsPdfA("archived-report.pdf", PdfAVersions.PdfA3b);
  3. 실제 운영 환경에서 테스트할 수 있도록 배포하세요.

    지금 바로 무료 체험판을 통해 프로젝트에서 IronPDF를 사용해 보세요.
    arrow pointer

IronPDF를 구매하거나 30일 무료 체험판에 가입한 후, 애플리케이션 시작 부분에 라이선스 키를 입력하세요.

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

!{--010011000100100101000010010100100100000101010010010110010101111101001110010101010001110100010101010100010111110100100101001110010100110101010001000001010011000100110001001100010111110100001001001100010011110100001101001011--}

목차


PDF/A란 무엇이며 왜 중요한가요?

PDF/A는 전자 문서를 장기간 안정적으로 보관하기 위해 특별히 설계된 PDF 형식(ISO 19005)의 ISO 표준 하위 집합입니다. 외부 글꼴을 참조하고, 외부 콘텐츠에 링크하고, 시스템별 렌더링 동작에 의존할 수 있는 일반 PDF와 달리 PDF/A 파일은 완전히 자체적으로 모든 내용을 포함합니다. 문서를 렌더링하는 데 필요한 모든 글꼴, 색상 프로필 및 메타데이터가 파일 내에 직접 포함되어 있습니다.

이는 PDF/A 문서가 운영 체제나 소프트웨어 버전에 관계없이, 호환되는 뷰어에서 열더라도 오늘 열든 100년 후에 열든 동일하게 표시되기 때문에 중요합니다. 외부 리소스에 의존하지 않고, 특정 글꼴이 설치되어 있지 않아도 되며, 색상이나 투명도를 어떻게 표시해야 하는지에 대한 모호함도 없습니다.

기술적 내구성 외에도 PDF/A 준수는 권장 사항이 아니라 필수 요건인 경우가 많습니다. PDF/A를 의무화하는 산업 및 기관은 다음과 같습니다.

법률 및 사법 시스템 — 미국, 유럽 연합 및 기타 여러 관할권의 법원은 전자 소송 제출 시 PDF/A 형식을 요구하거나 강력히 권장합니다. 미국 연방 법원 시스템의 CM/ECF 파일링 표준은 장기 기록 보관을 위한 권장 형식으로 PDF/A를 참조합니다.

정부 기관 — 미국 국립기록보관소(NARA)는 영구 전자 기록 전송을 위한 허용 형식으로 PDF/A를 지정합니다. 마찬가지로 유럽 위원회는 특정 공식 간행물 및 규제 서류에 대해 PDF/A 형식을 의무화하고 있습니다.

금융 서비스 및 감사 — SEC와 같은 규제 기관은 PDF/A 제출을 허용하며, 내부 감사팀은 재무제표, 보고서 및 관련 증빙 서류가 시간이 지나도 변경 불가능하고 검증 가능하도록 보장하기 위해 PDF/A를 자주 도입합니다.

의료 분야 — 의료 기록 보존 규정(예: 미국의 HIPAA)은 특정 파일 형식을 의무화하지는 않지만, PDF/A는 장기적인 가독성을 보장하기 때문에 환자 기록, 영상 보고서 및 임상 문서를 보관하는 데 사실상의 표준이 되었습니다.

요약하자면, PDF/A는 문서가 시간, 시스템 및 조직 경계를 넘어 변경되지 않고 보존되어야 할 때 사용하는 형식입니다. 애플리케이션에서 송장, 계약서, 규정 준수 보고서, 의료 기록 등과 같이 향후 몇 년 동안 참조될 수 있는 문서를 생성하는 경우 PDF/A가 적합한 선택입니다.


PDF/A 버전 설명

PDF/A 표준은 여러 버전을 거치면서 발전해 왔으며, 각 버전은 이전 버전을 기반으로 추가적인 PDF 기능을 지원하는 동시에 엄격한 보존 보장을 유지합니다. 버전 간의 차이점을 이해하는 것은 사용 사례에 맞는 버전을 선택하는 데 필수적입니다.

PDF/A-1 (기본 보관용)

PDF/A-1(ISO 19005-1:2005)은 PDF 1.4를 기반으로 한 최초의 표준 버전으로, 모든 글꼴이 포함되어야 한다는 핵심적인 아카이브 요구 사항을 규정했습니다. 암호화는 금지되어 있습니다. 오디오/비디오 콘텐츠는 허용되지 않습니다. 자바스크립트 사용이 금지되어 있습니다. PDF/A-1은 두 가지 적합성 수준으로 제공됩니다.

PDF/A-1b ( 기본 ): 문서의 안정적인 시각적 재현을 보장합니다. 이는 최소한의 적합성 수준이며, 문서가 렌더링될 때 올바르게 표시되도록 보장합니다.

PDF/A-1a ( 접근성 ): 접근성을 위한 태그가 지정된 콘텐츠, 유니코드 문자 매핑 및 논리적 읽기 순서를 포함하여 1b에 구조적 및 의미적 요구 사항을 추가합니다. 이는 더 높은 수준의 기준이며, 접근성 관련 규정 준수가 중요한 경우에 요구됩니다.

PDF/A-1은 가장 널리 지원되는 버전이며, 특히 최신 기능보다 폭넓은 호환성이 우선시되는 법률 및 정부 분야에서 오늘날에도 여전히 일반적으로 사용되고 있습니다.

PDF/A-2 (JPEG2000, 투명 필름)

PDF/A-2(ISO 19005-2:2011)는 PDF 1.7을 기반으로 하며 PDF/A-1에서는 사용할 수 없었던 기능에 대한 지원을 도입했습니다.

JPEG2000 이미지 압축: PDF/A-1에서 사용 가능한 JPEG 압축보다 화질 대비 용량 비율이 더 우수합니다.

투명도 및 레이어 지원: 모든 요소를 불투명한 형태로 변환하지 않고도 더욱 복잡한 시각적 레이아웃을 구현할 수 있습니다.

PDF/A 첨부 파일 포함: PDF/A-2 문서에는 다른 PDF/A 호환 파일을 첨부 파일로 포함할 수 있습니다(단, PDF/A 파일만 가능하며 임의 형식은 지원하지 않습니다).

PDF/A-2는 PDF/A-1과 동일한 적합성 수준(2b2a)에 더하여 새로운 수준인 PDF/A-2u ( 유니코드 )를 포함합니다. 이 수준은 모든 텍스트에 대해 유니코드 매핑을 요구하지만 수준 a의 전체 구조적 태깅은 요구하지 않습니다.

PDF/A-3 (첨부 파일)

PDF/A-3(ISO 19005-3:2012)는 현대 워크플로우에 있어 가장 중요한 확장입니다. PDF/A-2(PDF 1.7)와 동일한 기본 구조를 공유하며 모든 기능을 그대로 유지하면서, 한 가지 중요한 기능을 추가했습니다. 바로 모든 형식의 파일을 PDF/A 문서 내에 삽입할 수 있는 기능입니다 .

즉, 사람이 읽을 수 있는 시각적 문서와 함께 원본 XML 소스 데이터, CSV 내보내기, 스프레드시트 또는 기타 기계가 읽을 수 있는 파일을 첨부할 수 있습니다. PDF/A-3 컨테이너는 프레젠테이션 레이어와 기본 데이터를 모두 담는 단일 패키지가 됩니다.

이러한 기능은 현대 전자 송장 표준의 기반이 됩니다.

ZUGFeRD: 원래 독일에서 유래되었으며, 현재는 EU 전역에서 Factur-X 라는 이름으로 사용되고 있습니다. 구조화된 XML 형식의 송장 데이터(산업별 공통 송장 형식)를 시각적이고 사람이 읽을 수 있는 송장 정보와 함께 PDF/A-3 문서에 삽입합니다. 단일 파일로 사람과 기계 모두의 처리 요구 사항을 충족할 수 있습니다.

PDF/A-3 적합성 수준은 3b (시각적), 3a (접근성 및 태그 지정), 3u (유니코드 매핑)과 같은 동일한 패턴을 따릅니다.

PDF/A-4 (PDF 2.0 기반)

PDF/A-4(ISO 19005-4:2020)는 PDF 2.0을 기반으로 하는 최신 버전입니다. 이는 적합성 수준 구조를 간소화합니다. 더 이상 a/b/u 구분은 없습니다. 대신 PDF/A-4는 세 가지 프로필을 정의합니다.

PDF/A-4: 일반적인 문서 보관을 위한 기본 규격입니다.

PDF/A-4f: 모든 형식의 파일을 포함할 수 있습니다(PDF/A-3와 유사).

PDF/A-4e: 엔지니어링 문서용으로 특별히 설계되었습니다. 3D 콘텐츠, 리치 미디어 및 기타 기술적 요소를 지원합니다.

PDF/A-4는 향상된 태깅 구조와 XMP(확장 가능한 메타데이터 플랫폼)을 사용한 향상된 메타데이터 기능을 포함하여 PDF 2.0 자체의 개선 사항으로부터도 이점을 얻습니다.

PDF/A-4의 채택률은 증가하고 있지만, PDF/A-2 및 PDF/A-3에 비해 뷰어 및 검증 도구에서 보편적으로 지원되는 정도는 아직 미흡합니다.

어떤 버전을 사용해야 할까요?

적절한 PDF/A 버전을 선택하는 것은 특정 요구 사항에 따라 다릅니다.

내장 파일, JPEG2000, 투명도 및 호환성과 같은 요구 사항을 기반으로 PDF/A 버전을 선택하는 과정을 보여주는 의사 결정 흐름도

최대 호환성: 기존 시스템, 유효성 검사기 및 뷰어(특히 법률 및 정부 관련 환경)의 경우 PDF/A-1b 또는 PDF/A-2b를 사용하십시오.

전자 송장 발행: ZUGFeRD, Factur-X 또는 내장된 소스 데이터가 필요한 유사한 표준의 경우 PDF/A-3b를 사용하십시오.

접근성 규정 준수: 섹션 508 또는 WCAG 요구 사항을 충족하려면 사용 중인 버전에 따라 a 적합성 수준(PDF/A-1a, PDF/A-2a 또는 PDF/A-3a)을 선택하십시오.

최신 워크플로: 고객이 PDF 2.0을 지원하는 최신 기능을 사용하려면 PDF/A-4를 사용하십시오.

확신이 서지 않을 때는 PDF/A-3b가 최신 기능과 폭넓은 지원 사이에서 최상의 균형을 제공합니다.


PDF/A 문서를 처음부터 만들기

이제 PDF/A가 무엇인지, 어떤 버전을 대상으로 해야 하는지 이해했으니 코드를 살펴보겠습니다. IronPDF를 사용하면 HTML 콘텐츠에서 PDF/A 규격 문서를 직접 생성하거나 기존 PDF를 PDF/A 형식으로 변환하는 것이 간편합니다.

IronPDF 설치 중

시작하기 전에 .NET 프로젝트에 IronPDF NuGet 패키지를 설치하세요. NuGet 패키지 관리자 콘솔, .NET CLI 또는 Visual Studio NuGet UI를 통해 이 작업을 수행할 수 있습니다.

Install-Package IronPdf
Install-Package IronPdf
SHELL

또는 .NET CLI를 사용하여 다음과 같이 할 수 있습니다.

dotnet add package IronPdf
dotnet add package IronPdf
SHELL

IronPDF는 .NET Framework 4.6.2 이상, .NET Core, .NET 5 이상 및 .NET Standard 2.0을 지원하므로 호환성 문제 없이 거의 모든 최신 .NET 프로젝트에 통합할 수 있습니다.

HTML을 PDF/A로 렌더링

가장 일반적인 워크플로는 HTML 콘텐츠에서 PDF를 생성하고 PDF/A 형식으로 직접 저장하는 것입니다. IronPDF의 ChromePdfRenderer 메서드는 HTML을 PDF로 변환하는 작업을 처리하고, SaveAsPdfA 메서드는 규정 준수 변환을 단일 단계로 처리합니다.

: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);
$vbLabelText   $csharpLabel

산출

이 예시에서는 IronPDF의 크로뮴 기반 렌더링 엔진을 사용하여 HTML을 PDF로 렌더링합니다. 이 엔진은 최신 웹 표준을 준수하여 픽셀 단위까지 완벽한 품질을 보장합니다. SaveAsPdfA 메서드는 필요한 모든 글꼴을 포함하고, 필요에 따라 색 공간을 변환하고, 금지된 기능(예: JavaScript 또는 외부 링크)을 제거하고, 규정을 준수하는 XMP 메타데이터를 작성합니다. 그 결과, 보관에 적합한 완전한 형태의 PDF/A-3b 파일이 생성됩니다.

이 접근 방식은 IronPDF의 다른 렌더링 기능과도 완벽하게 호환됩니다. 머리글과 바닥글을 적용하고, 페이지 크기와 여백을 설정하고, CSS 스타일을 포함하고, RenderingOptions를 사용하여 출력을 세부적으로 조정할 수 있습니다. 이 모든 작업은 PDF/A 변환 단계 이전에 수행할 수 있습니다. SaveAsPdfA 호출은 PDF 생성 방식과 관계없이 규정 준수 변환을 처리합니다.

기존 PDF 파일을 PDF/A 형식으로 변환하기

항상 HTML부터 시작하는 것은 아닙니다. 실제 상황에서는 스캐너, 타사 시스템, 기존 아카이브 또는 사용자 업로드 등 다양한 경로로 생성된 기존 PDF 파일을 수신하게 되며, 이러한 파일을 규정 준수 저장을 위해 PDF/A 형식으로 변환해야 할 필요가 있습니다.

IronPDF는 이 문제를 동일한 SaveAsPdfA 방식으로 처리합니다.

: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");
$vbLabelText   $csharpLabel

변환 과정에서 IronPDF는 기존 PDF를 분석하고 필요한 변환을 적용합니다. 여기에는 참조되었지만 포함되지 않은 글꼴을 포함시키고, RGB 또는 CMYK 색 공간을 적절한 프로필로 변환하고, 필요한 XMP 메타데이터를 추가하고, 암호화, 멀티미디어 또는 JavaScript와 같은 규격을 준수하지 않는 기능을 제거하는 작업이 포함됩니다. 변환 후 즉시 디스크에 저장하지 않고 메모리에서 변환하려는 경우 ConvertToPdfA 메서드를 사용할 수도 있습니다. 이는 변환 후 추가 처리가 필요한 파이프라인에 유용합니다.

이 패턴은 기존 문서 저장소를 최신 아카이빙 표준에 맞추기 위해 마이그레이션이 필요한 프로젝트에 이상적입니다.


원본 데이터 삽입 (PDF/A-3)

PDF/A-3 표준의 가장 강력한 기능 중 하나는 XML, CSV, JSON, 스프레드시트 또는 기타 모든 형식의 파일을 PDF 문서에 직접 삽입할 수 있다는 것입니다. 이를 통해 PDF는 순수한 시각적 문서에서 사람이 읽을 수 있는 표현과 기계가 읽을 수 있는 원본 데이터를 단일 파일에 모두 담는 하이브리드 컨테이너로 변환됩니다.

시각적 문서와 함께 XML/CSV 첨부

핵심 워크플로는 간단합니다. 시각적 PDF를 생성하거나 불러오고, 소스 데이터 파일을 내장 첨부 파일로 연결한 다음, PDF/A-3 형식으로 저장하면 됩니다. IronPDF는 ConvertToPdfA 메서드의 여러 오버로드를 통해 파일 내장을 지원합니다. 파일 경로를 IEnumerable<string>로 직접 전달하거나, 메모리에 이미 있는 바이트 배열을 EmbedFileByte로 사용하거나, 스트림 기반 워크플로를 위해 EmbedFileStream를 사용할 수 있습니다. 각 접근 방식은 PDF/A 규정을 완벽하게 준수합니다.

: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");
$vbLabelText   $csharpLabel

이 패턴은 특히 재무 보고 워크플로에서 유용합니다. 시각적 PDF 파일은 형식화된 대차대조표 또는 손익계산서일 수 있고, 첨부된 XML 또는 CSV 파일에는 보고서를 생성하는 데 사용된 원시 데이터가 포함될 수 있습니다. 감사자는 시각적 문서를 검사하고 내장된 소스 데이터를 사용하여 기본 수치를 독립적으로 검증할 수 있습니다. 이 모든 작업은 단일 파일에서 수행됩니다. ConvertToPdfA 메서드의 컬렉션 매개변수에 추가 파일 경로 또는 바이트 배열을 전달하여 동일한 문서에 여러 첨부 파일을 포함할 수 있습니다.

ZUGFeRD 및 Factur-X 전자 송장 발행 규정 준수

ZUGFeRD(Zentraler User Guide des Forums elektronische Rechnung Deutschland)와 그 국제 표준인 Factur-X는 구조화된 송장 데이터를 PDF/A-3 문서에 포함하는 방법을 규정하는 전자 송장 표준입니다. 시각적 PDF는 사람이 읽을 수 있는 송장 역할을 하며, 내장된 XML 파일(CII(Cross-Industry Invoice) 형식 준수)에는 기계가 처리할 수 있는 데이터가 포함되어 있습니다.

ZUGFeRD/Factur-X 규정 준수를 위한 주요 요구 사항은 다음과 같습니다.

PDF 파일은 최소한 PDF/A-3b 규격을 준수해야 합니다. 내장된 XML 파일은 UN/CEFACT 산업 간 송장 스키마를 따라야 합니다. XML 파일의 이름은 표준 사양에 따라 지정해야 합니다(일반적으로 Factur-X의 경우 factur-x.xml, ZUGFeRD의 경우 zugferd-invoice.xml). 문서를 ZUGFeRD/Factur-X 송장으로 식별하려면 특정 XMP 메타데이터 속성을 설정해야 합니다.

IronPDF의 EmbedFileConfiguration 클래스는 이러한 요구 사항을 세밀하게 제어할 수 있도록 해줍니다. 대상 시스템에서 요구하는 정확한 전자 송장 프로필에 맞게 ConformanceLevel (예: ConformanceLevel.XRECHNUNG), SchemaNamespace, SchemaPrefix, PropertyVersionAFRelationship 속성을 설정할 수 있습니다.

IronPDF를 사용하여 ZUGFeRD 규정을 준수하는 송장을 작성하는 방법은 다음과 같습니다.

: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");
$vbLabelText   $csharpLabel

산출

이러한 접근 방식을 통해 귀사의 청구 시스템은 사람이 검토할 수 있는 PDF 형식과 자동 처리가 가능한 XML 형식 모두를 만족하는 문서를 단일의 표준 준수 패키지로 생성할 수 있습니다.

감사 추적 보존

전자 송장 발행 외에도 PDF/A-3의 임베딩 기능은 완벽한 감사 추적을 유지하는 것이 중요한 모든 워크플로에 유용합니다. 최종 문서와 함께 원본 소스 데이터, 처리 로그 또는 변경 이력을 첨부하면 향후 언제든지 독립적으로 검증할 수 있는 자체 완결된 기록을 생성할 수 있습니다.

일반적인 감사 추적 포함 패턴은 다음과 같습니다.

재무제표 — 형식화된 재무 보고서와 함께 원시 회계 데이터(ERP 시스템에서 내보낸 CSV 또는 XML 파일)를 포함시키세요. 감사자는 원본 시스템에 접근할 필요 없이 시각적 문서의 숫자가 원본 데이터와 일치하는지 확인할 수 있습니다.

규제 관련 서류 제출 — 최종 제출 서류에 원본 제출 데이터, 검증 결과 및 관련 계산 내역을 내장 파일로 첨부하십시오. 이렇게 하면 제출 기록 전체가 담긴 단일 보관 패키지가 생성됩니다.

계약 관리 — 최종 체결된 계약서 PDF 파일에 버전 기록, 승인 내역 또는 서명된 메타데이터 파일을 포함시킬 수 있습니다. 이렇게 하면 문서의 전체 수명 주기가 단일 보관 파일 내에 보존됩니다.

: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");
$vbLabelText   $csharpLabel

PDF/A 규정 준수 검증

문서를 생성하고 PDF/A라고 명명하는 것만으로는 충분하지 않습니다. 출력물이 실제로 표준 요구 사항을 충족하는지 확인해야 합니다. PDF/A 형식이라고 주장하지만 유효성 검사에 실패한 파일은 아카이브 시스템, 정부 포털 또는 전자 청구 플랫폼에서 허용되지 않습니다.

IronPDF의 SaveAsPdfAConvertToPdfA 메서드는 글꼴 포함, 색 공간 변환, 금지된 기능 제거 및 XMP 메타데이터 작성과 같은 규정 준수 변환의 핵심 작업을 처리합니다. 하지만 출력물의 독립적인 검증을 위해서는 veraPDF (업계 표준 오픈 소스 PDF/A 유효성 검사 도구) 또는 Adobe Acrobat Pro에 내장된 사전 검사 도구와 같은 전용 외부 도구를 사용하여 유효성을 검사해야 합니다. veraPDF를 CI/CD 파이프라인 또는 문서 처리 워크플로에 통합하면 생성된 모든 파일이 저장 또는 배포되기 전에 명시된 표준을 충족하는지 여부를 제3자 기관을 통해 확인할 수 있습니다.

일반적인 규정 준수 실패 사례 및 해결 방법

IronPDF가 대부분의 규정 준수 작업을 처리하더라도 특정 입력 조건에서는 유효성 검사 오류가 발생할 수 있습니다. 다음은 가장 흔한 문제점과 해결 방법입니다.

내장되지 않은 글꼴 — 이것이 가장 흔한 오류 유형입니다. 원본 PDF에서 글꼴 이름을 참조하지만 글꼴 데이터가 포함되어 있지 않으면 출력물은 PDF/A 표준을 준수하지 않습니다. IronPDF는 변환 과정에서 글꼴을 자동으로 포함시키려고 시도하지만, IronPDF가 실행되는 시스템에 글꼴 파일이 없으면 포함이 실패합니다. 해결 방법: 소스 문서에서 사용된 모든 글꼴이 서버에 설치되어 있는지 확인하거나, 모든 웹 플랫폼에서 사용 가능한 웹 안전 글꼴을 HTML 콘텐츠에 사용하십시오.

지원되지 않는 색 공간 — PDF/A는 모든 색상 데이터가 특정 내장 색상 프로필(일반적으로 화면용 문서의 경우 sRGB, 인쇄용의 경우 CMYK 프로필) 내에 정의되어 있어야 합니다. 내장 프로필이 없는 장치 종속 색 공간을 사용하는 원본 PDF 파일은 유효성 검사에 실패합니다. 수정 사항: IronPDF는 대부분의 경우 색 공간 변환을 자동으로 처리합니다. 예외적인 경우를 대비하여 소스 콘텐츠에 sRGB 색상 형식이 지정되어 있는지 확인하십시오.

암호화 또는 비밀번호 보호 — PDF/A는 암호화를 엄격히 금지합니다. 암호로 보호된 PDF 파일을 변환하려면 먼저 암호를 해제해야 합니다. 해결 방법: 변환하기 전에 PdfDocument.FromFile("encrypted.pdf", "password") 명령어를 사용하여 보호된 파일을 여세요.

JavaScript 또는 멀티미디어 콘텐츠 — PDF/A는 JavaScript, 오디오, 비디오 및 기타 대화형 요소를 금지합니다. 원본 HTML에 <script> 태그, 임베디드 비디오 또는 대화형 양식이 포함된 경우, 이러한 요소들을 제거해야 합니다. 그렇지 않으면 변환 과정에서 해당 요소들이 제거됩니다. 해결 방법: PDF/A로 렌더링하기 전에 HTML 콘텐츠가 정적인지 확인하십시오.

투명성 문제 (PDF/A-1 형식만 해당) — PDF/A-1 형식은 투명성을 지원하지 않습니다. 문서에 투명 요소(최신 CSS 레이아웃에서 흔히 볼 수 있음)가 포함된 경우 PDF/A-1 형식으로 변환하려면 요소를 평면화해야 합니다. 해결 방법: 문서에 투명도가 사용되는 경우 PDF/A-2 이상 버전을 대상으로 지정하거나, PDF/A-1을 대상으로 지정할 때 CSS에서 opacity, rgba 또는 투명 PNG를 사용하지 않도록 하십시오.

글꼴, 색 공간 및 메타데이터 요구 사항

PDF/A 규격 준수의 세 가지 핵심 요소인 글꼴, 색 공간 및 메타데이터를 이해하면 첫 시도에서 유효성 검사를 통과하는 문서를 디자인하는 데 도움이 됩니다.

글꼴: 문서에 사용된 모든 글꼴은 완전히 포함되어야 합니다. 여기에는 텍스트에 나타나는 모든 글자가 포함되며, 일부만 포함되는 것이 아닙니다. PDF/A-1a, 2a 및 3a 규격 준수 수준의 경우 모든 문자에 유니코드 매핑이 있어야 하므로 텍스트를 안정적으로 추출하고 검색할 수 있습니다.

IronPDF의 HTML-to-PDF 렌더링 기능을 사용할 때, Chromium 엔진은 시스템에서 사용 가능한 글꼴을 자동으로 포함시킵니다. 다양한 배포 환경(개발, 스테이징, 프로덕션)에서 일관성을 보장하려면 HTML에서 <link> 태그를 통해 로드되는 Google Fonts를 사용하거나, 글꼴 파일을 애플리케이션에 포함시켜 CSS @font-face를 통해 참조하는 것을 고려해 보세요.

색 공간: PDF/A는 모든 색상이 ICC 프로파일을 기반으로 하는 장치 독립적인 색 공간 내에서 지정되어야 함을 요구합니다. 실제로 이는 대부분의 문서에서 sRGB를 사용해야 함을 의미합니다. IronPDF는 적절한 ICC 프로파일을 내장하고 변환 과정에서 색상을 자동으로 변환합니다. 워크플로에서 특정 프로파일이 필요한 경우 사용자 지정 ICC 파일 경로를 전달할 수도 있습니다. 하지만 CMYK 정확도가 요구되는 인쇄용 문서를 작업하는 경우, 원본 콘텐츠에 CMYK에 적합한 프로파일이 사용되었는지, 그리고 변환 과정에서 해당 프로파일이 유지되는지 확인해야 합니다.

메타데이터: PDF/A는 문서에 XMP(확장 가능한 메타데이터 플랫폼) 메타데이터가 포함되어 있어야 합니다. 여기에는 문서 제목, 작성자, 생성 날짜, 수정 날짜 및 PDF/A 적합성 수준 식별자가 포함됩니다. IronPDF는 이러한 필드를 자동으로 채우지만, 더 세밀한 제어를 위해 MetaData 속성을 통해 명시적으로 설정할 수도 있습니다.

: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);
$vbLabelText   $csharpLabel

문서 관리 시스템에서 색인화될 문서의 경우, 제목과 저자 필드가 목록 작성 및 검색에 자주 사용되므로 메타데이터를 명시적으로 설정하는 것이 특히 중요합니다.


정부 기록 관리 활용 사례

PDF/A는 단순한 기술 사양이 아니라 정부, 법률 및 의료 분야의 많은 영역에서 요구되는 실질적인 요건입니다. 이 섹션에서는 PDF/A가 특정 규제 프레임워크에 어떻게 부합하는지, 그리고 IronPDF를 사용하여 해당 요구 사항을 충족하기 위해 알아야 할 사항은 무엇인지 살펴보겠습니다.

NARA(미국 국립기록보관소) 요건

미국 국립기록보관소(NARA)는 영구적인 가치를 지닌 연방 기록물을 보존할 책임이 있습니다. 미국 국립기록보관소(NARA)의 전송 지침은 영구 전자 기록을 국립기록보관소로 전송할 때 선호하는 형식 중 하나로 PDF/A를 명시하고 있습니다.

NARA의 PDF/A 제출 주요 요건:

NARA는 대부분의 기록 유형에 대해 PDF/A-1, PDF/A-2 및 PDF/A-3 형식을 허용합니다. 문서를 전송하기 전에 해당 PDF/A 버전과 대조하여 유효성을 검증 해야 합니다. 메타데이터에는 생성 기관, 기록 시리즈 식별자 및 포함된 날짜 범위가 반드시 포함되어야 합니다. 내장 글꼴은 필수입니다. NARA는 글꼴이 누락되었거나 참조만 되어 있는 문서를 명시적으로 거부합니다. NARA는 디지털화된(스캔된) 기록물의 경우 최소 300 DPI 의 해상도를 권장하며, 이미지 압축률이 향상된 PDF/A-2 이상의 형식을 선호합니다.

다음은 NARA(미국 국립기록보관소)로 이관할 기관 기록물을 일괄적으로 준비하는 방법입니다.

입력

기관 기록 폴더 (PDF 파일 5개 포함)

: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}");
$vbLabelText   $csharpLabel

산출

변환된 PDF/A 파일이 포함된 유효성 검사 폴더

미국 국립기록보관소(NARA)로 기록을 이관할 때는 모든 파일을 개별적으로 검증하는 것이 매우 중요합니다. NARA의 자료 수집 과정은 규정을 준수하지 않는 파일을 거부하며, 대량의 파일을 재처리하는 것은 시간과 노력 면에서 비용이 많이 듭니다. VeraPDF와 같은 도구를 사용하여 각 SaveAsPdfA 호출 후에 직접 유효성 검사를 수행하는 방식으로 변환 파이프라인에 유효성 검사를 구축하는 것이 가장 신뢰할 수 있는 접근 방식입니다.

법원 문서 보관

미국 연방 법원 시스템과 많은 주 법원 시스템은 장기 기록 보존을 위해 PDF/A 형식을 허용하거나 요구하는 전자 소송 시스템(주로 연방 차원에서는 CM/ECF)을 사용합니다. 관할 지역에 따라 구체적인 요구 사항은 다르지만, 일반적인 기대 사항은 일관적입니다.

연방 법원 — 미국 연방 법원 행정처는 영구적인 사건 기록의 일부가 될 문서에 대해 PDF/A 형식을 권장합니다. CM/ECF 시스템은 일반적으로 PDF/A-1b를 최소 표준으로 허용하지만, 복잡한 서식이 포함된 문서의 경우 PDF/A-2b가 점점 더 선호되고 있습니다.

주 법원 - 요구 사항은 주마다 크게 다릅니다. 텍사스나 캘리포니아처럼 특정 서류 제출 유형에 대해 PDF/A 제출을 명시적으로 요구하는 주도 있고, 다른 주들은 단순히 권장 사항으로 제시하는 주도 있습니다. 따라서 제출하고자 하는 관할 지역의 구체적인 규정을 확인하는 것이 중요합니다.

법원 시스템 전반에 걸쳐 공통적으로 요구되는 사항은 다음과 같습니다.

문서는 텍스트 검색이 가능해야 하며(스캔 이미지뿐 아니라), 가능한 경우 PDF/A-1a 또는 2a 규격을 준수하거나 스캔한 문서에 OCR을 적용해야 합니다. 용지 크기는 표준 규격(일반적으로 미국 레터 용지, 8.5" × 11")이어야 합니다. 파일링 시스템에서 지원하는 경우 메타데이터에는 사건 번호, 접수 날짜 및 문서 유형이 포함되어야 합니다.

: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);
$vbLabelText   $csharpLabel

산출

법률 회사 및 법률 기술 회사가 문서 관리 시스템을 구축할 때 PDF/A 변환을 파일링 워크플로에 통합하면 법률 보조원이나 변호사의 수동 개입 없이도 보관된 모든 문서가 법원의 장기 보존 요건을 충족할 수 있습니다.

의료 기록 보존

의료기관은 환자 기록 보존에 있어 엄격한 요건을 충족해야 합니다. HIPAA는 특정 파일 형식을 의무화하지는 않지만, 장기간의 보존 기간(성인의 경우 보통 7~10년, 미성년자의 경우 더 길다), 접근성 요구 사항 및 감사 기대치를 고려할 때 PDF/A 형식이 의료 문서 보관에 가장 적합한 선택입니다.

의료 기록 보관 시 주요 고려 사항:

보존 기간 — 연방 및 주 규정에 따라 의료 기록은 다양한 기간 동안 보존해야 하며, 종종 10년 이상에 이르기도 합니다. PDF/A는 장기적인 가독성을 보장하므로 형식 노후화에 대한 걱정 없이 이러한 요구 사항을 충족하는 데 이상적입니다.

접근성 — 미국 장애인법(ADA)과 제508조는 전자 의료 기록이 접근 가능해야 한다고 규정하고 있습니다. PDF/A-2a 또는 PDF/A-3a 적합성 수준(구조적 태깅 포함)을 사용하면 이러한 접근성 요구 사항을 충족하는 데 도움이 됩니다.

상호운용성 — 의료 기록은 의료 제공자, 보험사 및 환자 간에 자주 공유됩니다. PDF/A는 자체적으로 완결된 구조를 가지고 있어 어떤 뷰어나 시스템을 사용하더라도 문서가 일관되게 표시됩니다.

감사 준비 — 의료 감사에서는 의료 기록이 작성된 지 수년이 지난 후에도 제출해야 할 수 있습니다. PDF/A는 감사 중에 생성된 문서가 원본과 동일하며, 문서 무결성에 대한 의문을 제기할 수 있는 렌더링 차이가 없도록 보장합니다.

: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);
$vbLabelText   $csharpLabel

산출

전자 건강 기록(EHR) 시스템의 경우, 가장 효과적인 접근 방식은 검사 결과가 생성될 때, 진료 기록이 확정될 때, 또는 퇴원 요약서가 작성될 때와 같이 문서가 생성되는 시점에 PDF/A 형식으로 변환하는 것입니다. 이 "생성 시 아카이빙" 전략은 나중에 일괄 마이그레이션을 수행하는 데 드는 비용과 복잡성을 방지합니다.


다음 단계

PDF/A 형식으로 문서를 보관하는 것은 복잡할 필요가 없습니다. IronPDF는 .NET 개발자에게 친숙한 C# 환경 내에서 PDF/A 규격 문서를 생성, 변환 및 보강하는 데 필요한 완벽한 툴킷을 제공합니다. HTML 에서 아카이브 문서를 생성하든, 정부 및 의료 기관 배포를 위한 접근성 있는 PDF를 제작하든, 장기 보관을 위해 기존 PDF를 변환하든, 대용량 배치 파이프라인 에 외부 유효성 검사를 통합하든, IronPDF는 기술적인 세부 사항을 처리하므로 애플리케이션 요구 사항에 집중할 수 있습니다.

IronPDF는 기초적인 PDF/A-1 표준부터 최신 PDF/A-3 및 PDF/A-4 기능에 이르기까지 PDF/A-1a, 1b, 2a, 2b, 3a, 3b, 4, 4e, 4f를 포함한 모든 아카이브 버전 및 적합성 수준을 지원합니다. PDF/A 변환에 대한 자세한 안내서는 변환 옵션과 적합성 수준을 상세히 설명합니다. 메타데이터 관리 , EmbedFileConfiguration를 통한 파일 삽입, ZUGFeRD/Factur-X 전자 송장 지원 기능이 결합되어 정부 기관, 법원, 의료 기관 및 금융 기관의 아카이빙 요구 사항을 충족하는 데 필요한 모든 것을 제공합니다.

아카이빙을 시작할 준비가 되셨나요? IronPDF를 다운로드 하고 무료 체험판을 사용해 보세요. 궁금한 점이 있거나 특정 규정 준수 시나리오에 대해 논의하고 싶으시면 엔지니어링 지원팀에 문의해 주세요 . 저희가 기꺼이 도와드리겠습니다.

자주 묻는 질문

PDF/A 규정 준수란 무엇입니까?

PDF/A 규격 준수는 전자 문서의 보관 및 장기 보존을 위해 특별히 설계된 ISO 표준 PDF 버전을 의미합니다. 이를 통해 문서가 향후 수년간 동일한 방식으로 복제될 수 있도록 보장합니다.

C#을 사용하여 PDF/A 규격 문서를 어떻게 만들 수 있나요?

IronPDF 라이브러리를 활용하면 C#을 사용하여 PDF/A 규격 문서를 생성할 수 있습니다. IronPDF 라이브러리는 PDF를 다양한 PDF/A 형식으로 생성하고 변환하는 강력한 도구를 제공합니다.

IronPDF에서 지원하는 PDF/A 버전에는 어떤 것들이 있나요?

IronPDF는 PDF/A-1, PDF/A-2, PDF/A-3을 포함한 다양한 PDF/A 버전을 지원하며, 각 버전은 문서 보관 및 보존에 대한 다양한 요구 사항을 충족합니다.

IronPDF는 ZUGFeRD 및 Factur-X와 같은 전자 송장 표준에 필요한 원본 데이터를 삽입하는 데 도움이 될 수 있습니까?

예, IronPDF는 ZUGFeRD 및 Factur-X와 같은 전자 송장 표준에 필요한 원본 데이터를 내장하여 전자 송장 처리 및 규정 준수를 지원할 수 있습니다.

C#에서 PDF/A 규격 준수 여부를 어떻게 검증하나요?

IronPDF의 내장 유효성 검사 도구를 활용하여 C#에서 PDF/A 규격 준수 여부를 검증하고 문서가 원하는 PDF/A 사양을 준수하는지 확인할 수 있습니다.

IronPDF로 정부 문서 보관 시나리오를 처리할 수 있을까요?

네, IronPDF는 NARA(미국 국립기록보관소), 법원 문서 및 의료 기록에 필요한 표준 준수를 포함하여 다양한 정부 문서 보관 시나리오를 처리할 수 있습니다.

PDF/A를 아카이빙에 사용하면 어떤 이점이 있나요?

PDF/A를 아카이빙에 사용하는 이점으로는 시간이 지나도 문서의 정확성을 보장하고, 장기 보존을 위한 표준화된 형식을 제공하며, 법적 및 조직적 요구 사항을 준수할 수 있다는 점이 있습니다.

IronPDF는 기존 PDF 파일을 PDF/A 형식으로 변환하는 기능을 지원합니까?

IronPDF는 기존 PDF 파일을 PDF/A 형식으로 변환하는 기능을 지원하여 규정 준수를 용이하게 하고 문서를 장기간 보존할 수 있도록 합니다.

IronPDF는 PDF/A 변환 시 문서의 정확성을 어떻게 보장합니까?

IronPDF는 글꼴, 이미지 및 레이아웃의 무결성을 유지하여 PDF/A 변환 시 문서의 정확성을 보장하므로, 압축된 문서가 의도한 대로 정확하게 표시됩니다.

IronPDF를 의료 기록 보관에 사용할 수 있나요?

네, IronPDF는 의료 기록 보관에 사용할 수 있으며, 문서 보존에 관한 업계 표준 및 규정을 준수하는 데 도움이 됩니다.

아흐마드 소하일
풀스택 개발자

아흐마드는 C#, Python 및 웹 기술에 탄탄한 기반을 갖춘 풀스택 개발자입니다. 그는 확장 가능한 소프트웨어 솔루션 구축에 깊은 관심을 가지고 있으며, 실제 응용 프로그램에서 디자인과 기능이 어떻게 조화를 이루는지 탐구하는 것을 즐깁니다.

Iron Software 팀에 합류하기 전, 아흐마드는 자동화 프로젝트와 API 통합 업무를 담당하며 성능 향상과 개발자 경험 개선에 주력했습니다.

그는 여가 시간에 UI/UX 아이디어를 실험하고, 오픈 소스 도구에 기여하며, 복잡한 주제를 더 쉽게 이해할 수 있도록 기술 문서를 작성하는 데 몰두하기도 합니다.

시작할 준비 되셨나요?
Nuget 다운로드 17,527,568 | 버전: 2026.2 방금 출시되었습니다