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 realizuoja ISO 16612-2 priede apibrėžtą PDF/VT-2s transportą, kai PDF/VT dokumentas kartu su juo cituojamu pakartotinai naudojamu PDF turiniu ir ICC profiliu supakuojami į vieną MIME multipart srautą
Skirtingai nuo TPdf.SaveAsPdfVT kelio, rašančio savarankišką PDF/VT-1 failą, šis modulis dirba vien su baitų srautais ir niekada neįkelia pdfium.dll, todėl gali veikti be sąsajos veikiančiuose serveriuose ir paketinėse grandinėse
BuildPdfVT2sStream sudaro gabalus tvarka ir išveda StreamVersion antraštę, dalių ribas ir kiekvienos dalies Content-Type / Content-Disposition antraštes; ValidatePdfVT2sStream vėl išanalizuoja esamą srautą ir struktūrinius, spausdinimo sąlygų bei ICC nukrypimus praneša tipizuota problemų aibe
InspectPdfVT2sStream grąžina tą patį suderinamumo rezultatą plus kiekvienos PDF/VT dalies įrodymus, įskaitant PDF/VT atitiktį, PDF/X pagrindą, OutputIntent tapatybę, profilio kilmę, MD5 ir SHA-256, žalius ICC metaduomenis ir DPart puslapių bei gavėjų įrašų skaičius
Kiekviena PDF dalis pirmiausia klasifikuojama per ValidatePdfVTCompliance; tik PDF/X paremti pakartotinai naudojami priedai lieka tinkamais cituojamais tikslais, bet išbraukiami iš PDF/VT hierarchijos ir spausdinimo sąlygų palyginimų
Profilio pakuotė seka failo pagrindu: PDF/VT-1 su PDF/X-4 ir PDF/VT-2 su PDF/X-5g naudoja vidinį DestOutputProfile, o PDF/VT-2 su PDF/X-4p arba PDF/X-5pg naudoja DestOutputProfileRef, išspręstą iki ankstesnės ICC MIME dalies
| Reikšmė | MIME vaidmuo |
|---|---|
vtckInlinePdf | PDF/VT dokumentas, nešamas kaip vidinė application/pdf dalis; reikalinga bent viena |
vtckAttachmentPdf | Pakartotinai naudojama PDF turinio dalis, kurią cituoja vidinis dokumentas, nešama kaip attachment su failo vardu |
vtckIccProfile | ICC profilio dalis (application/vnd.iccprofile), pateikiama kaip priedas su failo vardu |
| Tipas | Paskirtis |
|---|---|
TPdfVT2sChunks | Dinaminis surikiuotų MIME gabalų masyvas, pateikiamas BuildPdfVT2sStream |
TAnsiStrings | Dinaminis failo vardų masyvas, naudojamas tikrinant vidiniame PDF cituojamas išorinių failų nuorodas |
TPdfVT2sValidationIssues | TPdfVT2sValidationIssue radinių aibė, kurią grąžina tikrinimas |
TPdfVTPrintingConditionSource | Profilio įrodymų kilmė: vtpcsNone, kai neišspręsta, vtpcsEmbeddedProfile vidiniam DestOutputProfile srautui, vtpcsMimeProfile DestOutputProfileRef, išspręstam iš ICC MIME dalies |
TPdfVTPrintingConditionEvidence | Dalies PDF/VT ir PDF/X klasifikacija, OutputIntent, profilio šaltinis, tapatybė, santrauka, ICC antraštė ir DPart faktai |
TPdfVT2sValidationReport | Išsamus rezultatas, grąžinamas InspectPdfVT2sStream nekeičiant senojo rezultato išdėstymo |
| Reikšmė | Pranešama kai |
|---|---|
vtmviNotMultipart | Srautas nėra multipart MIME konteineris |
vtmviMissingStreamVersion | Trūksta būtinos PDF/VT StreamVersion antraštės |
vtmviStreamVersionValue | StreamVersion reikšmė nėra tikėtinoji 1 |
vtmviStreamVersionAfterCt | StreamVersion atsiranda po Content-Type eilutės, o ne prieš ją |
vtmviMissingBoundary | Trūksta Content-Type boundary parametro |
vtmviNoInlinePdf | Nėra jokios vidinės PDF/VT dalies |
vtmviInlinePdfNotPdfVT | Vidinė dalis nedeklaruojama kaip PDF/VT |
vtmviIccProfileBadDisposition | ICC profilio dalis nėra priedas |
vtmviAttachmentMissingFilename | Priedo daliai trūksta būtino failo vardo |
vtmviInlineHasFilename | Vidinė PDF dalis neša failo vardą, ko neleidžiama |
vtmviNodeNameListMismatch | Du sraute esantys PDF/VT failai atskleidžia skirtingas NodeNameList reikšmes |
vtmviRecordLevelMismatch | DPart įrašų lygiai konteineryje nenuoseklūs |
vtmviForwardReference | Priedas cituojamas anksčiau, nei jis pasirodo sraute |
vtmviBoundaryInvalidChar | Boundary eilutė turi simbolių, kurių neleidžia RFC 2046 |
vtmviDuplicateFilename | Du MIME priedai atskleidžia tą patį raidžių dydį skiriantį failo vardą |
vtmviOutputIntentAmbiguous | PDF dalis turi nulinį arba kelis autoritetingus GTS_PDFX OutputIntent |
vtmviOutputProfilePackagingMismatch | OutputIntent turi abi profilio formas, nė vienos formos arba formą, nesuderinamą su PDF/X-4, PDF/X-4p, PDF/X-5g arba PDF/X-5pg pagrindu |
vtmviOutputProfileReferenceInvalid | DestOutputProfileRef praleidžia būtinus metaduomenis, URL failo specifikaciją arba naudoja draudžiamą ColorantTable |
vtmviReferencedPartWrongType | Cituojamas failo vardas išsprendžia iki MIME dalies, kuri nėra ICC profilis |
vtmviIccProfileInvalid | ICC antraštė, deklaruotasis dydis, parašas, žymų lentelė arba palaikoma proceso spalvų erdvė netinkama |
vtmviIccChecksumMismatch | Dekoduota 16 baitų CheckSum skiriasi nuo pilno ICC failo MD5 |
vtmviIccVersionMismatch | Deklaruotieji keturi ICCVersion baitai skiriasi nuo ICC antraštės 8-11 baitų |
vtmviIccColorSpaceMismatch | ProfileCS skiriasi nuo ICC antraštės 16-19 baitų arba nėra GRAY, RGB arba CMYK |
vtmviIccProfileNameMismatch | ProfileName neatitinka jokios tinkamos profileDescriptionTag lokalės reikšmės |
vtmviPrintingConditionUnresolved | Autoritetingojo OutputIntent, identifikatoriaus arba išorinės ICC priklausomybės išspręsti nepavyksta |
vtmviPrintingConditionMismatch | PDF/VT dalys nesutaria dėl OutputConditionIdentifier, RegistryName buvimo arba reikšmės arba proceso spalvų erdvės |
vtmviIccDeviceClassMismatch | Vidinis arba išorinis paskirties profilis nėra išvesties įrenginio prtr profilis |
ValidatePdfVT2sStream kvieskite bet kuriems BuildPdfVT2sStream pagamintiems apvalios kelionės tikrinimo srautams arba išoriniams PDF/VT-2s konteineriams prieš apdorojimąTPdfVT2sValidationResult.IsCompliant grąžina True tik tada, kai Issues aibė tuščia
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;