PDFium Delphi Component Docs

FPdfPdfvtMime 유닛

유닛: FPdfPdfvtMime
인라인 PDF/VT 문서와 재사용 첨부 페이로드, ICC 프로필을 하나의 multipart 컨테이너로 담는 단일 파일 PDF/VT-2s MIME 파트 스트림을 구성하고 검증합니다

Syntax

TVt2sChunkKind = (vtckInlinePdf, vtckAttachmentPdf, vtckIccProfile);

TPdfVT2sChunk = record
  Kind: TVt2sChunkKind;
  Bytes: TBytes;
  FileName: AnsiString;
end;

TPdfVT2sChunks = array of TPdfVT2sChunk;

TAnsiStrings = array of AnsiString;

TPdfVT2sValidationResult = record
  Issues: TPdfVT2sValidationIssues;
  function IsCompliant: Boolean;
end;

TPdfVTPrintingConditionSource = (vtpcsNone, vtpcsEmbeddedProfile, vtpcsMimeProfile);

TPdfVTPrintingConditionEvidence = record
  PartIndex: Integer;
  Conformance: TPdfVTConformance;
  PdfXVersion: AnsiString;
  OutputIntentObjectNumber: Integer;
  OutputConditionIdentifier: AnsiString;
  RegistryName: AnsiString;
  Source: TPdfVTPrintingConditionSource;
  ProfileFileName: AnsiString;
  ProfileName: AnsiString;
  ProfileColorSpace: AnsiString;
  ProfileByteSize: Int64;
  ProfileMd5: string;
  ProfileSha256: string;
  ProfileVersion: string;
  ProfileDeviceClass: string;
  ProfilePcs: string;
  ProfileComponentCount: Integer;
  Resolved: Boolean;
  ProfileValid: Boolean;
  DPart: TPdfVTDPartEvidence;
end;

TPdfVT2sValidationReport = record
  Validation: TPdfVT2sValidationResult;
  PrintingConditions: TPdfVTPrintingConditionEvidenceArray;
end;

procedure BuildPdfVT2sStream(const Chunks: TPdfVT2sChunks; Dest: TStream);
function ValidatePdfVT2sStream(Source: TStream): TPdfVT2sValidationResult;
function InspectPdfVT2sStream(Source: TStream): TPdfVT2sValidationReport;

Description

FPdfPdfvtMime은 ISO 16612-2 부록에 정의된 PDF/VT-2s 전송을 구현합니다. PDF/VT 문서와 참조되는 재사용 PDF 콘텐츠, ICC 프로필이 단일 MIME multipart 스트림으로 묶입니다

독립 실행형 PDF/VT-1 파일을 쓰는 TPdf.SaveAsPdfVT 경로와 달리, 이 유닛은 순수하게 바이트 스트림만 다루고 pdfium.dll을 전혀 로드하지 않으므로 헤드리스 서버와 배치 파이프라인에서 동작할 수 있습니다

BuildPdfVT2sStream은 청크를 순서대로 조립해 StreamVersion 헤더, 파트 경계, 파트별 Content-Type / Content-Disposition 헤더를 출력합니다. ValidatePdfVT2sStream은 기존 스트림을 다시 파싱하고 구조, 인쇄 조건, ICC 편차를 타입이 지정된 문제 집합으로 보고합니다

InspectPdfVT2sStream은 같은 호환성 결과에 더해 PDF/VT 파트마다 PDF/VT 적합성, PDF/X 기반, OutputIntent 식별 정보, 프로필 출처, MD5와 SHA-256, raw ICC 메타데이터, DPart 페이지 및 수신자 레코드 수의 증거를 반환합니다

각 PDF 파트는 먼저 ValidatePdfVTCompliance로 분류됩니다. PDF/X 전용 재사용 첨부는 여전히 참조 대상이 될 수 있지만 PDF/VT 계층과 인쇄 조건 비교에서는 제외됩니다

프로필 패키징은 파일 기반을 따릅니다. PDF/X-4를 쓰는 PDF/VT-1과 PDF/X-5g를 쓰는 PDF/VT-2는 내장 DestOutputProfile을 사용하고, PDF/X-4p나 PDF/X-5pg를 쓰는 PDF/VT-2는 앞선 ICC MIME 파트로 해석되는 DestOutputProfileRef를 사용합니다

Chunk kinds

ValueMIME role
vtckInlinePdf인라인 application/pdf 파트로 실리는 PDF/VT 문서입니다. 최소 하나가 필요합니다
vtckAttachmentPdf인라인 문서가 참조하는 재사용 PDF 콘텐츠 파트로, 파일 이름과 함께 attachment로 실립니다
vtckIccProfile파일 이름과 함께 첨부로 공급되는 ICC 프로필 파트입니다(application/vnd.iccprofile)

Supporting types

