이 페이지에는 자동 번역된 텍스트가 포함될 수 있습니다.
PDF를 PDF/A로 변환
이 문서는 Docotic.Pdf를 사용하여 PDF 문서를 PDF/A로 변환하는 방법을 설명합니다. 이 .NET 라이브러리에는 완전히 오프라인에서 실행되는 고성능 PDF-to-PDF/A 변환기가 포함되어 있습니다. 또한 Docotic.Pdf를 사용하여 처음부터 PDF/A 문서를 만들 수 있습니다.

왜 PDF를 PDF/A로 변환해야 하나요?
PDF/A는 보관용으로 설계된 특수한 PDF 버전입니다. 표준 PDF 문서를 PDF/A로 변환하면 다음과 같은 여러 이점이 있습니다:
-
장기 보존
PDF/A 문서는 오랜 기간 동안 접근 가능하고 사용할 수 있어, 법적, 정부 및 보관 목적에 이상적입니다. -
규제 준수
엄격한 규정 준수 및 법적 요구 사항이 있는 업계에서는 문서를 PDF/A로 저장하는 경우가 많습니다. -
PDF 뷰어 간 일관된 표시
PDF/A 문서는 서로 다른 시스템과 PDF 뷰어에서 일관되게 표시됩니다.
PDF/A 표준에 대한 자세한 내용은 PDF/A란 무엇인가? 문서를 읽어 보세요.
C#에서 PDF를 PDF/A로 변환
PDF를 PDF/A로 변환하려면 다음이 필요합니다:
- Conformance 추가 기능이 포함된 Docotic.Pdf.
- 라이선스 키. 다운로드 페이지에서 무료 기간 제한 라이선스를 받을 수 있습니다.
다음 C# 코드는 PDF 파일을 PDF/A-4로 변환합니다:
using var pdf = new PdfDocument("input.pdf");
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa4);
SaveAsPdfa 메서드는 BitMiracle.Docotic.Pdf.Conformance 네임스페이스의 추가 기능에서 제공됩니다. 이 메서드는 모든 PDF/A 준수 수준을 지원합니다: PDF/A-1a, PDF/A-1b, PDF/A-2a, PDF/A-2b, PDF/A-2u, PDF/A-3a, PDF/A-3b, PDF/A-3u, PDF/A-4, PDF/A-4e, PDF/A-4f. 출력은 파일 또는 스트림으로 쓸 수 있습니다.
원본 문서를 요청한 PDF/A 준수 수준으로 변환할 수 없으면 SaveAsPdfa는 ConformanceException을 throw합니다. 자세한 내용은 오류 처리 섹션을 참조하세요.
고급 변환 시나리오
Docotic.Pdf는 PDF/A 문서를 처음부터 만들기, HTML을 PDF/A로 변환하기, 여러 문서를 단일 PDF/A 파일로 병합하기 등 다양한 PDF/A 워크플로를 지원합니다.
PDF/A 문서 만들기
Docotic.Pdf는 .NET에서 PDF 문서를 만드는 다양한 방법을 제공합니다. Core API 또는 Layout API를 사용해 PDF/A 문서를 생성할 때도 동일한 SaveAsPdfa 메서드를 사용할 수 있습니다.
다음 C# 코드는 Core API를 사용하여 PDF/A-3u 문서를 만듭니다:
using var pdf = new PdfDocument();
pdf.Pages[0].Canvas.DrawString("Hello PDF/A");
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa3U);
Layout API를 사용하면 일반 PDF 문서를 만든 다음 PDF/A로 변환합니다. 이 코드 샘플은 PDF/A-1b 문서를 생성하는 방법을 보여줍니다:
using var ms = new MemoryStream();
PdfDocumentBuilder.Create().Generate(ms, doc => doc.Pages(pages =>
{
pages.Content().Text("Hello, world!");
}));
using var pdf = new PdfDocument(ms);
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa1B);
HTML을 PDF/A로
HtmlToPdf 추가 기능은 HTML을 PDF로 변환합니다. 결과를 보관용으로 준비하려면 생성된 PDF를 PDF/A로 저장하세요:
var uri = new Uri("https://google.com");
var options = new HtmlConversionOptions
{
PreserveStructureInformation = true,
};
using var converter = await HtmlConverter.CreateAsync();
using var pdf = await converter.CreatePdfAsync(uri, options);
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa3A);
PreserveStructureInformation = true 옵션은 접근 가능한 문서를 만드는 데 도움이 됩니다. 이는 PDF/A-1a, PDF/A-2a 또는 PDF/A-3a 준수 수준에 중요합니다.
PDF 문서를 PDF/A로 결합
Docotic.Pdf는 PDF 문서 병합을 지원합니다. 병합된 문서를 PDF/A로 저장하려면 PdfDocument.Save 호출을 SaveAsPdfa로 바꾸세요:
using var pdf = new PdfDocument("first.pdf");
pdf.Append("second.pdf");
pdf.SaveAsPdfa("merged.pdf", PdfaConformanceLevel.Pdfa1B);
같은 원칙을 다른 PDF 편집 시나리오에도 적용할 수 있습니다. 예를 들어, PDF 페이지를 제거하고, 텍스트를 편집하고, 폼 필드를 평면화한 다음 최종적으로 PDF/A로 저장합니다.
C#에서 ZUGFeRD / Factur-X 파일 만들기
Factur-X / ZUGFeRD는 PDF/A-3를 기반으로 하는 유럽 전자 송장 표준입니다. Docotic.Pdf를 사용하여 XML 송장 파일을 포함하고 유효한 Factur-X / ZUGFeRD 문서를 만들 수 있습니다:
using var pdf = new PdfDocument();
PdfFileSpecification xml = pdf.CreateFileAttachment("your_path_to/xrechnung.xml");
xml.Relationship = "Alternative";
pdf.SharedAttachments.Add(xml);
var fx = new XmpSchema("fx", "urn:factur-x:pdfa:CrossIndustryDocument:invoice:1p0#");
var props = fx.Properties;
props.Add(new XmpProperty("DocumentType", new XmpString("INVOICE")));
props.Add(new XmpProperty("DocumentFileName", new XmpString("xrechnung.xml")));
props.Add(new XmpProperty("Version", new XmpString("3.0")));
props.Add(new XmpProperty("ConformanceLevel", new XmpString("XRECHNUNG")));
pdf.Metadata.Schemas.Add(fx);
pdf.SaveAsPdfa("zugferd.pdf", PdfaConformanceLevel.Pdfa3A);
Order-X 문서 만들기
Order-X는 구매 주문서의 전자 처리를 허용하는 또 다른 EU 표준입니다. 다음 C# 스니펫은 COMFORT 프로필을 사용하여 Order-X 문서를 만드는 방법을 보여줍니다:
using var pdf = new PdfDocument();
using (var file = File.OpenRead("order-data-comfort.xml"))
{
PdfFileSpecification xml = pdf.CreateFileAttachment(file, "order-x.xml");
xml.Relationship = "Data";
pdf.SharedAttachments.Add(xml);
}
var fx = new XmpSchema("fx", "urn:factur-x:pdfa:CrossIndustryDocument:1p0#");
var props = fx.Properties;
props.Add(new XmpProperty("DocumentType", new XmpString("ORDER")));
props.Add(new XmpProperty("DocumentFileName", new XmpString("order-x.xml")));
props.Add(new XmpProperty("Version", new XmpString("1.0")));
props.Add(new XmpProperty("ConformanceLevel", new XmpString("COMFORT")));
pdf.Metadata.Schemas.Add(fx);
pdf.SaveAsPdfa("order-x.pdf", PdfaConformanceLevel.Pdfa3B);
보호된 PDF 파일을 PDF/A로 변환
암호화된 PDF 파일을 변환하는 것은 다르지 않습니다. 올바른 암호로 문서를 열고 SaveAsPdfa를 호출하세요:
using var pdf = new PdfDocument(fileName, new PdfStandardDecryptionHandler("password"));
pdf.SaveAsPdfa("result.pdf", PdfaConformanceLevel.Pdfa4E);
배치 처리
여러 PDF 파일을 PDF/A로 변환하는 작업을 자동화할 수 있습니다. 디렉터리의 모든 PDF 파일을 열거하고 각 문서를 PDF/A로 변환하세요. 다음 코드 샘플은 파일을 병렬로 변환하는 방법을 보여줍니다:
public static async Task ConvertAsync(string directoryPath)
{
string[] files = Directory.GetFiles(directoryPath, "*.pdf", SearchOption.AllDirectories);
if (files.Length == 0)
return;
var semaphore = new SemaphoreSlim(Environment.ProcessorCount);
var tasks = new List<Task>(files.Length);
foreach (var f in files)
{
await semaphore.WaitAsync();
var task = Task.Run(() =>
{
string outputFileName = $"{Path.GetFileName(f)}-{Guid.NewGuid()}.pdf";
try
{
using var pdf = new PdfDocument(f);
pdf.SaveAsPdfa(outputFileName, PdfaConformanceLevel.Pdfa1B);
}
finally
{
semaphore.Release();
}
});
tasks.Add(task);
}
await Task.WhenAll(tasks);
}
임의의 PDF 파일에 대한 변환 워크플로를 구현할 때는 결과 파일이 모두 PDF/A를 준수하는지 검증하는 것이 좋습니다. 배치 변환 및 검증을 위한 바로 사용할 수 있는 애플리케이션은 변환 품질 평가 섹션에서 찾을 수 있습니다.
오류 처리
변환은 일부 상황에서 실패할 수 있습니다. 예를 들면 다음과 같습니다:
- 입력 파일이 PDF가 아님
- 암호화된 PDF에 잘못된 암호가 제공됨
- PDF/A용 글꼴 바이트를 포함할 수 없음
Docotic.Pdf는 이러한 경우 예외를 throw합니다. 다음 샘플 코드는 예외를 처리하는 방법을 보여줍니다:
try
{
using var pdf = new PdfDocument("input.pdf");
pdf.SaveAsPdfa("output.pdf", PdfaConformanceLevel.Pdfa1B);
}
catch (PdfException ex)
{
Console.WriteLine($"Problem with an input document: {ex.Message}");
}
catch (ConformanceException ex)
{
Console.WriteLine($"Unable to convert to PDF/A: {ex.Message}");
}
PDF/A에서 PDF로 변환
PDF/A에서 PDF로 변환하는 것은 문서 편집을 더 쉽게 하려는 경우에 사용됩니다. 이 과정은 PDF를 PDF/A로 변환하는 것보다 훨씬 간단합니다. XMP 메타데이터의 일부만 제거하면 됩니다. 샘플 코드:
using var pdf = new PdfDocument("pdfa-compliant.pdf");
var schemas = pdf.Metadata.Schemas;
for (int i = 0; i < schemas.Count; ++i)
{
if (schemas[i].Namespace == "http://www.aiim.org/pdfa/ns/id/")
{
schemas.RemoveAt(i);
--i;
}
}
pdf.Save("regular.pdf");
PDF를 PDF/A로 변환할 때 Docotic.Pdf를 선택하는 이유?
Docotic.Pdf는 외부 종속성 없는 고성능 순수 C# .NET 라이브러리입니다. Windows, Linux, macOS, Android, iOS 또는 클라우드 환경에서 PDF/A 문서를 만드는 데 사용할 수 있습니다. 또한 Docotic.Pdf는 다음과 같은 이점을 제공합니다.
독립형 오프라인 변환
변환은 전적으로 로컬 컴퓨터에서 수행됩니다. 데이터는 외부 서버나 타사 공급자에게 전송되지 않습니다. 오프라인 변환은 데이터가 환경 밖으로 나가지 않으므로 민감한 문서를 보호하는 데 도움이 됩니다.
품질
Docotic.Pdf는 품질을 희생하지 않으면서 변환 중 원본 정보를 가능한 한 많이 보존하도록 설계되었습니다.
ISO 준수
Docotic.Pdf는 다음 ISO 표준을 준수하는 PDF/A 파일을 생성합니다:
- ISO 19005-1:2005 (PDF/A-1)
- ISO 19005-2:2011 (PDF/A-2)
- ISO 19005-3:2012 (PDF/A-3)
- ISO 19005-4:2020 (PDF/A-4)
모든 Docotic.Pdf 빌드는 수천 개의 자동화된 테스트를 통과합니다. PDF-to-PDF/A 테스트는 다양한 출처의 대량 PDF 파일 컬렉션을 사용하여 여러 PDF/A 준수 수준으로 변환합니다. 그런 다음 생성된 파일의 PDF/A 준수 여부를 검증합니다.
한 테스트 그룹은 변환된 파일에 대해 veraPDF가 문제를 보고하지 않는지 확인합니다. 두 번째 테스트 그룹은 각 결과 파일을 비교하여, veraPDF와 Adobe Acrobat Preflight 둘 다 준수 문제 없음이 검증한 기대 PDF/A 버전과 일치하는지 확인합니다.
변환 품질 평가
오픈 소스 PdfToPdfa 프로젝트를 제공합니다. 이 프로젝트는 PDF 파일을 PDF/A로 변환하는 .NET 콘솔 애플리케이션입니다. 변환 후 앱은 각 결과 문서를 검증합니다. 이 프로젝트는 변환에는 Docotic.Pdf를, 검증에는 veraPDF를 사용합니다.
이 애플리케이션은 명령줄 모드에서 사용하여 PDF/A 워크플로를 자동화할 수 있습니다. 또는 UI 모드에서 사용하여 변환 품질과 성능을 빠르게 평가할 수 있습니다.

