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 PDF/VT-2s prenos definisan u aneksu ISO 16612-2, gde se PDF/VT dokument plus referencirani višekratno upotrebljivi PDF sadržaj i ICC profil pakuju kao jedan MIME multipart tok
Za razliku od putanje TPdf.SaveAsPdfVT koja upisuje samostalni PDF/VT-1 fajl, ova jedinica radi čisto nad tokovima bajtova i nikada ne učitava pdfium.dll, pa može da radi na headless serverima i u batch pipeline-ovima
BuildPdfVT2sStream sklada delove po redosledu i emituje StreamVersion zagavlje, granice delova i Content-Type / Content-Disposition zagavlja po delu; ValidatePdfVT2sStream parsira postojeći tok nazad i prijavljuje strukturna, printing-condition i ICC odstupanja kao tipiziran skup problema
InspectPdfVT2sStream vraća isti rezultat kompatibilnosti plus dokaz za svaki PDF/VT deo, uključujući PDF/VT usklađenost, PDF/X osnovu, identitet OutputIntent-a, poreklo profila, MD5 i SHA-256, sirove ICC metapodatke i brojeve DPart stranica i zapisa primalaca
Svaki PDF deo se prvo klasifikuje sa ValidatePdfVTCompliance; samo PDF/X prilozi za višekratnu upotrebu ostaju podobni referentni ciljevi, ali su isključeni iz PDF/VT hijerarhije i poređenja uslova štampe
Pakovanje profila prati osnovu fajla: PDF/VT-1 sa PDF/X-4 i PDF/VT-2 sa PDF/X-5g koriste ugrađen DestOutputProfile, dok PDF/VT-2 sa PDF/X-4p ili PDF/X-5pg koristi DestOutputProfileRef razrešen na raniji ICC MIME deo
| Value | MIME role |
|---|---|
vtckInlinePdf | PDF/VT dokument nošen kao inline application/pdf deo; potreban je bar jedan |
vtckAttachmentPdf | Deo višekratno upotrebljivog PDF sadržaja na koji ukazuje inline dokument, nošen kao attachment sa imenom fajla |
vtckIccProfile | Deo ICC profila (application/vnd.iccprofile) dostavljen kao prilog sa imenom fajla |
| Type | Purpose |
|---|---|
TPdfVT2sChunks | Dinamički niz uređenih MIME delova dostavljenih funkciji BuildPdfVT2sStream |
TAnsiStrings | Dinamički niz imena fajlova koji se koristi pri validaciji referenci na spoljne fajlove u inline PDF-u |
TPdfVT2sValidationIssues | Skup nalaza TPdfVT2sValidationIssue koji validacija vraća |
TPdfVTPrintingConditionSource | Poreklo dokaza profila: vtpcsNone kada nije razrešeno, vtpcsEmbeddedProfile za ugrađeni DestOutputProfile tok, vtpcsMimeProfile za DestOutputProfileRef razrešen sa ICC MIME dela |
TPdfVTPrintingConditionEvidence | Klasifikacija PDF/VT i PDF/X po delu, OutputIntent, izvor profila, identitet, sažetak, ICC zagavlje i DPart činjenice |
TPdfVT2sValidationReport | Detaljan rezultat koji vraća InspectPdfVT2sStream bez menjanja rasporeda zastarelog rezultata |
| Value | Reported when |
|---|---|
vtmviNotMultipart | Tok nije multipart MIME kontejner |
vtmviMissingStreamVersion | Obavezno PDF/VT StreamVersion zagavlje nedostaje |
vtmviStreamVersionValue | StreamVersion vrednost nije očekivana 1 |
vtmviStreamVersionAfterCt | StreamVersion se pojavljuje posle linije Content-Type umesto pre nje |
vtmviMissingBoundary | Parametar boundary u Content-Type nedostaje |
vtmviNoInlinePdf | Nijedan inline PDF/VT deo nije prisutan |
vtmviInlinePdfNotPdfVT | Inline deo nije deklarisan kao PDF/VT |
vtmviIccProfileBadDisposition | Deo ICC profila nije prilog |
vtmviAttachmentMissingFilename | Deo priloga nema obavezno ime fajla |
vtmviInlineHasFilename | Inline PDF deo nosi ime fajla, što nije dozvoljeno |
vtmviNodeNameListMismatch | Dva PDF/VT fajla u toku izlažu različite NodeNameList vrednosti |
vtmviRecordLevelMismatch | DPart nivoi zapisa nekonzistentni kroz kontejner |
vtmviForwardReference | Na prilog se ukazuje pre nego što se pojavi u toku |
vtmviBoundaryInvalidChar | Boundary string sadrži znakove koje RFC 2046 ne dozvoljava |
vtmviDuplicateFilename | Dva MIME priloga izlažu isto ime fajla razlikujući velika i mala slova |
vtmviOutputIntentAmbiguous | PDF deo ima nijedan ili više autoritativnih GTS_PDFX OutputIntent-a |
vtmviOutputProfilePackagingMismatch | OutputIntent ima oba oblika profila, nijedan oblik ili oblik nesaglasan sa PDF/X-4, PDF/X-4p, PDF/X-5g ili PDF/X-5pg osnovom |
vtmviOutputProfileReferenceInvalid | DestOutputProfileRef izostavlja obavezne metapodatke, specifikaciju URL fajla ili koristi zabranjeni ColorantTable |
vtmviReferencedPartWrongType | Referencirano ime fajla se razrešava na MIME deo koji nije ICC profil |
vtmviIccProfileInvalid | ICC zagavlje, deklarisana veličina, potpis, tabela tagova ili podržani prostor procesnih boja je nevalidan |
vtmviIccChecksumMismatch | Dekodovana 16-bajtna CheckSum vrednost razlikuje se od MD5 kompletnog ICC fajla |
vtmviIccVersionMismatch | Deklarisana četiri ICCVersion bajta razlikuju se od bajtova 8 do 11 ICC zagavlja |
vtmviIccColorSpaceMismatch | ProfileCS se razlikuje od bajtova 16 do 19 ICC zagavlja ili nije GRAY, RGB ili CMYK |
vtmviIccProfileNameMismatch | ProfileName se ne poklapa ni sa jednom validnom locale vrednošću profileDescriptionTag |
vtmviPrintingConditionUnresolved | Autoritativni OutputIntent, identifikator ili spoljna ICC zavisnost ne mogu da se razreše |
vtmviPrintingConditionMismatch | PDF/VT delovi se ne slažu oko OutputConditionIdentifier, prisustva ili vrednosti RegistryName ili prostora procesnih boja |
vtmviIccDeviceClassMismatch | Ugrađeni ili spoljni odredišni profil nije prtr profil izlaznog uređaja |
ValidatePdfVT2sStream nad bilo kojim tokom koji proizvede BuildPdfVT2sStream u round-trip testiranju, ili nad spolja autorovanim PDF/VT-2s kontejnerima pre obradeTPdfVT2sValidationResult.IsCompliant vraća True samo kada je skup Issues prazan
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;