TypePurpose
TPdfVT2sChunksBuildPdfVT2sStream에 공급되는 순서가 있는 MIME 청크의 동적 배열입니다
TAnsiStrings인라인 PDF의 외부 파일 참조를 검증할 때 쓰이는 동적 파일 이름 배열입니다
TPdfVT2sValidationIssues검증이 반환하는 TPdfVT2sValidationIssue 발견 항목의 집합입니다
TPdfVTPrintingConditionSource프로필 증거의 출처입니다. 해석되지 않으면 vtpcsNone, 내장 DestOutputProfile 스트림이면 vtpcsEmbeddedProfile, ICC MIME 파트에서 해석된 DestOutputProfileRef면 vtpcsMimeProfile입니다
TPdfVTPrintingConditionEvidence파트별 PDF/VT·PDF/X 분류, OutputIntent, 프로필 출처, 식별 정보, 다이제스트, ICC 헤더, DPart 정보입니다
TPdfVT2sValidationReport기존 결과 배치를 바꾸지 않으면서 InspectPdfVT2sStream이 반환하는 상세 결과입니다

Validation issues

ValueReported when
vtmviNotMultipart스트림이 multipart MIME 컨테이너가 아닙니다
vtmviMissingStreamVersion필수 PDF/VT StreamVersion 헤더가 없습니다
vtmviStreamVersionValueStreamVersion 값이 기대했던 1이 아닙니다
vtmviStreamVersionAfterCtStreamVersion이 Content-Type 줄 앞이 아니라 뒤에 나옵니다
vtmviMissingBoundaryContent-Type boundary 파라미터가 없습니다
vtmviNoInlinePdf인라인 PDF/VT 파트가 없습니다
vtmviInlinePdfNotPdfVT인라인 파트가 PDF/VT로 선언되지 않았습니다
vtmviIccProfileBadDispositionICC 프로필 파트가 attachment가 아닙니다
vtmviAttachmentMissingFilename첨부 파트에 필수 파일 이름이 없습니다
vtmviInlineHasFilename인라인 PDF 파트가 허용되지 않는 파일 이름을 갖고 있습니다
vtmviNodeNameListMismatch스트림 안의 두 PDF/VT 파일이 서로 다른 NodeNameList 값을 노출합니다
vtmviRecordLevelMismatchDPart 레코드 레벨이 컨테이너 전체에서 일관되지 않습니다
vtmviForwardReference첨부가 스트림에 나타나기 전에 참조됩니다
vtmviBoundaryInvalidCharboundary 문자열에 RFC 2046이 허용하지 않는 문자가 들어 있습니다
vtmviDuplicateFilename두 MIME 첨부가 같은 파일 이름(대소문자 구분)을 노출합니다
vtmviOutputIntentAmbiguous어떤 PDF 파트의 권위 있는 GTS_PDFX OutputIntent가 0개이거나 여러 개입니다
vtmviOutputProfilePackagingMismatchOutputIntent에 두 프로필 형태가 모두 있거나 어느 쪽도 없거나, PDF/X-4, PDF/X-4p, PDF/X-5g, PDF/X-5pg 기반과 맞지 않는 형태입니다
vtmviOutputProfileReferenceInvalidDestOutputProfileRef가 필수 메타데이터나 URL 파일 명세를 빠뜨렸거나 금지된 ColorantTable을 사용합니다
vtmviReferencedPartWrongType참조된 파일 이름이 ICC 프로필이 아닌 MIME 파트로 해석됩니다
vtmviIccProfileInvalidICC 헤더, 선언된 크기, 시그니처, 태그 테이블, 지원되는 프로세스 색 공간 중 하나가 잘못되었습니다
vtmviIccChecksumMismatch디코딩된 16바이트 CheckSum이 전체 ICC 파일의 MD5와 다릅니다
vtmviIccVersionMismatch선언된 네 ICCVersion 바이트가 ICC 헤더의 8~11번째 바이트와 다릅니다
vtmviIccColorSpaceMismatchProfileCS가 ICC 헤더의 16~19번째 바이트와 다르거나 GRAY, RGB, CMYK 중 하나가 아닙니다
vtmviIccProfileNameMismatchProfileName이 유효한 profileDescriptionTag locale 값 어느 것과도 일치하지 않습니다
vtmviPrintingConditionUnresolved권위 있는 OutputIntent, 식별자, 외부 ICC 의존성을 해석할 수 없습니다
vtmviPrintingConditionMismatchPDF/VT 파트들이 OutputConditionIdentifier, RegistryName의 존재나 값, 프로세스 색 공간에서 서로 다릅니다
vtmviIccDeviceClassMismatch내장 또는 외부 대상 프로필이 출력 디바이스 prtr 프로필이 아닙니다

Remarks

Example

var Chunks: TPdfVT2sChunks;
begin
  SetLength(Chunks, 2);
  Chunks[0].Kind := vtckIccProfile;
  Chunks[0].FileName := 'profile.icc';
  Chunks[0].Bytes := IccBytes;
  Chunks[1].Kind := vtckInlinePdf;
  Chunks[1].Bytes := InlinePdfBytes;
  BuildPdfVT2sStream(Chunks, MimeStream);
end;

See Also

FPdfAsn1