로드된 PDF의 PDF/A-4 래스터 변환

HPDFArchivalConversion은 로드된 THotPDF 문서의 보이는 페이지 콘텐츠에서 엄격한 native 렌더링과 지정한 sRGB ICC 프로파일로 새 PDF/A-4 문서를 만듭니다

출력 페이지마다 요청한 DPI의 무손실 압축 RGB 래스터 이미지가 들어가고, 원본의 가시 크기, crop, 회전, UserUnit은 출력 페이지 지오메트리에 그대로 반영됩니다

원본 임베딩 폰트, text 연산자, 벡터 경로, 이미지, OCR 레이어, 보이는 주석이나 위젯 모양이 살아남아야 한다면 별도의 텍스트와 벡터 보존 프로필을 사용하십시오. 래스터 프로필은 이 구조들을 보존하지 않습니다

진입점

function HPDFConvertLoadedToPDFA4Raster(Source: THotPDF;
  Destination: TStream; const SRGBProfile: TBytes;
  const Options: THPDFArchivalConversionOptions;
  out Report: THPDFArchivalConversionReport): Boolean;

function HPDFConvertLoadedToPDFA4RasterFile(Source: THotPDF;
  const TargetFileName: string; const SRGBProfile: TBytes;
  const Options: THPDFArchivalConversionOptions;
  out Report: THPDFArchivalConversionReport): Boolean;

소스를 먼저 로드하고, 호출자가 소유한 입력 스트림은 소스 문서를 파괴할 때까지 살려 둡니다

일반적인 아카이브 공개에는 파일 진입점을 쓰세요. 기존 대상이 소스의 별칭인지 먼저 검사한 뒤 대상 디렉터리에 배타적 임시 파일을 만들고, 변환 전체를 검증하고, 파일을 flush하고, MOVEFILE_REPLACE_EXISTING과 MOVEFILE_WRITE_THROUGH를 지정한 MoveFileEx로 대상을 교체합니다

변환, 렌더링, 검증, 취소, 공개 중 어디서 실패해도 기존 대상 파일은 그대로 두고 임시 출력은 제거합니다

스트림 진입점은 위치 0의 빈 seekable 대상을 요구하고, IsLoadedSourceStreamAlias로 입력의 알려진 별칭은 거부합니다. staged 출력 전체가 native 검증을 통과한 뒤에만 바이트를 공개합니다

대상 쓰기가 실패하면 빈 스트림으로 되돌리는 최선의 리셋을 시도하지만, 임의 디바이스나 커스텀 스트림은 이 리셋을 거부하고 부분 기록을 남길 수 있습니다. 파일 공개가 원자적이어야 한다면 파일 진입점을 쓰세요

옵션과 리소스 한도

옵션기본값의미
DPI150요청하는 물리 해상도, 허용 범위는 36~1200
MaxPages1000로드된 소스 페이지의 최대 개수
MaxPixelsPerPage40,000,000페이지 픽셀과 개별 source-image 픽셀의 최댓값
MaxTotalPixels500,000,000누적 출력 래스터 픽셀의 최댓값
MaxRasterBytes256 MiB페이지 또는 source-image 래스터 할당의 최댓값, 픽셀당 4바이트로 보수적으로 검사
MaxOutputBytes256 MiBstaged PDF 크기의 최댓값, 스트림 할당과 쓰기 전에 강제
MaxDecodedStreamBytes64 MiB각 filter chain, 페이지별 결합 content preflight, 개별 native stream-read callback, 개별 인코딩된 source-image 스트림, native 출력 validator를 묶습니다
MaxTotalDecodedBytes256 MiB변환 전체의 추가 native filtered-decoder 작업, 페이지 전체의 결합 content preflight, 페이지 전체의 누적 native stream-read callback을 묶습니다
MaxInputObjects200,000이미 로드된 indirect object의 최대 개수
CancellationTokennil작업 전, native 렌더링과 디코딩 중, 공개 전에 검사하는 빌린 token
Checkpointnil변환과 native 리소스 checkpoint에서 nil sender로 호출되는 빌린 동기 callback. 소스 문서를 재진입하지 마세요

디코드 한도는 decoder 작업을 세며, preflight, display-list 컴파일, 렌더링 중에 같은 filtered stream을 다시 청구할 수 있습니다. 한도를 올리는 것은 호출자의 명시적 결정입니다

픽셀 preflight는 요청한 물리 해상도와 UserUnit 스케일링 뒤의 native 렌더러 integer DPI를 모두 검사합니다. 아주 작은 단위는 래스터 픽셀을 추가로 요구할 수 있고, 소수 페이지 크기는 이미지를 물리 페이지에 되돌려 매핑할 때 subpixel 리샘플링을 일으킬 수 있습니다

변환 한도는 소스 로드 이후에 적용됩니다. 신뢰할 수 없는 입력을 받는다면 로더 자체의 리소스 한도를 설정하세요

