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 toteuttaa ISO 16612-2:n liitteessä määritetyn PDF/VT-2s-siirron, jossa PDF/VT-dokumentti sekä sen viittaama uudelleenkäytettävä PDF-sisältö ja ICC-profiili paketoidaan yhdeksi MIME multipart -virraksi
Toisin kuin TPdf.SaveAsPdfVT-polku, joka kirjoittaa erillisen PDF/VT-1-tiedoston, tämä yksikkö toimii puhtaasti tavuvirroilla eikä koskaan lataa pdfium.dll:iä, joten se voi toimia headless-palvelimissa ja eräajojen putkissa
BuildPdfVT2sStream kokoaa osat järjestyksessä ja tuottaa StreamVersion-otsikon, osarajat ja osakohtaiset Content Type / Content Disposition -otsikot; ValidatePdfVT2sStream jäsentää olemassa olevan virran takaisin ja raportoi rakenteelliset, tulostusehto- ja ICC-poikkeamat tyypitettynä ongelmajoukkona
InspectPdfVT2sStream palauttaa saman yhteensopivuustuloksen sekä todisteet jokaiselle PDF/VT-osalle, mukaan lukien PDF/VT-vaatimustenmukaisuus, PDF/X-perusta, OutputIntent-tunniste, profiilin alkuperä, MD5 ja SHA-256, raaka ICC-metatieto sekä DPart-sivu- ja vastaanottajatietomäärät
Jokainen PDF-osa luokitellaan ensin ValidatePdfVTCompliance-kutsulla; pelkät PDF/X-uudelleenkäytettävät liitteet säilyttävät kelvan viittauskohteina, mutta ne jätetään pois PDF/VT-hierarkiasta ja tulostusehtojen vertailuista
Profiilin paketointi noudattaa tiedoston perustaa: PDF/VT-1 PDF/X-4:n kanssa ja PDF/VT-2 PDF/X-5g:n kanssa käyttävät sisäistä DestOutputProfile:a, kun taas PDF/VT-2 PDF/X-4p:n tai PDF/X-5pg:n kanssa käyttää DestOutputProfileRef:ää, joka ratkaistaan aiempaan ICC MIME -osaan
| Value | MIME role |
|---|---|
vtckInlinePdf | PDF/VT-dokumentti, joka kulkee inline-application/pdf-osana; vähintään yksi vaaditaan |
vtckAttachmentPdf | Uudelleenkäytettävä PDF-sisältöosa, johon inline-dokumentti viittaa, kuljetetaan attachment-osana tiedostonimellä |
vtckIccProfile | ICC-profiiliosa (application/vnd.iccprofile), joka toimitetaan liitteenä tiedostonimellä |
| Type | Purpose |
|---|---|
TPdfVT2sChunks | Dynaaminen järjestettyjen MIME-osien taulukko, joka toimitetaan BuildPdfVT2sStream-kutsulle |
TAnsiStrings | Dynaaminen tiedostonimitaulukko, jota käytetään inline-PDF:n ulkoisten tiedostoviittausten validoinnissa |
TPdfVT2sValidationIssues | Validoinnin palauttama TPdfVT2sValidationIssue-löydösten joukko |
TPdfVTPrintingConditionSource | Profiilitodisteen alkuperä: vtpcsNone, kun ratkaisematon, vtpcsEmbeddedProfile sisäiselle DestOutputProfile-virralle, vtpcsMimeProfile ICC MIME -osasta ratkaistulle DestOutputProfileRef:lle |
TPdfVTPrintingConditionEvidence | Osakohtainen PDF/VT- ja PDF/X-luokittelu, OutputIntent, profiilin lähde, identiteetti, tiiviste, ICC-otsikko ja DPart-tiedot |
TPdfVT2sValidationReport | Yksityiskohtainen tulos, jonka InspectPdfVT2sStream palauttaa muuttamatta vanhaa tulosrakennetta |
| Value | Reported when |
|---|---|
vtmviNotMultipart | Virta ei ole moniosainen MIME-kontti |
vtmviMissingStreamVersion | Vaadittu PDF/VT StreamVersion -otsikko puuttuu |
vtmviStreamVersionValue | StreamVersion-arvo ei ole odotettu 1 |
vtmviStreamVersionAfterCt | StreamVersion esiintyy Content-Type-rivin jälkeen eikä ennen sitä |
vtmviMissingBoundary | Content-Type-rivin boundary-parametri puuttuu |
vtmviNoInlinePdf | Yhtään inline-PDF/VT-osaa ei ole läsnä |
vtmviInlinePdfNotPdfVT | Inline-osaa ei ole ilmoitettu PDF/VT-muodoksi |
vtmviIccProfileBadDisposition | ICC-profiiliosa ei ole liite |
vtmviAttachmentMissingFilename | Liiteosalta puuttuu vaadittu tiedostonimi |
vtmviInlineHasFilename | Inline-PDF-osa kantaa tiedostonimeä, mikä ei ole sallittua |
vtmviNodeNameListMismatch | Kaksi virran PDF/VT-tiedostoa näyttää eri NodeNameList-arvot |
vtmviRecordLevelMismatch | DPart-tietotasot ovat ristiriitaisia kontin läpi |
vtmviForwardReference | Liitteeseen viitataan ennen kuin se esiintyy virrassa |
vtmviBoundaryInvalidChar | Boundary-merkkijono sisältää merkkejä, jotka RFC 2046 ei salli |
vtmviDuplicateFilename | Kaksi MIME-liitettä näyttää saman kirjainkokoriippuvan tiedostonimen |
vtmviOutputIntentAmbiguous | PDF-osalla on nolla tai useita auktoritatiivisia GTS_PDFX OutputIntent-määrityksiä |
vtmviOutputProfilePackagingMismatch | OutputIntentilla on molemmat profiilimuodot, kumpikaan muoto tai PDF/X-4-, PDF/X-4p-, PDF/X-5g- tai PDF/X-5pg-perustan kanssa yhteensopimaton muoto |
vtmviOutputProfileReferenceInvalid | DestOutputProfileRef jättää pois vaaditun metatiedon, URL-tiedostomäärityksen tai käyttää kiellettyä ColorantTable-taulukkoa |
vtmviReferencedPartWrongType | Viitattu tiedostonimi ratkeaa MIME-osaan, joka ei ole ICC-profiili |
vtmviIccProfileInvalid | ICC-otsikko, ilmoitettu koko, allekirjoitus, tagitaulukko tai tuettu prosessiväriavaruus on virheellinen |
vtmviIccChecksumMismatch | Purettu 16-tavuinen CheckSum eroaa täydellisen ICC-tiedoston MD5-arvosta |
vtmviIccVersionMismatch | Ilmoitetut neljä ICCVersion-tavua eroavat ICC-otsikon tavuista 8-11 |
vtmviIccColorSpaceMismatch | ProfileCS eroaa ICC-otsikon tavuista 16-19 tai ei ole GRAY, RGB tai CMYK |
vtmviIccProfileNameMismatch | ProfileName ei vastaa yhtään kelvollista profileDescriptionTag-lokaaliarvoa |
vtmviPrintingConditionUnresolved | Auktoritatiivista OutputIntentia, tunnistetta tai ulkoista ICC-riippuvuutta ei voi ratkaista |
vtmviPrintingConditionMismatch | PDF/VT-osat eroavat toisistaan OutputConditionIdentifierissä, RegistryName-n läsnäolossa tai arvossa tai prosessiväriavaruudessa |
vtmviIccDeviceClassMismatch | Sisäinen tai ulkoinen kohdeprofiili ei ole tulostelaitteen prtr-profiili |
ValidatePdfVT2sStream-funktiota mille tahansa BuildPdfVT2sStream-kutsun tuottamalle kierrostestausvirralle tai ulkoisesti laadituille PDF/VT-2s-konteille ennen käsittelyäTPdfVT2sValidationResult.IsCompliant palauttaa arvon True vain, kun Issues-joukko on tyhjä
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;