이 애플리케이션은 임의의 PDF 파일 또는 디렉터리를 처리합니다. 편의를 위해 프로젝트 저장소에는 veraPDF corpus와 Isartor Test Suite의 테스트 파일도 포함되어 있습니다.
PDF/A로 변환하는 동안 어떤 일이 발생하나요?
PDF/A 사양은 준수 문서에 대한 요구 사항 목록이 매우 많습니다. 변환기는 이를 모두 검증하고 적용하여 유효한 PDF/A 파일을 생성합니다. 높은 수준에서 보면 모든 PDF 객체를 검사하고 발견된 PDF/A 준수 문제를 수정합니다.
모든 PDF를 내용 변경 없이 PDF/A로 변환할 수 있는 것은 아닙니다. 일부 PDF 기능은 선택한 PDF/A 준수 수준에서 허용되지 않으므로, 변환기는 이를 제거하거나 변환해야 합니다. 그 결과 변환은 손실이 있는 프로세스가 될 수 있습니다.
예를 들어 PDF/A-1은 선택적 콘텐츠(레이어), 포함된 파일(첨부 파일), 투명도를 허용하지 않습니다. 원본 PDF 문서가 이러한 기능을 사용하면 변환기는 레이어를 평면화하고, 첨부 파일과 투명도를 제거합니다. 이러한 콘텐츠를 보존하는 것이 중요하다면 이를 지원하는 PDF/A 준수 수준을 선택하세요:
- 모든 PDF/A-2, PDF/A-3 및 PDF/A-4 준수 수준은 투명도와 선택적 콘텐츠를 지원합니다.
- PDF/A-3, PDF/A-4 및 PDF/A-4f는 임의의 포함된 파일을 지원합니다. PDF/A-2와 PDF/A-4는 포함된 PDF/A 파일만 지원합니다.
Docotic.Pdf가 가장 일반적인 문제를 어떻게 수정하는지 살펴보겠습니다.
글꼴 및 텍스트
변환기는 문서에서 사용된 모든 글꼴을 포함하려고 시도합니다. 아직 포함되지 않은 글꼴의 경우 먼저 시스템 글꼴 컬렉션 또는 사용자 지정 글꼴 소스에서 적절한 글꼴 데이터를 로드하려고 합니다. 일치하는 글꼴을 찾지 못하면 대체 글꼴을 사용합니다.
사용자 지정 글꼴 로더를 제공하여 이 과정을 사용자 정의할 수 있습니다. IFontLoader 인터페이스는 글꼴 데이터를 로드하는 데 사용됩니다. 예를 들어 DirectoryFontLoader 구현은 하나 이상의 지정된 디렉터리에서 글꼴 바이트를 로드합니다.
IFontLoader가 요청한 글꼴을 로드할 수 없을 때 대체 글꼴을 제공하도록 IFallbackFontProvider 인터페이스의 구현도 제공할 수 있습니다.
다음 예제는 글꼴 로딩을 사용자 정의하는 방법을 보여줍니다:
public static void ConfigurePdfToPdfa(
string fileName,
PdfaConformanceLevel level,
Stream output,
IFontLoader? fontLoader,
IFallbackFontProvider? fallbackFontProvider)
{
var config = PdfConfigurationOptions.Create();
if (fontLoader != null)
config.FontLoader = fontLoader;
if (fallbackFontProvider != null)
config.FallbackFontProvider = fallbackFontProvider;
using var pdf = new PdfDocument(fileName, config);
pdf.SaveAsPdfa(output, level);
}
Docotic.Pdf는 일관되지 않은 글리프 너비, CMap 및 ToUnicode 스트림도 수정합니다. 정의되지 않은 문자는 변환 과정에서 제거됩니다.
메타데이터
변환기는 잘못된 메타데이터 스키마 또는 속성을 수정하거나 제거하고, pdfaid 스키마를 추가하며, XMP 메타데이터와 문서 정보 사전을 동기화합니다.
Conformance 추가 기능은 PdfDocument에 대한 ReadPdfaConformance 확장 메서드도 제공합니다. 이 메서드를 사용하여 XMP 메타데이터에 선언된 PDF/A 준수 수준을 읽으세요:
using var pdf = new PdfDocument("input.pdf");
PdfaConformanceLevel? level = pdf.ReadPdfaConformance();
색상
장치 의존 색상은 PDF/A 문서에서 허용되지 않으므로, 변환기는 장치 색상에 대한 출력 의도 ICC 프로필을 제공합니다. 또한 준수하지 않는 출력 의도와 색 공간도 수정합니다.
PDF/A-1 문서를 만들 때는 투명도가 제거됩니다. 이는 혼합 모드, 소프트 마스크 및 투명도 그룹에 영향을 줍니다. 잘못된 이미지 속성도 수정됩니다.
포함된 파일
포함된 파일 처리는 PDF/A 준수 수준에 따라 다릅니다. PDF/A-1에서는 모든 포함된 파일이 제거됩니다.
PDF/A-2 및 PDF/A-4에서는 포함된 PDF 파일이 PDF/A로 변환됩니다. PDF가 아닌 첨부 파일은 제거됩니다. 포함된 PDF/A 파일의 경우, PDF/A-4에서는 MIME 유형과 파일 관계도 수정됩니다.
PDF/A-3에서는 첨부 파일이 제거되지 않지만, 파일 관계와 MIME 유형은 수정됩니다.
대화형 기능
변환기는 누락되었거나 잘못된 외형 스트림을 생성합니다. 또한 잘못된 주석 속성을 수정하고, 허용되지 않는 유형의 주석을 평면화하며, 허용되지 않는 유형의 작업을 제거합니다.
XFA 폼은 PDF/A-2, PDF/A-3 및 PDF/A-4에서 제거됩니다. PDF/A-1만 XFA 폼을 허용하지만, 장기 보관에는 여전히 권장되지 않습니다.
PDF/A-1을 대상으로 할 때는 선택적 콘텐츠가 평면화됩니다. 다른 준수 수준의 경우 변환기는 순서 배열이 불완전하거나 이름이 누락되었거나 중복된 이름이 있는 선택적 콘텐츠 구성 사전을 수정합니다.
디지털 서명
디지털 서명은 설계상 서명된 콘텐츠의 수정을 허용하지 않습니다. PDF의 서명된 부분에 PDF/A 준수 문제가 있으면 변환기가 이를 수정하고 서명을 무효화합니다.
기타 영역
접근성을 위해, 변환기는 기본 문서 구조 정보가 없으면 이를 추가합니다. 또한 잘못되었거나 비표준 구조 태그도 수정합니다. 이는 PDF/A-1a, PDF/A-2a 및 PDF/A-3a 문서에 적용됩니다.
PDF/A 파일은 암호화될 수 없으므로, 변환기는 출력 파일의 암호화를 허용하지 않습니다.
LZW로 압축된 데이터는 PDF/A에서 허용되지 않습니다. 변환기는 LZW 스트림을 Flate 압축으로 다시 압축합니다. 또한 준수하지 않는 배열, 사전, 숫자, 이름 및 문자열 객체도 수정합니다.
잘못된 파일 헤더 또는 교차 참조 섹션도 자동으로 수정됩니다.
결론
Conformance 추가 기능이 포함된 Docotic.Pdf는 고품질 PDF-to-PDF/A 변환기를 제공합니다. 기존 PDF 문서를 모든 PDF/A 준수 수준으로 변환하거나 처음부터 PDF/A 문서를 만들 수 있습니다. 이 라이브러리는 완전히 온프레미스에서 작동하므로 데이터가 서버를 벗어나지 않습니다.
샘플 저장소의 PDF/A 섹션에서 PDF/A 문서를 만들고 처리하는 실행 가능한 C# 및 VB.NET 예제를 살펴볼 수 있습니다.
또한 PDF-to-PDF/A 변환을 위한 오픈 소스 PdfToPdfa 애플리케이션도 있습니다. 이를 사용하여 PDF/A 워크플로를 자동화하거나 단순히 PDF 파일을 PDF/A로 변환할 수 있습니다.
자주 묻는 질문
적절한 PDF-to-PDF/A 변환기를 선택하는 방법은?
좋은 PDF-to-PDF/A 변환기는 다음을 충족해야 합니다:
- PDF/A를 준수하는 파일을 생성해야 합니다.
- 원본 문서의 정보와 시각적 외형을 보존해야 합니다.
- 타사 서버로 파일을 보내지 않고 로컬에서 실행되어야 합니다.
- 빠르게 동작해야 합니다.
- (자동화가 필요한 경우) UI 없이 실행을 지원해야 합니다.
Docotic.Pdf 라이브러리는 모든 기준을 충족하며 PDF를 PDF/A로 변환하는 데 적합한 선택입니다.
PDF/A 문서가 준수하는지 검증하는 방법은?
검증 소프트웨어를 사용하세요. 좋은 PDF/A 검증기는 다음을 충족해야 합니다:
- PDF/A에 대한 ISO 표준을 깊이 있게 따라야 합니다.
- 타사 서버로 파일을 보내지 않고 로컬에서 실행되어야 합니다.
- 빠르게 동작해야 합니다.
- (자동화가 필요한 경우) UI 없이 실행을 지원해야 합니다.
veraPDF는 이러한 요구 사항을 모두 지원하는 업계 표준 검증 도구입니다.
PDF를 PDF/A로 변환하는 워크플로를 자동화하는 방법은?
Docotic.Pdf Conformance 추가 기능을 사용하여 PDF 파일을 변환하세요. veraPDF 검증기로 결과를 검증하세요. 변환 및 검증 진행 상황을 추적하세요.
오픈 소스 PdfToPdfa 애플리케이션은 이 워크플로를 구현합니다. 자체 구현의 시작점으로 사용하세요.
어떤 PDF/A 버전을 사용해야 하나요?
PDF/A 버전 선택 방법 섹션을 읽어 보세요.
ZUGFeRD를 위해 XML 파일을 PDF에 포함할 수 있나요?
예, 물론입니다. ZUGFeRD / Factur-X 파일 만들기 섹션의 예제를 살펴보세요.
PDF/A 문서를 보호하는 방법은?
기술적으로 불가능합니다. PDF/A 파일은 암호화될 수 없습니다.