소스 객체 그래프는 유지되고, read 캐시와 디코드 통계는 채워질 수 있습니다. 렌더링 설정, cancellation token, backend, 디코드 한도 설정은 성공과 실패 모두에서 복원됩니다

이 설정을 임시로 적용하는 동안에는 컨버터가 소스 문서를 독점적으로 쓰도록 하세요

렌더링과 색상

모든 페이지는 native fallback 진단, 버려진 진단, 리소스 누락 실패 없이 렌더링되어야 합니다. 지원하지 않는 콘텐츠는 불완전한 페이지를 공개하는 대신 변환을 거부합니다

ICC 인자는 인식되는 matrix/TRC 표현과 표준 D50-adapted primaries, IEC sRGB transfer function으로 sRGB를 기술해야 합니다. 무관한 RGB 프로파일, CMYK 프로파일, 잘못된 프로파일, LUT 기반 프로파일은 거부됩니다

출력은 sRGB OutputIntent와 PDF/A-4 XMP 메타데이터를 선언합니다. 소스에 이미 설정된 커스텀 proof/output ICC 워크플로는 image-decoder 설정을 sRGB로 안전하게 재해석할 수 없으므로 거부됩니다

FPC 빌드는 LittleCMS를 갖춘 native codec 브리지를 요구하고, 이 색상 관리 backend가 없으면 변환을 거부합니다

인코딩된 inline 이미지를 포함한 JPEG와 JPX 이미지 스트림은 native 픽셀 디코딩 전에 실제 codestream 크기를 검사하며, PDF image dictionary와 일치해야 합니다

JPEG는 한도가 있는 8-bit baseline, extended sequential, progressive 헤더를 받고, JPX는 한도가 있는 J2K SIZ 헤더와 컴포넌트가 최대 4개이며 컴포넌트 정밀도가 최대 16-bit인 일반 길이 JP2 box를 받습니다

인코딩된 codec에는 소스 픽셀당 64바이트의 추가 보수 작업 한도가 있고, JPX tile 메타데이터는 MaxInputObjects와 MaxRasterBytes 안의 tile당 1024바이트 양쪽으로 제한됩니다. 따라서 기본 256 MiB 래스터 한도에서는 인코딩된 소스 픽셀이 최대 4,194,304개까지 허용되며, 더 큰 이미지에는 호출자가 명시적으로 늘릴 수 있습니다

JBIG2 변환은 사용 가능한 헤더 API로는 내부 region과 symbol 할당에 한도를 묶을 수 없으므로 거부됩니다. nonterminal 이미지 codec, extended-length JP2 box, 지원하지 않는 wrapper, DecodeParms를 실은 wrapped codec 스트림도 거부됩니다

CCITT fax 파라미터는 선언된 양수 이미지 크기를 유지해야 합니다. dictionary와 다른 DecodeParms.Columns, Rows 재정의는 알 수 없는 Rows=0를 포함해 native 디코딩 전에 거부됩니다

이 검사들은 이 컨버터가 받아들이는 알려진 헤더와 할당 프로파일에 한도를 묶을 뿐, 모든 native decoder를 위한 완전한 프로세스 메모리 샌드박스를 보장하지는 않습니다

정보 및 품질 손실

THPDFArchivalConversionReport는 성공·취소 상태, 소스 및 렌더링 페이지 수, 래스터 픽셀, 출력 바이트, 제거된 주석/폼/첨부 개수, 실패 진단, native 검증 소견을 담습니다

FailureKind는 afkNone, afkConversion, afkBudget, afkCancelled을 구분하고, typed 컨버터 한도 실패는 BudgetMetric, BudgetObserved, BudgetLimit도 함께 넣습니다

checkpoint 예외는 변환을 멈추고 native 실패 결과로 보고됩니다. 원래 callback 예외 범주가 필요한 wrapper는 컨버터가 잡아 가기 전에 직접 보관해야 합니다

archive.pdfa4.raster JSON·C ABI 연산은 정보 손실 동의를 명시적으로 요구하고, 소스 핸들을 보존하며, 검증된 PDF와 손실 보고서를 돌려주고, 보수적인 작업 한도 상한을 적용합니다

적합성 검증

컨버터는 staged 출력을 다시 읽고, 공개 전에 기본 PDF/A-4 프로파일의 ValidatePDFA4를 요구합니다. native validator는 문서화된 한정 rule set을 다룰 뿐, ISO 19005-4 요구 사항 전부의 증명은 아닙니다

독자적인 검수에는 --flavour 4를 준 veraPDF를 쓸 수 있습니다. nonembedded 텍스트, transparency, RGB 이미지, 링크, 서명 위젯, 첨부를 담은 회귀 픽스처는 실패한 rule·check 없이 veraPDF 1.30.2를 통과했습니다

이 기능 전용 non-GUI 회귀 스위트는 Tests/Delphi/Run-HotPDFArchivalTests.bat로 실행합니다