PDFium Delphi Component Docs

модул FPdfPdfvtMime

Модул: FPdfPdfvtMime
Изгражда и валидира MIME part потоци на еднофайлови PDF/VT-2s, носещи inline PDF/VT документ, неговия преизползваем прикачен payload и ICC профила като един multipart контейнер

Синтаксис

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 реализира транспорта PDF/VT-2s, дефиниран в ISO 16612-2 Annex, където PDF/VT документ заедно с соченото от него преизползваемо PDF съдържание и ICC профил се опаковат като един MIME multipart поток

За разлика от пътя TPdf.SaveAsPdfVT, който записва самостоятелен PDF/VT-1 файл, този модул работи изцяло върху байтови потоци и никога не зарежда pdfium.dll, така че може да се изпълнява в headless сървъри и batch тръбопроводи

BuildPdfVT2sStream сглобява частите в подредбата им и излъчва header StreamVersion, границите между частите и header Content-Type / Content-Disposition за всяка част; ValidatePdfVT2sStream парсва обратно съществуващ поток и докладва структурни отклонения, отклонения в printing condition и в ICC като типизирано множество от проблеми

InspectPdfVT2sStream връща същия резултат за съвместимост плюс доказателства за всяка PDF/VT част, включително PDF/VT съответствие, PDF/X основа, идентичност на OutputIntent, произход на профила, MD5 и SHA-256, сурови ICC метаданни и брояци за DPart страници и записи на получатели

Всяка PDF част първо се класифицира с ValidatePdfVTCompliance; преизползваемите прикачени файлове само с PDF/X остават допустими цели за препратки, но са изключени от PDF/VT йерархията и сравненията на printing conditions

Опаковането на профила следва основата на файла: PDF/VT-1 с PDF/X-4 и PDF/VT-2 с PDF/X-5g използват вграден DestOutputProfile, докато PDF/VT-2 с PDF/X-4p или PDF/X-5pg използва DestOutputProfileRef, разрешен към по-ранна ICC MIME част

Видове части

ValueMIME роля
vtckInlinePdfPDF/VT документ, носен като inline част application/pdf; поне една е задължителна
vtckAttachmentPdfПреизползваема PDF част за съдържание, сочена от inline документа, носена като attachment с име на файл
vtckIccProfileЧаст с ICC профил (application/vnd.iccprofile), подадена като прикачен файл с име на файл

Помощни типове

ТипПредназначение
TPdfVT2sChunksДинамичен масив от подредени MIME части, подавани на BuildPdfVT2sStream
TAnsiStringsДинамичен масив от имена на файлове, използван при валидиране на препратки към външни файлове в inline PDF
TPdfVT2sValidationIssuesМножество от находки TPdfVT2sValidationIssue, връщано от валидацията
TPdfVTPrintingConditionSourceПроизход на доказателствата за профила: vtpcsNone когато не е разрешен, vtpcsEmbeddedProfile за вграден поток DestOutputProfile, vtpcsMimeProfile за DestOutputProfileRef, разрешен от ICC MIME част
TPdfVTPrintingConditionEvidenceКласификация PDF/VT и PDF/X за всяка част, OutputIntent, произход на профила, идентичност, digest, ICC header и факти за DPart
TPdfVT2sValidationReportПодробен резултат, връщан от InspectPdfVT2sStream, без да променя legacy подредбата на резултата

Проблеми при валидиране

ValueДокладва се, когато
vtmviNotMultipartПотокът не е multipart MIME контейнер
vtmviMissingStreamVersionЗадължителният header PDF/VT StreamVersion липсва
vtmviStreamVersionValueСтойността StreamVersion не е очакваната 1
vtmviStreamVersionAfterCtStreamVersion се появява след реда Content-Type, вместо преди него
vtmviMissingBoundaryПараметърът boundary на Content-Type липсва
vtmviNoInlinePdfЛипсва inline PDF/VT част
vtmviInlinePdfNotPdfVTInline частта не е декларирана като PDF/VT
vtmviIccProfileBadDispositionЧаст с ICC профил не е прикачен файл
vtmviAttachmentMissingFilenameПрикачена част липсва задължителното име на файл
vtmviInlineHasFilenameInline PDF частта носи име на файл, което не е позволено
vtmviNodeNameListMismatchДва PDF/VT файла в потока излагат различни стойности NodeNameList
vtmviRecordLevelMismatchНивата на DPart записите са непоследователни в контейнера
vtmviForwardReferenceПрикачен файл е сочен, преди да се появи в потока
vtmviBoundaryInvalidCharНизът boundary съдържа знаци, непозволени от RFC 2046
vtmviDuplicateFilenameДве MIME прикачени файлове излагат едно и също име на файл, чувствително към регистъра
vtmviOutputIntentAmbiguousPDF част има нула или повече авторитетни GTS_PDFX OutputIntents
vtmviOutputProfilePackagingMismatchOutputIntent има и двете форми на профила, нито една форма или форма, несъвместима с основата PDF/X-4, PDF/X-4p, PDF/X-5g или PDF/X-5pg
vtmviOutputProfileReferenceInvalidDestOutputProfileRef пропуска нужните метаданни или URL file specification, или използва забранен ColorantTable
vtmviReferencedPartWrongTypeСоченото име на файл се разрешава към MIME част, която не е ICC профил
vtmviIccProfileInvalidICC header, декларираният размер, подписът, tag таблицата или поддържаното process цветово пространство е невалидно
vtmviIccChecksumMismatchДекодираният 16-байтов CheckSum се различава от MD5 на пълния ICC файл
vtmviIccVersionMismatchДекларираните четири байта ICCVersion се различават от байтове 8 до 11 на ICC header
vtmviIccColorSpaceMismatchProfileCS се различава от байтове 16 до 19 на ICC header или не е GRAY, RGB или CMYK
vtmviIccProfileNameMismatchProfileName не съвпада с нито една валидна locale стойност на profileDescriptionTag
vtmviPrintingConditionUnresolvedАвторитетният OutputIntent, идентификаторът или външната ICC зависимост не могат да се разрешат
vtmviPrintingConditionMismatchPDF/VT частите не са съгласни за OutputConditionIdentifier, наличието или стойността на RegistryName или process цветовото пространство
vtmviIccDeviceClassMismatchВграден или външен дестинационен профил не е профил на изходно устройство prtr

Забележки

Пример

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;

Виж също

FPdfAsn1