PDFium Component Docs

FPdfPdfvtMime Moduł

Unit: FPdfPdfvtMime
Buduje i waliduje strumienie części MIME pojedynczego pliku PDF/VT-2s, które przenoszą dokument PDF/VT inline, jego wielokrotnego użytku ładunek załącznika i profil ICC jako jeden kontener multipart

Syntax

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;

Description

FPdfPdfvtMime implementuje transport PDF/VT-2s zdefiniowany w załączniku ISO 16612-2, w którym dokument PDF/VT wraz z przywoływaną wielokrotnego użytku treścią PDF i profilem ICC jest pakowany jako pojedynczy strumień MIME multipart

W odróżnieniu od ścieżki TPdf.SaveAsPdfVT, która zapisuje samodzielny plik PDF/VT-1, ten moduł działa czysto na strumieniach bajtów i nigdy nie ładuje pdfium.dll, więc może działać na serwerach headless i w potokach wsadowych

BuildPdfVT2sStream składa kawałki w kolejności i emituje nagłówek StreamVersion, granice części oraz nagłówki Content-Type / Content-Disposition każdej części; ValidatePdfVT2sStream parsuje istniejący strumień z powrotem i raportuje odchylenia strukturalne, warunków drukowania i ICC jako typowany zbiór problemów

InspectPdfVT2sStream zwraca ten sam wynik zgodności plus dowody dla każdej części PDF/VT, w tym zgodność PDF/VT, bazę PDF/X, tożsamość OutputIntent, pochodzenie profilu, MD5 i SHA-256, surowe metadane ICC oraz liczniki stron DPart i rekordów adresatów

Każda część PDF jest najpierw klasyfikowana przez ValidatePdfVTCompliance; wielokrotnego użytku załączniki wyłącznie PDF/X pozostają kwalifikującymi się celami odwołań, ale są wykluczane z porównań hierarchii PDF/VT i warunków drukowania

Pakowanie profilu podąża za bazą pliku: PDF/VT-1 z PDF/X-4 oraz PDF/VT-2 z PDF/X-5g używają osadzonego DestOutputProfile, podczas gdy PDF/VT-2 z PDF/X-4p lub PDF/X-5pg używa DestOutputProfileRef rozwiązywanego do wcześniejszej części MIME z profilem ICC

Chunk kinds

ValueMIME role
vtckInlinePdfDokument PDF/VT przenoszony jako część application/pdf inline; wymagany jest co najmniej jeden
vtckAttachmentPdfCzęść wielokrotnego użytku treści PDF przywoływana przez dokument inline, przenoszona jako attachment z nazwą pliku
vtckIccProfileCzęść z profilem ICC (application/vnd.iccprofile) dostarczana jako załącznik z nazwą pliku

Supporting types

TypePurpose
TPdfVT2sChunksTablica dynamiczna uporządkowanych kawałków MIME dostarczanych do BuildPdfVT2sStream
TAnsiStringsTablica dynamiczna nazw plików używana przy walidacji odwołań do plików zewnętrznych w dokumencie inline
TPdfVT2sValidationIssuesZbiór ustaleń TPdfVT2sValidationIssue zwracany przez walidację
TPdfVTPrintingConditionSourcePochodzenie dowodów profilu: vtpcsNone, gdy nierozwiązane, vtpcsEmbeddedProfile dla osadzonego strumienia DestOutputProfile, vtpcsMimeProfile dla DestOutputProfileRef rozwiązanego z części MIME z profilem ICC
TPdfVTPrintingConditionEvidenceKlasyfikacja PDF/VT i PDF/X per część, OutputIntent, źródło profilu, tożsamość, skrót, nagłówek ICC i fakty DPart
TPdfVT2sValidationReportSzczegółowy wynik zwracany przez InspectPdfVT2sStream bez zmiany układu wyniku legacy

Validation issues

ValueReported when
vtmviNotMultipartStrumień nie jest kontenerem MIME multipart
vtmviMissingStreamVersionBrakuje wymaganego nagłówka PDF/VT StreamVersion
vtmviStreamVersionValueWartość StreamVersion nie jest oczekiwanym 1
vtmviStreamVersionAfterCtStreamVersion pojawia się za wierszem Content-Type zamiast przed nim
vtmviMissingBoundaryBrakuje parametru boundary w Content-Type
vtmviNoInlinePdfNie ma części z dokumentem PDF/VT inline
vtmviInlinePdfNotPdfVTCzęść inline nie jest zadeklarowana jako PDF/VT
vtmviIccProfileBadDispositionCzęść z profilem ICC nie jest załącznikiem
vtmviAttachmentMissingFilenameCzęść załącznika nie ma wymaganej nazwy pliku
vtmviInlineHasFilenameCzęść PDF inline niesie nazwę pliku, czego nie wolno
vtmviNodeNameListMismatchDwa pliki PDF/VT w strumieniu podają różne wartości NodeNameList
vtmviRecordLevelMismatchPoziomy rekordów DPart są niespójne wewnątrz kontenera
vtmviForwardReferenceZałącznik jest przywoływany, zanim pojawi się w strumieniu
vtmviBoundaryInvalidCharŁańcuch boundary zawiera znaki niedozwolone przez RFC 2046
vtmviDuplicateFilenameDwa załączniki MIME podają tę samą nazwę pliku z rozróżnianiem wielkości liter
vtmviOutputIntentAmbiguousCzęść PDF ma zero albo wiele autorytatywnych OutputIntentów GTS_PDFX
vtmviOutputProfilePackagingMismatchOutputIntent ma obie formy profilu, żadną formę albo formę niezgodną z bazą PDF/X-4, PDF/X-4p, PDF/X-5g lub PDF/X-5pg
vtmviOutputProfileReferenceInvalidDestOutputProfileRef pomija wymagane metadane albo specyfikację pliku URL albo używa zabronionego ColorantTable
vtmviReferencedPartWrongTypePrzywoływana nazwa pliku rozwiązuje do części MIME, która nie jest profilem ICC
vtmviIccProfileInvalidNagłówek ICC, zadeklarowany rozmiar, podpis, tablica tagów lub obsługiwana przestrzeń kolorów procesowych jest niepoprawna
vtmviIccChecksumMismatchZdekodowane 16-bajtowe CheckSum różni się od MD5 kompletnego pliku ICC
vtmviIccVersionMismatchZadeklarowane cztery bajty ICCVersion różnią się od bajtów 8 do 11 nagłówka ICC
vtmviIccColorSpaceMismatchProfileCS różni się od bajtów 16 do 19 nagłówka ICC albo nie jest GRAY, RGB ani CMYK
vtmviIccProfileNameMismatchProfileName nie pasuje do żadnej poprawnej wartości locale profileDescriptionTag
vtmviPrintingConditionUnresolvedAutorytatywny OutputIntent, identyfikator albo zewnętrzna zależność ICC nie dają się rozwiązać
vtmviPrintingConditionMismatchCzęści PDF/VT różnią się co do OutputConditionIdentifier, obecności lub wartości RegistryName albo przestrzeni kolorów procesowych
vtmviIccDeviceClassMismatchOsadzony albo zewnętrzny profil docelowy nie jest profilem urządzenia wyjściowego prtr

Remarks

Example

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;

See Also

FPdfAsn1