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 implementira prenos PDF/VT-2s, opredeljen v prilogi ISO 16612-2, kjer je dokument PDF/VT skupaj z navedeno ponovno uporabljivo vsebino PDF in profilom ICC zapakiran v en sam tok MIME multipart
Za razliko od poti TPdf.SaveAsPdfVT, ki zapiše samostojno datoteko PDF/VT-1, ta enota deluje izključno na bajtnih tokovih in nikoli ne naloži pdfium.dll, zato lahko teče v strežnikih brez uporabniškega vmesnika in v paketnih cevovodih
BuildPdfVT2sStream sestavi kose v vrstnem redu in izda glavo StreamVersion, meje delov ter glave Content-Type / Content-Disposition za vsak del; ValidatePdfVT2sStream obstoječi tok znova razčleni in odstopanja strukture, tiskalnih pogojev in ICC poroča kot tipizirano množico težav
InspectPdfVT2sStream vrne isti rezultat združljivosti plus dokaze za vsak del PDF/VT, vključno s skladnostjo PDF/VT, osnovo PDF/X, identiteto OutputIntent, poreklom profila, MD5 in SHA-256, surovimi metapodatki ICC ter števili strani in zapisov prejemnikov DPart
Vsak del PDF se najprej razvrsti s ValidatePdfVTCompliance; ponovno uporabljene priloge, ki so samo PDF/X, ostanejo upravičeni cilji sklicev, a so izključene iz hierarhije PDF/VT in primerjav tiskalnih pogojev
Pakiranje profila sledi osnovi datoteke: PDF/VT-1 s PDF/X-4 in PDF/VT-2 s PDF/X-5g uporabljajo vgrajen DestOutputProfile, PDF/VT-2 s PDF/X-4p ali PDF/X-5pg pa DestOutputProfileRef, razrešen na prejšnji MIME del ICC
| Value | MIME role |
|---|---|
vtckInlinePdf | Dokument PDF/VT, nošen kot vgrajen del application/pdf; potreben je vsaj en |
vtckAttachmentPdf | Ponovno uporabljiv del vsebine PDF, na katerega se sklicuje vgrajen dokument, nošen kot attachment z imenom datoteke |
vtckIccProfile | Del profila ICC (application/vnd.iccprofile), posredovan kot priloga z imenom datoteke |
| Type | Purpose |
|---|---|
TPdfVT2sChunks | Dinamično polje razvrščenih MIME kosov, posredovanih BuildPdfVT2sStream |
TAnsiStrings | Dinamično polje imen datotek, uporabljeno pri validaciji sklicev na zunanje datoteke v vgrajenem PDF |
TPdfVT2sValidationIssues | Množica ugotovitev TPdfVT2sValidationIssue, ki jo vrne validacija |
TPdfVTPrintingConditionSource | Izvor dokazov profila: vtpcsNone, ko ni razrešeno, vtpcsEmbeddedProfile za vgrajen tok DestOutputProfile, vtpcsMimeProfile za DestOutputProfileRef, razrešen iz MIME dela ICC |
TPdfVTPrintingConditionEvidence | Razvrstitev PDF/VT in PDF/X na del, OutputIntent, vir profila, identiteta, povzetek, glava ICC in podatki DPart |
TPdfVT2sValidationReport | Podroben rezultat, ki ga vrne InspectPdfVT2sStream, brez spreminjanja stare postavitve rezultata |
| Value | Reported when |
|---|---|
vtmviNotMultipart | Tok ni vsebnik MIME multipart |
vtmviMissingStreamVersion | Zahtevana glava PDF/VT StreamVersion manjka |
vtmviStreamVersionValue | Vrednost StreamVersion ni pričakovana 1 |
vtmviStreamVersionAfterCt | StreamVersion se pojavi za vrstico Content-Type namesto pred njo |
vtmviMissingBoundary | Parameter boundary v Content-Type manjka |
vtmviNoInlinePdf | Noben vgrajen del PDF/VT ni prisoten |
vtmviInlinePdfNotPdfVT | Vgrajeni del ni deklariran kot PDF/VT |
vtmviIccProfileBadDisposition | Del profila ICC ni priloga |
vtmviAttachmentMissingFilename | Delu priloge manjka zahtevano ime datoteke |
vtmviInlineHasFilename | Vgrajeni del PDF nosi ime datoteke, kar ni dovoljeno |
vtmviNodeNameListMismatch | Dve datoteki PDF/VT v toku izpostavljata različni vrednosti NodeNameList |
vtmviRecordLevelMismatch | Ravni zapisov DPart niso skladne po vsebniku |
vtmviForwardReference | Na prilogo se sklicujejo, preden se pojavi v toku |
vtmviBoundaryInvalidChar | Niz boundary vsebuje znake, ki jih RFC 2046 ne dovoljuje |
vtmviDuplicateFilename | Dve MIME prilogi izpostavljata isto ime datoteke, občutljivo na velikost črk |
vtmviOutputIntentAmbiguous | Del PDF ima nič ali več avtoritativnih OutputIntents GTS_PDFX |
vtmviOutputProfilePackagingMismatch | OutputIntent ima obe obliki profila, nobeno obliko ali obliko, neskladno z osnovo PDF/X-4, PDF/X-4p, PDF/X-5g ali PDF/X-5pg |
vtmviOutputProfileReferenceInvalid | DestOutputProfileRef izpusti zahtevane metapodatke, specifikacijo datoteke URL ali uporabi prepovedan ColorantTable |
vtmviReferencedPartWrongType | Navedeno ime datoteke se razreši v MIME del, ki ni profil ICC |
vtmviIccProfileInvalid | Glava ICC, deklarirana velikost, podpis, tabela oznak ali podprt procesni barvni prostor je neveljaven |
vtmviIccChecksumMismatch | Dekodirani 16-bajtni CheckSum se razlikuje od MD5 celotne datoteke ICC |
vtmviIccVersionMismatch | Deklarirani štirje bajti ICCVersion se razlikujejo od bajtov 8 do 11 glave ICC |
vtmviIccColorSpaceMismatch | ProfileCS se razlikuje od bajtov 16 do 19 glave ICC ali ni GRAY, RGB ali CMYK |
vtmviIccProfileNameMismatch | ProfileName ne ustreza nobeni veljavni vrednosti locale profileDescriptionTag |
vtmviPrintingConditionUnresolved | Avtoritativnega OutputIntent, identifikatorja ali zunanje odvisnosti ICC ni mogoče razrešiti |
vtmviPrintingConditionMismatch | Deli PDF/VT se ne strinjajo glede OutputConditionIdentifier, prisotnosti ali vrednosti RegistryName ali procesnega barvnega prostora |
vtmviIccDeviceClassMismatch | Vgrajen ali zunanji ciljni profil ni profil izhodne naprave prtr |
ValidatePdfVT2sStream na vsakem toku, izdelanem s preizkusom povratnega prenosa BuildPdfVT2sStream, ali na zunanjih vsebnikih PDF/VT-2s, preden jih obdelateTPdfVT2sValidationResult.IsCompliant vrne True le, ko je množica Issues prazna
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;