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;
FPdfPdfvtMime implementerer PDF/VT-2s-transporten definert i ISO 16612-2 Anneks, der et PDF/VT-dokument pluss dets refererte gjenbrukbare PDF-innhold og ICC-profil pakkes som én enkelt MIME multipart-strøm
I motsetning til TPdf.SaveAsPdfVT-stien som skriver en frittstående PDF/VT-1-fil, arbeider denne enheten rent på bytestrømmer og laster aldri pdfium.dll, så den kan kjøre i headless-tjenere og batchpipelines
BuildPdfVT2sStream setter sammen delene i rekkefølge og sender ut StreamVersion-headeren, delgrensene og Content-Type / Content-Disposition-headere per del; ValidatePdfVT2sStream parser en eksisterende strøm tilbake og rapporterer strukturelle avvik, avvik i utskriftsbetingelser og ICC-avvik som et typet problemsett
InspectPdfVT2sStream returnerer det samme kompatibilitetsresultatet pluss bevis for hver PDF/VT-del, inkludert PDF/VT-samsvar, PDF/X-basis, OutputIntent-identitet, profilopprinnelse, MD5 og SHA-256, rå ICC-metadata og DPart-side- og mottakerposttellere
Hver PDF-del klassifiseres først med ValidatePdfVTCompliance; kun-PDF/X gjenbrukbare vedlegg forblir gyldige referansemål, men ekskluderes fra PDF/VT-hierarki- og utskriftsbetingelsessammenligninger
Profilpakkingen følger filbasisen: PDF/VT-1 med PDF/X-4 og PDF/VT-2 med PDF/X-5g bruker en innebygd DestOutputProfile, mens PDF/VT-2 med PDF/X-4p eller PDF/X-5pg bruker DestOutputProfileRef løst til en tidligere ICC MIME-del
| Value | MIME role |
|---|---|
vtckInlinePdf | Et PDF/VT-dokument båret som en innebygd application/pdf-del; minst én kreves |
vtckAttachmentPdf | En gjenbrukbar PDF-innholdsdel referert av det innebygde dokumentet, båret som et attachment med et filnavn |
vtckIccProfile | En ICC-profildel (application/vnd.iccprofile) levert som et vedlegg med et filnavn |
| Type | Purpose |
|---|---|
TPdfVT2sChunks | Dynamisk array av ordnede MIME-deler levert til BuildPdfVT2sStream |
TAnsiStrings | Dynamisk filnavnarray brukt ved validering av eksterne filreferanser i det innebygde PDF-dokumentet |
TPdfVT2sValidationIssues | Mengde av TPdfVT2sValidationIssue-funn returnert av valideringen |
TPdfVTPrintingConditionSource | Opprinnelsen til profilbeviset: vtpcsNone når uløst, vtpcsEmbeddedProfile for en innebygd DestOutputProfile-strøm, vtpcsMimeProfile for en DestOutputProfileRef løst fra en ICC MIME-del |
TPdfVTPrintingConditionEvidence | Per del: PDF/VT- og PDF/X-klassifisering, OutputIntent, profilkilde, identitet, digest, ICC-header og DPart-fakta |
TPdfVT2sValidationReport | Detaljert resultat returnert av InspectPdfVT2sStream uten å endre det tidligere resultatoppsettet |
| Value | Reported when |
|---|---|
vtmviNotMultipart | Strømmen er ikke en multipart MIME-beholder |
vtmviMissingStreamVersion | Den påkrevde PDF/VT StreamVersion-headeren mangler |
vtmviStreamVersionValue | StreamVersion-verdien er ikke den forventede 1 |
vtmviStreamVersionAfterCt | StreamVersion vises etter Content-Type-linjen i stedet for før den |
vtmviMissingBoundary | Content-Type boundary-parameteren mangler |
vtmviNoInlinePdf | Ingen innebygd PDF/VT-del finnes |
vtmviInlinePdfNotPdfVT | Den innebygde delen er ikke deklarert som PDF/VT |
vtmviIccProfileBadDisposition | En ICC-profildel er ikke et vedlegg |
vtmviAttachmentMissingFilename | En vedleggsdel mangler det påkrevde filnavnet |
vtmviInlineHasFilename | Den innebygde PDF-delen bærer et filnavn, som ikke er tillatt |
vtmviNodeNameListMismatch | To PDF/VT-filer i strømmen eksponerer ulike NodeNameList-verdier |
vtmviRecordLevelMismatch | DPart-postnivåer er inkonsistente på tvers av beholderen |
vtmviForwardReference | Et vedlegg refereres før det vises i strømmen |
vtmviBoundaryInvalidChar | Grensestrengen inneholder tegn som ikke tillates av RFC 2046 |
vtmviDuplicateFilename | To MIME-vedlegg eksponerer det samme filnavnet, med skille på store og små bokstaver |
vtmviOutputIntentAmbiguous | En PDF-del har null eller flere autoritative GTS_PDFX OutputIntents |
vtmviOutputProfilePackagingMismatch | OutputIntenten har begge profilformene, ingen av formene, eller en form som er uforenlig med PDF/X-4-, PDF/X-4p-, PDF/X-5g- eller PDF/X-5pg-basisen |
vtmviOutputProfileReferenceInvalid | En DestOutputProfileRef utelater påkrevd metadata eller en URL-filspesifikasjon, eller bruker en forbudt ColorantTable |
vtmviReferencedPartWrongType | Det refererte filnavnet løses til en MIME-del som ikke er en ICC-profil |
vtmviIccProfileInvalid | ICC-headeren, deklarert størrelse, signatur, tag-tabell eller støttet prosessfargerom er ugyldig |
vtmviIccChecksumMismatch | Den dekodede 16-byte CheckSum avviker fra MD5 av hele ICC-filen |
vtmviIccVersionMismatch | De deklarerte fire ICCVersion-bytene avviker fra ICC-header-bytene 8 til 11 |
vtmviIccColorSpaceMismatch | ProfileCS avviker fra ICC-header-bytene 16 til 19, eller er ikke GRAY, RGB eller CMYK |
vtmviIccProfileNameMismatch | ProfileName matcher ingen gyldig profileDescriptionTag-locale-verdi |
vtmviPrintingConditionUnresolved | Den autoritative OutputIntenten, identifikatoren eller den eksterne ICC-avhengigheten kan ikke løses |
vtmviPrintingConditionMismatch | PDF/VT-deler er uenige om OutputConditionIdentifier, RegistryName-tilstedeværelse eller verdi, eller prosessfargerom |
vtmviIccDeviceClassMismatch | En innebygd eller ekstern målsprofil er ikke en utdataenhets-prtr-profil |
ValidatePdfVT2sStream på enhver strøm produsert i round-trip-testing av BuildPdfVT2sStream, eller på eksternt forfattede PDF/VT-2s-beholdere før behandlingTPdfVT2sValidationResult.IsCompliant returnerer True bare når Issues-mengden er tom
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;