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 transport definiran u prilogu ISO 16612-2, u kojem se PDF/VT dokument zajedno s referenciranim višekratno upotrebljivim PDF sadržajem i ICC profilom pakira u jedan MIME višedijelni tok
Za razliku od putanje TPdf.SaveAsPdfVT koja piše samostalnu PDF/VT-1 datoteku, ova jedinica radi isključivo nad bajtovnim tokovima i nikad ne učitava pdfium.dll, pa može raditi na poslužiteljima bez sučelja i u batch pipelineovima
BuildPdfVT2sStream sastavlja dijelove po redoslijedu i ispisuje zaglavlje StreamVersion, granice dijelova i zaglavlja Content-Type / Content-Disposition po dijelu; ValidatePdfVT2sStream ponovno raščlanjuje postojeći tok i strukturne odstupanja, odstupanja uvjeta tiskanja i ICC odstupanja izvještava kao tipizirani skup problema
InspectPdfVT2sStream vraća isti rezultat kompatibilnosti plus dokaze za svaki PDF/VT dio, uključujući PDF/VT usklađenost, PDF/X osnovu, identitet OutputIntenta, podrijetlo profila, MD5 i SHA-256, sirove ICC metapodatke te brojeve stranica i zapisa primatelja DParta
Svaki PDF dio prvo se razvrstava s ValidatePdfVTCompliance; višekratno upotrebljivi prilozi samo-PDF/X ostaju podobni referentni ciljevi, ali isključeni su iz PDF/VT hijerarhije i usporebi uvjeta tiskanja
Pakiranje profila slijedi osnovu datoteke: PDF/VT-1 s PDF/X-4 i PDF/VT-2 s PDF/X-5g koriste umetnuti DestOutputProfile, dok PDF/VT-2 s PDF/X-4p ili PDF/X-5pg koristi DestOutputProfileRef razriješen na raniji ICC MIME dio
| Vrijednost | MIME uloga |
|---|---|
vtckInlinePdf | PDF/VT dokument nošen kao umetnuti dio application/pdf; barem jedan je obavezan |
vtckAttachmentPdf | Dio višekratno upotrebljivog PDF sadržaja na koji se poziva umetnuti dokument, nošen kao attachment s nazivom datoteke |
vtckIccProfile | Dio ICC profila (application/vnd.iccprofile) isporučen kao privitak s nazivom datoteke |
| Tip | Svrha |
|---|---|
TPdfVT2sChunks | Dinamičko polje poredanih MIME chunkova koje prima BuildPdfVT2sStream |
TAnsiStrings | Dinamičko polje naziva datoteka koje se koristi pri provjeri referenci vanjskih datoteka u umetnutom PDF-u |
TPdfVT2sValidationIssues | Skup nalaza TPdfVT2sValidationIssue koje vraća provjera |
TPdfVTPrintingConditionSource | Podrijetlo dokaza profila: vtpcsNone kada nije razriješeno, vtpcsEmbeddedProfile za umetnuti tok DestOutputProfile, vtpcsMimeProfile za DestOutputProfileRef razriješen s ICC MIME dijela |
TPdfVTPrintingConditionEvidence | Razvrstavanje PDF/VT i PDF/X po dijelu, OutputIntent, izvor profila, identitet, sažetak, ICC zaglavlje i činjenice DPart |
TPdfVT2sValidationReport | Detaljni rezultat koji vraća InspectPdfVT2sStream bez mijenjanja zastarjelog rasporeda rezultata |
| Vrijednost | Prijavljuje se kada |
|---|---|
vtmviNotMultipart | Tok nije višedijelni MIME spremnik |
vtmviMissingStreamVersion | Zaglavlje obaveznog PDF/VT StreamVersion nedostaje |
vtmviStreamVersionValue | Vrijednost StreamVersion nije očekivana 1 |
vtmviStreamVersionAfterCt | StreamVersion se pojavljuje iza retka Content-Type umjesto ispred njega |
vtmviMissingBoundary | Nedostaje parametar boundary zaglavlja Content-Type |
vtmviNoInlinePdf | Nema umetnutog PDF/VT dijela |
vtmviInlinePdfNotPdfVT | Umetnuti dio nije deklariran kao PDF/VT |
vtmviIccProfileBadDisposition | Dio ICC profila nije privitak |
vtmviAttachmentMissingFilename | Dio privitka nema obavezni naziv datoteke |
vtmviInlineHasFilename | Umetnuti PDF dio nosi naziv datoteke, što nije dopušteno |
vtmviNodeNameListMismatch | Dvije PDF/VT datoteke u toku izlažu različite vrijednosti NodeNameList |
vtmviRecordLevelMismatch | Razine zapisa DPart nedosljedne su kroz spremnik |
vtmviForwardReference | Na privitak se poziva prije nego što se pojavi u toku |
vtmviBoundaryInvalidChar | Niz boundary sadrži znakove koje RFC 2046 ne dopušta |
vtmviDuplicateFilename | Dva MIME privitka izlažu isti naziv datoteke, uz razlikovanje velikih i malih slova |
vtmviOutputIntentAmbiguous | PDF dio ima nula ili više autoritativnih OutputIntenta GTS_PDFX |
vtmviOutputProfilePackagingMismatch | OutputIntent ima oba oblika profila, nijedan oblik ili oblik nekompatibilan s PDF/X-4, PDF/X-4p, PDF/X-5g ili PDF/X-5pg osnovom |
vtmviOutputProfileReferenceInvalid | DestOutputProfileRef izostavlja potrebne metapodatke, specifikaciju URL datoteke ili koristi zabranjeni ColorantTable |
vtmviReferencedPartWrongType | Naziv referencirane datoteke razrješuje se na MIME dio koji nije ICC profil |
vtmviIccProfileInvalid | ICC zaglavlje, deklarirana veličina, potpis, tablica oznaka ili podržani prostor procesnih boja nevažeći je |
vtmviIccChecksumMismatch | Dekodirana 16-bajtna provjera CheckSum razlikuje se od MD5 potpune ICC datoteke |
vtmviIccVersionMismatch | Deklarirana četiri bajta ICCVersion razlikuju se od bajtova 8 do 11 ICC zaglavlja |
vtmviIccColorSpaceMismatch | ProfileCS razlikuje se od bajtova 16 do 19 ICC zaglavlja ili nije GRAY, RGB ni CMYK |
vtmviIccProfileNameMismatch | ProfileName ne poklapa nijednu valjanu locale vrijednost profileDescriptionTag |
vtmviPrintingConditionUnresolved | Autoritativni OutputIntent, identifikator ili vanjska ICC ovisnost ne mogu se razriješiti |
vtmviPrintingConditionMismatch | PDF/VT dijelovi se ne slažu oko OutputConditionIdentifier, prisutnosti ili vrijednosti RegistryName ili prostora procesnih boja |
vtmviIccDeviceClassMismatch | Umetnuti ili vanjski odredišni profil nije profil izlaznog uređaja prtr |
ValidatePdfVT2sStream pozovite na bilo koji tok koji je proizveo BuildPdfVT2sStream u testovima povratnog puta, ili na vanjski stvorene PDF/VT-2s spremnike prije 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;