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;
Az FPdfPdfvtMime megvalósítja az ISO 16612-2 mellékletben definiált PDF/VT-2s átvitelt, amelyben egy PDF/VT dokumentum, annak hivatkozott újrafelhasználható PDF-tartalma és ICC profilja egyetlen MIME multipart folyamként csomagolódik
Az önálló PDF/VT-1 fájlt író TPdf.SaveAsPdfVT útvonallal ellentétben ez az egység kizárólag bájtfolyamokon dolgozik, és soha nem tölti be a pdfium.dll-t, így fejnélküli szerverekben és kötegelt folyamatokban is futtatható
A BuildPdfVT2sStream sorrendben fűzi össze a darabokat, és kiadja a StreamVersion fejlécet, a darabhatárokat és a darabonkénti Content-Type / Content-Disposition fejléceket; a ValidatePdfVT2sStream egy meglévő folyamot visszaparszol, és a szerkezeti, nyomtatási feltétel- és ICC-eltéréseket típusos hibakészletként jelenti
Az InspectPdfVT2sStream ugyanezt a kompatibilitási eredményt adja vissza, emellett minden PDF/VT darabhoz bizonyítékot szolgáltat: PDF/VT megfelelőséget, PDF/X alapot, OutputIntent azonosságot, profil eredetet, MD5-öt és SHA-256-ot, nyers ICC metaadatokat és DPart oldal- és címzettrekord-számokat
Minden PDF darabot először a ValidatePdfVTCompliance sorol be; a kizárólag PDF/X-es újrafelhasználható mellékletek érvényes hivatkozási célpontok maradnak, de kizárásra kerülnek a PDF/VT hierarchiából és a nyomtatási feltétel-összehasonlításokból
A profilcsomagolás a fájlalapot követi: a PDF/X-4-gyel párosított PDF/VT-1 és a PDF/X-5g-vel párosított PDF/VT-2 beágyazott DestOutputProfile-t használ, míg a PDF/X-4p-vel vagy PDF/X-5pg-vel párosított PDF/VT-2 DestOutputProfileRef hivatkozást, amely egy korábbi ICC MIME darabra oldódik fel
| Value | MIME role |
|---|---|
vtckInlinePdf | Beágyazott application/pdf darabként hordozott PDF/VT dokumentum; legalább egy szükséges |
vtckAttachmentPdf | A beágyazott dokumentum által hivatkozott újrafelhasználható PDF-tartalom, amely fájlnévvel ellátott attachment darabként utazik |
vtckIccProfile | ICC profil darab (application/vnd.iccprofile), amely fájlnévvel ellátott mellékletként adódik át |
| Type | Purpose |
|---|---|
TPdfVT2sChunks | Rendezett MIME darabok dinamikus tömbje, amelyet a BuildPdfVT2sStream vesz át |
TAnsiStrings | Dinamikus fájlnévtömb, amelyet a beágyazott PDF külső fájlhivatkozásainak ellenőrzésekor használnak |
TPdfVT2sValidationIssues | Az ellenőrzés által visszaadott TPdfVT2sValidationIssue megállapítások halmaza |
TPdfVTPrintingConditionSource | A profilbizonyíték eredete: vtpcsNone, ha feloldatlan, vtpcsEmbeddedProfile beágyazott DestOutputProfile folyam esetén, vtpcsMimeProfile pedig ICC MIME darabra feloldódó DestOutputProfileRef esetén |
TPdfVTPrintingConditionEvidence | Darabonkénti PDF/VT- és PDF/X besorolás, OutputIntent, profilforrás, azonosság, kivonat, ICC fejléc és DPart tények |
TPdfVT2sValidationReport | Részletes eredmény, amelyet az InspectPdfVT2sStream ad vissza a régi eredményelrendezés változatlanul hagyásával |
| Value | Reported when |
|---|---|
vtmviNotMultipart | A folyam nem multipart MIME tároló |
vtmviMissingStreamVersion | A megkövetelt PDF/VT StreamVersion fejléc hiányzik |
vtmviStreamVersionValue | A StreamVersion értéke nem a várt 1 |
vtmviStreamVersionAfterCt | A StreamVersion a Content-Type sor után áll, nem előtte |
vtmviMissingBoundary | A Content-Type boundary paramétere hiányzik |
vtmviNoInlinePdf | Nincs jelen beágyazott PDF/VT darab |
vtmviInlinePdfNotPdfVT | A beágyazott darab nem PDF/VT-ként van deklarálva |
vtmviIccProfileBadDisposition | Egy ICC profil darab nem melléklet |
vtmviAttachmentMissingFilename | Egy mellékletdarabból hiányzik a megkövetelt fájlnév |
vtmviInlineHasFilename | A beágyazott PDF darab fájlnevet hordoz, ami nem megengedett |
vtmviNodeNameListMismatch | A folyam két PDF/VT fájlja eltérő NodeNameList értékeket mutat |
vtmviRecordLevelMismatch | A DPart rekordszintek a tárolón belül inkonzisztensek |
vtmviForwardReference | Egy mellékletre még azelőtt hivatkoznak, hogy megjelennne a folyamban |
vtmviBoundaryInvalidChar | A boundary sztring az RFC 2046 által nem megengedett karaktereket tartalmaz |
vtmviDuplicateFilename | Két MIME melléklet ugyanazt, kis-/nagybetű-érzékeny fájlnevet mutatja |
vtmviOutputIntentAmbiguous | Egy PDF darabhoz nulla vagy több autoritatív GTS_PDFX OutputIntent tartozik |
vtmviOutputProfilePackagingMismatch | Az OutputIntent mindkét profilformát hordozza, egyiket sem, vagy a PDF/X-4, PDF/X-4p, PDF/X-5g vagy PDF/X-5pg alappal nem összeegyeztethető formát |
vtmviOutputProfileReferenceInvalid | Egy DestOutputProfileRef kihagyja a megkövetelt metaadatot vagy URL fájlleírást, vagy tiltott ColorantTable-t használ |
vtmviReferencedPartWrongType | A hivatkozott fájlnév olyan MIME darabra oldódik fel, amely nem ICC profil |
vtmviIccProfileInvalid | Az ICC fejléc, a deklarált méret, az aláírás, a tagtábla vagy a támogatott processzszíntér érvénytelen |
vtmviIccChecksumMismatch | A dekódolt 16 bájtos CheckSum eltér a teljes ICC fájl MD5-étől |
vtmviIccVersionMismatch | A deklarált négy ICCVersion bájt eltér az ICC fejléc 8-11. bájtjaitólól |
vtmviIccColorSpaceMismatch | A ProfileCS eltér az ICC fejléc 16-19. bájtjaitól, vagy nem GRAY, RGB illetve CMYK |
vtmviIccProfileNameMismatch | A ProfileName egyetlen érvényes profileDescriptionTag területi értékkel sem egyezik |
vtmviPrintingConditionUnresolved | Az autoritatív OutputIntent, az azonosító vagy a külső ICC függőség nem oldható fel |
vtmviPrintingConditionMismatch | A PDF/VT darabok eltérnek az OutputConditionIdentifier-ben, a RegistryName jelenlétében vagy értékében, illetve a processzszíntérben |
vtmviIccDeviceClassMismatch | A beágyazott vagy külső célprofil nem kimeneti eszköz prtr profil |
ValidatePdfVT2sStream hívást minden, BuildPdfVT2sStream által előállított folyamra oda-vissza teszteléshez, valamint külsőleg készített PDF/VT-2s tárolókon feldolgozás előttTPdfVT2sValidationResult.IsCompliant csak akkor ad vissza True értéket, ha az Issues halmaz üres
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;