기술 문서

Delphi용 losLab PDF 라이브러리 3종 비교

세 개의 라이브러리. 세 개의 뚜렷한 작업. 잘못된 선택은 해결 방법을 찾는 데 몇 주가 소요되고, 하나만 필요한 경우에 세 개를 모두 선택하면 예상치 못한 유지 보수 비용이 발생합니다. 각 losLab PDF 라이브러리가 실제로 어떤 기능을 하는지, 어디에 적합한지, 그리고 어디에서 형제 라이브러리에게 작업을 넘기는지에 대한 직접적인 설명이 여기에 있습니다

Delphi용 세 losLab PDF 라이브러리 비교 다이어그램: HotPDF는 새 문서 생성, PDFium Component는 기존 파일 렌더링과 추출, PDF Library for Delphi는 병합과 컴플라이언스 서명
HotPDF는 코드에서 새 PDF를 쓰고, PDFium Component는 기존 파일을 읽어 렌더링하며, PDF Library for Delphi는 이미 존재하는 것을 병합, 서명, 관리합니다

HotPDF: Delphi에서 백지상태로 PDF 작성하기

HotPDF는 PDF 문서를 생성하기 위한 네이티브 VCL 컴포넌트입니다. 그 모델은 명령형(imperative)이며 페이지 중심(page-centric)입니다: THotPDF 인스턴스를 구성하고, 문서 속성을 설정하고, BeginDoc을 호출하고, CurrentPage에 그리고, 필요에 따라 페이지를 추가한 다음 EndDoc으로 닫습니다. BeginDoc이 실행되는 순간 암호화 딕셔너리와 압축 설정이 커밋되므로 순서가 중요합니다; 해당 시점 이후에 할당된 내용은 소급 적용되지 않고 묵시적으로 무시됩니다

드로잉 표면은 Delphi 수준에서 PDF 연산자 세트 전체를 커버합니다. 위치를 지정한 유니코드 텍스트를 위한 TextOut, TrueType 임베딩을 갖춘 SetFont, 벡터 프리미티브(선, 베지어 곡선, 타원, 사각형), 파일이나 메모리에서의 이미지 배치, 바코드 생성이 그 대상입니다. 좌표는 왼쪽 위 모서리 원점에 Y가 아래로 증가하는 포인트 단위인데, VCL 캔버스가 동작하는 방식 그대로입니다. 원점이 왼쪽 아래인 날 PDF 콘텐츠 스트림에서 오면 이것에 걸려 넘어지게 됩니다. 폰트 상태는 AddPage를 살아남지 못하므로 페이지 나눔마다 SetFont 호출이 필요합니다

Delphi에서 HotPDF PDF 생성의 수명 주기 다이어그램: THotPDF 생성부터 BeginDoc, 드로잉, AddPage, EndDoc까지 이어지며 문서 옵션은 BeginDoc에서 확정된다는 규칙을 보여줌
문서 수준 옵션은 BeginDoc이 실행될 때 잠기고, 좌표는 왼쪽 위에서 자라며, 폰트 상태는 AddPage마다 초기화됩니다

AcroForm 필드는 주요(first-class) 기능입니다. 텍스트 필드, 확인란, 라디오 버튼, 콤보 상자, 목록 상자, 누름 버튼을 각각 단일 호출로 페이지 객체에 직접 추가할 수 있습니다. HotPDF는 또한 LoadFromFile을 통해 기존 PDF를 로드하고 필드 값을 채우거나 읽을 수 있으므로 양식 구축과 입력 자동화라는 두 가지 별도 워크플로에서 유용합니다

암호화 역시 문서 수준에서 처리됩니다. CryptKeyLength가 체계를 선택하고(40비트 RC4에서 AES-256까지), ActivateProtection이 무장시키며, ProtectOptions가 ISO 권한 플래그를 설정합니다. 두 가지 AES-256 리비전 모드(UseAES256R6로 제어하는 R5와 R6)가 존재하는 이유는, 리비전 5는 암호 검사가 약하다고 판명된 뒤 나중에 폐기된 Adobe 확장이고 리비전 6은 ISO 32000-2가 표준화한 형태이기 때문입니다. Acrobat X 이후와 현재의 대부분 뷰어는 R6 파일을 열므로 R6이 합리적인 기본값입니다. R5는 수신자가 구형 뷰어에 갇혀 있을 때만 의미가 있습니다

HotPDF의 디지털 서명 지원은 PAdES 기준 프로필을 다루므로 서명이 ETSI EN 319 142 요구 사항을 충족해야 하는 워크플로에 적합합니다. 출력 생성만이 필요한 경우 HotPDF가 가장 먼저 찾아야 할 라이브러리입니다

PDFium Component: 기존 PDF 렌더링, 보기, 읽기

PDFium Component는 구글의 PDFium 엔진을 VCL 컴포넌트로 래핑하므로 HotPDF와 근본적으로 다른 역할을 부여합니다. HotPDF가 쓰는 곳에서 PDFium Component는 읽고 렌더링합니다. 핵심 객체는 FileName을 설정한 다음 Active := True로 파일을 여는 문서 관리자인 TPdf입니다. 로드 실패는 예외로 발생하지 않습니다; Active가 단순히 False로 유지되므로 할당 후 이를 확인하는 것은 필수 사항입니다

렌더링은 폼 위에 올려놓고 PdfView.Pdf := Pdf를 통해 TPdf 인스턴스에 연결하는 시각적 컴포넌트인 TPdfView를 통해 실행됩니다. 확대/축소 및 맞춤 모드는 문서가 아니라 뷰에 존재합니다. 사람들을 걸려 넘어지게 하는 한 가지 미묘한 점은 Pdf.PageNumber와 PdfView.PageNumber가 독립적인 속성이라는 것입니다. 하나를 설정한다고 해서 다른 것이 업데이트되지 않으며, 뷰 기반 추출 API(단어 상자, 읽기 단위)는 문서가 아닌 뷰의 현재 페이지를 사용합니다

