HotXLS는 Delphi와 C++Builder에서 Excel이나 PDF 프린터 드라이버 없이 워크북 또는 단일 워크시트를 PDF/A로 직접 내보냅니다. TXLSPDFExport에서 UsePDFA를 설정하고 프로필을 선택하면, 내보낸 파일은 출력 의도로 임베드된 sRGB ICC 프로필과 XMP 메타데이터 안의 pdfaid 식별 블록, 그리고 적합성 수준에 맞는 PDF 버전 헤더를 담게 됩니다
이 요구사항은 대개 개발자가 아니라 기록 보존 정책에서 나옵니다. 재무제표, 실험실 결과, 규제 신고서, 그리고 공공 기관이 수십 년간 보관해야 하는 모든 것은 50년 후에도 동일하게 렌더링되는 형식으로 저장되어야 하며, 바로 이를 보장하기 위해 존재하는 것이 PDF/A(ISO 19005)입니다. 스프레드시트는 살아 있는 계산이지만, 아카이브된 스프레드시트 사본은 그 계산을 고정된 그림으로 만든 것이어야 합니다
무엇이 PDF를 아카이브용 PDF로 만드는가?
대부분의 작업은 세 가지 요구사항이 담당합니다. 파일은 자체 완결적이어야 하므로, 사용하는 모든 폰트가 임베드되어 있어야 하고 외부 리소스를 참조해서는 안 됩니다. 색상은 모호하지 않아야 하는데, 이는 파일이 준비된 색공간을 명명하는 출력 의도를 의미합니다. 그리고 파트 번호와 적합성 수준을 선언하는 XMP 메타데이터를 통해 스스로를 식별해야 합니다
HotXLS는 이 세 가지를 모두 제공합니다. sRGB 프로필은 세 개의 구성 요소와 대체 색공간으로서의 DeviceRGB를 가진 스트림 객체로 임베드되며, 조건과 식별자 모두 sRGB IEC61966-2.1을 명명하는 GTS_PDFA1 출력 의도에서 참조됩니다. XMP 패킷은 pdfaid 파트와 적합성 항목을 담고 있습니다. 프로필 바이트는 런타임에 로드되는 것이 아니라 라이브러리 안에 컴파일되어 있으므로, 배포 단계가 필요 없고 파일 누락으로 인해 아카이브용 내보내기가 일반 내보내기로 바뀔 가능성도 없습니다
uses
lxHandleX, lxPDF;
var
Book: TXLSXWorkbook;
Exporter: TXLSPDFExport;
begin
Book := TXLSXWorkbook.Create;
Exporter := TXLSPDFExport.Create;
try
if Book.Open('quarterly-results.xlsx') <> 1 then
Exit;
Exporter.UsePDFA := True;
Exporter.PDFAProfile := xlsPdfA2b; // ISO 19005-2 레벨 B
Exporter.DocumentLanguage := 'en-GB';
Exporter.TagMode := xlsPdfTagsAutomatic;
if Exporter.SaveAsPDF(Book, 'quarterly-results-archive.pdf') <> 1 then
raise Exception.Create('archival export failed');
finally
Exporter.Free;
Book.Free;
end;
end;
어떤 프로필을 선택해야 하는가?
프로필 열거형은 PDF/A-1, PDF/A-2, PDF/A-3을 각각 접근성 변형과 기본 변형으로 다룹니다. 실제 차이는 목록이 암시하는 것보다 좁습니다
기본 변형인 레벨 B는 시각적 외형이 재현 가능함을 보장합니다. 레벨 A는 구조적·의미적 요구사항을 추가하는데, 주로 태그가 지정된 구조 트리와 정의된 읽기 순서로, 이를 통해 문서가 보조 기술에서 접근 가능해집니다. 파트 2는 파트 1의 일부 제약을 완화하고 객체 스트림과 JPEG 2000을 허용합니다. 파트 3은 여기에 더해 임의의 임베드 파일을 허용하는데, 이는 전자 인보이스 형식이 사람이 읽을 수 있는 페이지 옆에 기계가 읽을 수 있는 XML을 함께 담는 데 사용하는 방식입니다
아카이브된 스프레드시트라면 PDF/A-2b가 실용적인 기본값입니다: 아카이브에서 폭넓게 수용되고, 레벨 A가 셀 그리드에 강제하는 태깅 규율을 요구하지 않으며, 200페이지짜리 워크북 내보내기가 비대해지지 않도록 하는 압축된 구조를 허용합니다. 아카이브가 원본 데이터를 첨부 파일로도 담아야 한다면 파트 3을 선택하세요. 이는 익스포터가 AddAttachment를 통해 지원합니다
대부분의 사람이 걸려 넘어지는 폰트 규칙
PDF/A 파일이 그리는 모든 글리프는 임베드된 폰트에서 나와야 합니다. 이는 그 밖에는 올바른 내보내기가 검증에 실패하는 가장 흔한 단일 원인이며, 그 실패 양상은 미묘합니다: 파일을 만든 그 기계에서는 폰트가 설치되어 있으므로 제대로 보이는 것입니다
HotXLS는 사용하는 폰트에 대해 TrueType 서브셋을 임베드하지만, 폰트를 해석할 수 없는 경우를 위한 base-14 폴백 경로가 존재하며, base-14 폴백은 정의상 임베드되지 않습니다. 아카이브용 출력에서는 폴백 경로가 절대 선택되지 않도록 명시적인 유니코드 폰트 파일을 설정하세요. 서브셋팅과 폴백 체인의 메커니즘은 TrueType 폰트 서브셋팅에서 설명합니다. 실무적인 규칙은 회사 전용 폰트가 설치되어 있지 않은 기계에서 내보내기를 테스트하는 것입니다
익스포터가 보장하는 것과 보장하지 않는 것
여기서는 자신 있게 들리는 것보다 정확한 것이 더 중요합니다. 이 익스포터는 출력 의도, 임베드된 ICC 프로필, pdfaid 메타데이터, 적절한 버전 헤더 등 PDF/A의 식별 장치를 생성하고, 텍스트를 임베딩 경로를 통해 처리합니다. 자체 출력물에 대해 완전한 검증기를 실행하지는 않으므로, 투명도 규칙, 특정 주석 유형, 선택적 콘텐츠 관련 규칙 등 명세의 모든 금지 사항을 강제하지는 않습니다
스프레드시트 내보내기에서는 이런 구성 요소가 거의 나타나지 않으므로 실무 성공률은 높습니다. 하지만 높다는 것이 보장된다는 뜻은 아니며, 진정한 아카이브 파이프라인이라면 올바른 아키텍처는 내보낸 다음 독립적인 도구로 검증하고, 검증 실패를 경고가 아니라 파이프라인 오류로 취급하는 것입니다. PDF 문서에 대한 이와 유사한 책임 분담은 PDF/A 프리플라이트 검증에서 설명합니다
레이아웃도 아카이브 충실도의 일부다
기술적으로는 적합하지만 시각적으로 읽을 수 없는 아카이브된 스프레드시트는 실제 목적을 달성하지 못한 것입니다. 페이지 설정은 일상적인 인쇄보다 아카이브용 내보내기에서 훨씬 더 중요한데, 나중에 아무도 이를 다시 흐름 조정할 수 없기 때문입니다
세 가지 설정이 그만한 가치가 있습니다. 폭에 맞추기는 14열짜리 표가 두 열씩 일곱 페이지로 나뉘어 나오는 전형적인 실패를 막아 줍니다. 반복되는 머리글 행은 모든 페이지를 단독으로도 읽을 수 있게 유지해 줍니다. 그리고 명시적인 인쇄 영역은 실제 데이터 오른쪽에 있는 작업용 메모를 제외해 줍니다. 인쇄와 페이지 설정 컨트롤의 전체 목록은 보호, 페이지 설정, 인쇄에서 다룹니다
// 내보내기 전에 적용하는 아카이브용 페이지 설정
Sheet := Book.Sheets[0];
Sheet.PageLandscape := True;
Sheet.FitToWidth := 1;
Sheet.FitToHeight := 0; // 필요한 만큼 세로로 페이지 수 늘림
Sheet.SetPrintArea('A1:N480');
Sheet.PrintTitleRows := '$1:$3';
// 메타데이터도 아카이브에 포함되어야 함
Book.Title := 'Quarterly results 2026 Q2';
Book.Author := 'Finance';
첫 배치를 실행하기 전 체크리스트
파일이 스스로를 식별하는지 확인하세요: 압축을 풀 필요 없이 텍스트 편집기로 PDF를 열어 pdfaid 파트와 적합성 항목, GTS_PDFA1 출력 의도를 찾아보면 됩니다. 폰트를 확인하세요: 문서 안의 모든 폰트가 임베드된 것으로 보고되는지 점검합니다. 외형을 확인하세요: 내보낸 페이지를 인쇄된 사본과 비교하세요. 텍스트를 4포인트로 조용히 줄여 버리는 폭 맞추기 설정은 적합하지만 쓸모가 없기 때문입니다
그런 다음 대표 샘플에 대해 독립적인 검증기를 실행하고 보고서를 보관하세요. 아카이브는 점점 더 파일뿐 아니라 검증 증거도 요구하고 있으며, 내보내는 시점에 이를 생성하는 것이 수년 뒤에 다시 만들어내는 것보다 훨씬 저렴합니다. 일상적인 비아카이브 내보내기 경로와 그 렌더링 옵션에 대해서는 워크시트 PDF 내보내기를 참고하세요
아카이브용 내보내기, 페이지 설정, 그리고 이를 뒷받침하는 렌더링 엔진은 Delphi와 C++Builder를 위한 하나의 라이브러리로 제공됩니다. 전체 기능 목록은 HotXLS Delphi 스프레드시트 컴포넌트 페이지에서 확인할 수 있습니다