텍스트 추출은 PDFium Component가 losLab 라인업에서 직접적인 경쟁자가 없는 분야입니다. ReadablePageContent는 읽기 순서를 인식하여 구조화된 텍스트를 반환하고, PageWordBoxes는 단어 수준의 경계 사각형을 제공하며, DocumentReadingUnits는 문서 전체를 탐색합니다. 접근성 작업을 위해 IsTagged는 구조 트리가 존재하는지 여부를 알려주고 ValidatePdfUa는 UA 적합성 검사를 실행합니다. 이러한 API들은 PDFium Component를 새로운 PDF를 생성하는 것이 아니라 기존 PDF 내부에 무엇이 있는지 이해해야 하는 모든 워크플로의 자연스러운 선택으로 만듭니다

양식 채우기도 기본 엔진이 노출하는 동일한 AcroForm 레이어를 통해 PDFium 측면에서 작동합니다. 이는 소스 문서가 이미 존재하고 양식 필드를 직접 구성하는 것이 아니라 그 완성을 자동화할 때 적절합니다

PDF Library for Delphi: 조작, 규정 준수 서명 및 직접 파일 액세스

PDF Library for Delphi는 복잡성 스펙트럼의 반대편 끝에 놓입니다. 같은 문서 모델 위에 세 개의 API 계층을 노출합니다. Quick-PDF 호출 관례와 호환되는 평면적인 핸들 기반 파사드(TPDFlib), 완전한 객체 트리 계층(TPDFDocument), 그리고 완전한 객체 그래프를 적재하지 않고 파일 바이트를 직접 다루는 스트리밍 파서(TSmartPDFReader / TSmartPDFWriter)가 그 셋입니다

PDF Library for Delphi 아키텍처 다이어그램: TPDFlib 퍼사드, TPDFDocument 객체 트리, 그리고 하나의 문서 파일 위에서 스트리밍 파서인 TSmartPDFReader와 TSmartPDFWriter를 보여줌
평면 퍼사드는 짧은 호출 시퀀스에 어울리고, 객체 트리는 구조 편집을 다루며, 스트리밍 파서는 전체 재로드 없이 증분 업데이트와 PAdES 스탬프를 추가합니다

스트리밍 계층은 PDF Library for Delphi를 대용량 문서에 적합한 선택으로 만듭니다. TSmartPDFWriter는 전체 상호 참조 테이블을 재구성하지 않고도 디스크에 있는 파일에 증분 업데이트를 추가할 수 있으며, 이는 효율적인 재저장과 PAdES 장기 유효성 확인 스탬프 모두의 기반이 되는 메커니즘입니다. 서명된 해시가 특정 바이트 범위를 덮어야 하고 문서를 다시 쓰지 않고 서명이 적용되는 규정 준수 등급의 서명 워크플로의 경우 이 계층이 유일하게 실행 가능한 경로입니다

TPDFDocument 수준의 문서 조작에는 Merge를 통한 병합, 범위 문자열이 포함된 CopyPagesFromDoc을 통한 선택적 페이지 복사, 그리고 SetMinimumVersion 및 LockSaveVersion을 통한 버전 관리가 포함됩니다. 버전 잠금은 출력을 잠긴 버전 이상으로 밀어 올릴 수 있는 기능을 저장하려고 시도할 때 오류 602를 발생시키며, 이는 아카이브 규정 준수를 위해 출력이 특정 PDF 개정판 내에 유지되도록 보장해야 할 때 유용합니다

PDF/A 지원(ISO 19005)은 PDF Library for Delphi의 적합성 작업대에 위치합니다. 암호화와 PDF/A는 사양상 상호 배타적이라는 점에 유의하십시오: 한 파일에 둘 다 가질 수 없습니다. 암호화된 배포 사본과 PDF/A 아카이브 사본이 필요한 워크플로는 두 개의 별도 아티팩트를 생성해야 합니다

선택하기

일반적인 의사 결정 트리는 짧습니다. 데이터에서 새 문서를 생성하는 경우 HotPDF를 사용하십시오. Delphi VCL 애플리케이션에서 기존 문서를 렌더링하거나 텍스트를 추출하는 경우 PDFium Component를 사용하십시오. 기존 PDF를 대규모로 또는 증분 저장 시맨틱을 사용하여 조작, 병합 또는 규정 준수 서명하는 경우 PDF Library for Delphi를 사용하십시오. 많은 프로덕션 시스템이 세 가지 중 두 가지를 사용합니다: 예를 들어 HotPDF를 사용하여 출력을 생성하고 PDF Library for Delphi를 사용하여 보관 전에 장기 유효성 확인 스탬프를 적용하거나, HotPDF가 생성한 것을 다운스트림으로 보내기 전에 미리 보기 위해 PDFium Component를 사용하는 식입니다

세 라이브러리 모두 Delphi와 C++Builder용 네이티브 파스칼 소스로 제공됩니다. HotPDF와 PDF Library for Delphi는 VCL 이외의 런타임 종속성이 없고, PDFium Component는 엔진의 렌더링과 파싱 작업을 맡는 PDFium DLL을 함께 제공합니다. 각 라이브러리의 제품 페이지에 전체 API 참조와 현재 버전 기록이 실려 있습니다

개별 라이브러리에 대한 세부 정보: HotPDF Delphi Component, PDFium Component, 그리고 PDF Library for Delphi