function BuildPdfPreflightReport(Pdf: TPdf): TPdfPreflightReport; overload;
function BuildPdfPreflightReport(Pdf: TPdf; Standards: TPdfPreflightStandards): TPdfPreflightReport; overload;
function PdfPreflightIssueSeverity(Standard: TPdfPreflightStandard; const Code, Category: string): TPdfPreflightSeverity;
function PdfPreflightSeverityName(Severity: TPdfPreflightSeverity): string;
function PdfPreflightStandardName(Standard: TPdfPreflightStandard): string;
function PdfPreflightStatusName(Status: TPdfPreflightStatus): string;
function CreateDefaultPdfValidationRuleRegistry: TPdfValidationRuleRegistry;
function ValidatePdfFilesParallel(const FileNames: array of string; Registry: TPdfValidationRuleRegistry; const Options: TPdfBatchValidationOptions): TPdfBatchValidationReport;
| Type | Description |
|---|---|
TPdfPreflightStandard | Селектор стандартов с ppsPdfA, ppsPdfUa, ppsPdfE, ppsPdfX, ppsPdfR и ppsPdfVT |
TPdfPreflightStandards | Тип множества, используемый BuildPdfPreflightReport; AllPdfPreflightStandards выбирает все поддерживаемые стандарты |
TPdfPreflightStatus | Статус по каждому стандарту: pfsPass, pfsActionRequired или pfsReview |
TPdfPreflightSeverity | Серьёзность проблем: psevInfo, psevWarning или psevError; TPdfPreflightSeverities — соответствующее множество фильтра |
TPdfPreflightIssue | Строка проблемы с StandardName, кодом проблемы, категорией, серьёзностью, описанием и Recommendation, плюс поиск без учёта регистра MatchesText и идентичность StableKey |
TPdfPreflightIssueCategoryCount | Агрегированная строка категорий проблем, возвращаемая IssueCategoryCounts |
TPdfPreflightSeverityCount | Агрегированная строка серьёзности, возвращаемая SeverityCounts, с Severity, SeverityName и Count |
TPdfPreflightIssueCodeCount | Агрегированная строка стандарта и кода проблемы, возвращаемая IssueCodeCounts, с StandardName, Code и Count |
TPdfPreflightStandardResult | Результат одного стандарта с StandardName, ConformanceName, IsCompliant, StatusName, Priority, NextAction, массивом Issues, счётчиками серьёзности ErrorCount и WarningCount, HighestSeverity, IssueCount и поиском по кодам проблем HasIssueCode |
TPdfPreflightReport | Полный отчёт с именем SourceFile, меткой времени GeneratedAt, ScopeNote, массивом Results результатов стандартов, сводными счётчиками ActionRequiredStandardCount, CompliantStandardCount, NonCompliantStandardCount, PassedStandardCount, ReviewStandardCount, StandardCount, HighestSeverity и TotalIssueCount, помощниками запросов FilterByStandards, FilterByCategory, FilterBySeverities, SearchIssues, FlattenIssues, HasIssueCode, FindStandard, Fingerprint, IssueCategoryCounts, IssueCodeCounts и SeverityCounts, а также помощниками экспорта ToCsv, ToHtml, ToMarkdown, ToJson, ToNdjson, ToSarif, ToJUnitXml, ToText и ToXml с соответствующими процедурами SaveXxxToFile |
TPdfValidationRule | Декларативное условие профиля со своим Id и Profile, Clause, серьёзностью, DependencyIds, руководством по исправлению FixHint, IssueCode и предикатом Predicate проблемы, стандарта или пользовательским, выбираемым PredicateKind |
TPdfValidationBudget | Ограничивает выбранные правила (MaxRules), сообщённые сбои (MaxIssues), посещённые объекты (MaxObjects), рекурсию (MaxRecursionDepth), байты свидетельств (MaxEvidenceBytes), зарезервированную память (MaxMemoryBytes) и затраченное время (TimeoutMilliseconds) |
TPdfValidationOptions | Выбирает Profiles и Severities, задаёт Budget, включает FastFail и поддерживает кооперативную отмену через CancellationToken |
TPdfValidationExecutionContext | Ограниченный контекст выполнения, передаваемый пользовательским предикатам; Create сохраняет опции и запускает часы прогона, Checkpoint, ConsumeEvidence, ConsumeObjects, EnterRecursion, LeaveRecursion, ReserveMemory и ReleaseMemory следят за бюджетом, а BudgetExceeded, BudgetReason, EvidenceBytes, ObjectsVisited, RecursionDepth, ReservedMemory, PeakReservedMemory и StartTick открывают живые счётчики |
TPdfValidationRuleRegistry | Потокобезопасный реестр правил; Create и Destroy управляют критической секцией, RegisterRule и Clear изменяют зарегистрированное множество, Count и Snapshot читают его под блокировкой, а Execute проверяет отчёт с свидетельствами и таймингами по каждому условию |
TPdfBatchValidationOptions | Управляет WorkerCount, стандартами, вложенными ValidationOptions, документным FailFast и отменой через CancellationToken |
TPdfBatchValidationReport | Результаты по документам в порядке входа с агрегированными распределениями проблем, ElapsedMilliseconds, итоговым статусом и итогами WorkerCount, PassedDocumentCount, FailedDocumentCount, CancelledDocumentCount и ErrorDocumentCount |
TPdfARepairPlan | Шаги исправления Steps в порядке зависимостей, классифицированные по категории, безопасности, потребности в переписывании, влиянию на подписи и блокирующему состоянию, со сводками DocumentHasSignatures, AllowSignatureInvalidation, BlockedStepCount, AutomaticStepCount и ManualStepCount, с IsExecutable и выводом JSON через ToJson |
TPdfARepairCategory | Классифицирует работу по исправлению как parcSecurity, parcFonts, parcColour, parcAttachments, parcStructure, parcMetadata или parcOther |
TPdfARepairSafety | parsAutomatic, parsReviewRequired или parsManual |
TPdfARepairStep | Одно упорядоченное действие исправления со своим Order, категорией, IssueCode, действием, Evidence, зависимостью и Safety, плюс RequiresFullRewrite, InvalidatesSignatures и Blocked |
TPdfXProductionPreflightOptions | Управляет порогом MinimumImageDpi, TreatTransparencyAsErrorBeforePdfX4 и сообщением IncludeInformationalColourants |
TPdfXProductionPreflightReport | Результат Validation PDF/X плюс постраничные факты Pages, HasOutputIntent, HasEmbeddedFonts, HasTransparency, HasOverprint, SeparationCount, DeviceNCount, MinimumEffectiveDpi, массив Issues, ErrorCount, IsProductionReady и вывод JSON через ToJson |
TPdfXProductionIssueKind | Классифицирует проблемы pxpikOutputIntent, pxpikPageBox, pxpikFont, pxpikColourant, pxpikTransparency, pxpikOverprint, pxpikSeparation и pxpikImageResolution |
TPdfXProductionIssue | Одна конкретная производственная находка со своим Kind, серьёзностью, PageNumber, ObjectIndex и Evidence |
TPdfXProductionPage | Постраничные факты для PageNumber, HasMediaBox, HasTrimBox, HasBleedBox, HasArtBox, TextObjectCount, PathObjectCount, ImageCount, HasTransparency и MinimumEffectiveDpi |
TPdfValidationPredicateKind | Выбирает вычисление правила pvpkIssueAbsent, pvpkStandardPass или pvpkCustom |
TPdfValidationRuleStatus | pvrrsPass, pvrrsFail, pvrrsSkipped или pvrrsError |
TPdfValidationRunStatus | Сообщает pvrsComplete, pvrsFastFailed, pvrsBudgetExceeded, pvrsCancelled или pvrsError |
TPdfValidationRuleResult | Результат по правилу с RuleId, Profile, Clause, статусом, Evidence, руководством по исправлению FixHint и ElapsedMilliseconds |
TPdfValidationRun | Один ограниченный прогон реестра с массивом Results, счётчиками PassedRuleCount, FailedRuleCount, SkippedRuleCount и ErrorRuleCount, ObjectsVisited, EvidenceBytes, PeakReservedMemory, ElapsedMilliseconds, IncompleteReason и помощниками соответствия |
TPdfPreflightIssues, TPdfPreflightStandardResults | Динамические массивы строк проблем и результатов по стандартам |
TPdfPreflightIssueCategoryCounts, TPdfPreflightSeverityCounts, TPdfPreflightIssueCodeCounts | Динамические массивы, возвращаемые агрегаторами категорий, серьёзности и стабильных кодов проблем |
TPdfARepairSteps | Шаги исправления PDF/A в порядке зависимостей, хранимые TPdfARepairPlan |
TPdfXProductionPages, TPdfXProductionIssues | Постраничные производственные факты и конкретные производственные проблемы PDF/X |
TPdfValidationProfiles, TPdfValidationRules, TPdfValidationRuleResults | Выбранные имена профилей, зарегистрированные декларативные правила и результаты выполнения по правилам |
TPdfValidationRulePredicate | Пользовательский обратный вызов правила, который вычисляет отчёт через ограниченный контекст выполнения и возвращает диагностические свидетельства |
TPdfBatchValidationItemStatus | Состояние документа pbvisPending, pbvisPass, pbvisFail, pbvisCancelled или pbvisError |
TPdfBatchValidationStatus | Состояние всей партии pbvsComplete, pbvsPartial, pbvsCancelled или pbvsFailed |
TPdfBatchValidationItem | Один входной файл со своим отчётом Preflight, результатом Validation правил, статусом, текстом ErrorMessage и ElapsedMilliseconds |
TPdfBatchValidationItems | Результаты по документам в порядке входа, возвращаемые параллельной проверкой |
BuildPdfPreflightReport вызывает ValidatePdfA, ValidatePdfUa, ValidatePdfE, ValidatePdfX, ValidatePdfR и ValidatePdfVT для активного документа TPdf и возвращает TPdfPreflightReport
Отчёт содержит по строке на каждый выбранный стандарт: обнаруженное соответствие, статус, приоритет, следующее действие, код проблемы, категорию, серьёзность Info / Warning / Error, описание и рекомендацию. Счётчики статусов, серьёзности, категорий и кодов проблем открывают многоразовые сводные данные
FindStandard, HasIssueCode, FlattenIssues, SearchIssues, FilterByStandards, FilterBySeverities и FilterByCategory дают представления запросов в памяти. Отфильтрованные отчёты сохраняют исходные значения соответствия и статуса, возвращая независимые массивы проблем
Fingerprint возвращает идентичность SHA-256 в нижнем регистре для упорядоченного набора результатов стандартов и проблем. Пути источников и метки времени генерации намеренно исключены, чтобы эквивалентные результаты проверки делили один отпечаток
У каждого экспорта To* есть парный метод Save*ToFile. Файлы пишутся сразу в UTF-8; CSV сохраняет BOM для распознавания Excel и обезвреживает ячейки, начинающиеся с формул
TPdfValidationRuleRegistry выполняет декларативные условия профилей вне монолитных валидаторов стандартов. Правила могут зависеть от более ранних условий, выбирать встроенный предикат проблемы или профиля либо предоставлять пользовательский предикат, записывающий ограниченные свидетельства
TPdfValidationExecutionContext даёт кооперативные контрольные точки и явные счётчики объектов, рекурсии, свидетельств UTF-8 и зарезервированной памяти. Прогон сообщает быстрый отказ, отмену или исчерпание бюджета как незавершённый статус, а не как полный результат соответствия
ValidatePdfFilesParallel выдаёт каждому worker отдельный документ TPdf, сохраняет порядок входа, агрегирует счётчики кодов проблем и независимо фиксирует для каждого файла успех, сбой, отмену или ошибку загрузки
PDFium не потокобезопасен между документами, поэтому воркеры открывают и просматривают файлы по одному под общим локом, а параллельно выполняется только вычисление правил; более крупный WorkerCount ускоряет реестры, насыщенные правилами, а не загрузку документов
BuildPdfARepairPlan отображает свидетельства PDF/A в шаги безопасности, шрифтов, цвета, вложений, структуры, метаданных и остаточные шаги — в порядке зависимостей. Шаги, нарушающие подписи, блокируются, пока вызывающий код не даст явного разрешения
BuildPdfXProductionPreflight объединяет результат профиля PDF/X с нативными фактами о страницах и изображениях, структурными просмотрами красок и overprint и проверками page box. Он никогда не декодирует и не копирует данные изображений при анализе разрешения
| Format | Shape |
|---|---|
| Text | Источник в виде простого текста, время генерации, примечание об охвате, сводка, строки стандартов, план действий, категории проблем и детали проблем |
| HTML | Автономный HTML-отчёт со стилизацией статусов, таблицей категорий проблем, таблицей стандартов и таблицей проблем |
| Markdown | Заголовки и таблицы Markdown для стандартов, категорий проблем, плана действий и деталей проблем |
| JSON | Структурированный объект с format, sourceKind, summary, issueCategoryCounts и массивами проблем по стандартам |
| CSV | Удобные для таблиц строки, различаемые RowType: Summary, Standard, Category и Issue |
| SARIF 2.1.0 | Результаты для CI и сканирования кода со стабильными ID правил, уровнями серьёзности, сообщениями об исправлении, свойствами и частичными отпечатками |
| JUnit XML | Один тестовый случай на выбранный стандарт; результаты Action required выдаются как сбои, а Review — как пропущенные случаи |
| NDJSON | Один JSON-объект сводки, стандарта или проблемы на строку для инкрементного приёма без загрузки одного большого JSON-документа |
| XML | Нативный XML preflight с метаданными отчёта, атрибутами сводки, результатами стандартов, серьёзностью, описаниями и рекомендациями |
ValidatePdf*Demo\Delphi\PreflightReport, Demo\Lazarus\PreflightReport и Demo\CBuilder\PreflightReport демонстрируют выбор стандартов, сводные строки статуса / приоритета, счётчики категорий проблем в созданных отчётах, переключение предпросмотра текст / Markdown / JSON / CSV и экспорт TXT / HTML / Markdown / JSON / CSV. Пример с GUI Delphi также включает предпросмотр плана действий, фокусирующий те же данные в контрольный список исправленийDemo\Delphi\PreflightReportCli демонстрирует тот же путь отчёта в сценарном консольном рабочем процессе. Однофайловый режим принимает вход, выход, необязательный пароль, формат отчёта, standards=, attach= и failon=. Формат plan / actionplan пишет текстовый контрольный список исправлений для однофайловых и пакетных прогонов. Без аргументов создаёт пример PDF рядом с исполняемым файлом и пишет текстовый отчётbatch=, пропускает пустые строки и комментарии # и разрешает отсутствующие относительные пути от папки файла списка. Режим каталога ищет в batchdir= файлы *.pdf, при желании обходит подкаталоги и сортирует найденные пути перед обработкойoutdir= направляет пакетные отчёты в общую папку. Если несколько входов разрешаются в один путь отчёта, последующие файлы получают суффиксы -2, -3 и далее вместо перезаписи прежних отчётовsummary=batch.txt, summary=batch.json и summary=batch.html включают настройки прогона, общие итоги по файлам, итоги статусов стандартов и по строке на вход. summary=batch.csv — построчный манифест, повторяющий настройки прогона в каждой строке входа и включающий счётчики статусов по файламattach=output.pdf работает только в однофайловом режиме. Он встраивает созданный отчёт как вложение уровня документа в другой путь PDF и никогда не пишет обратно во входной файлfailon=issues совпадает с любой сообщённой проблемой, failon=action — с любой строкой Action required, а failon=review — со строками Action required или Review. CLI завершается с кодом 0 при успехе, 1 при ошибках времени выполнения и 2, когда выбранное правило failon= совпало после записи отчётов
uses FPdfPreflightReport;
var
Report: TPdfPreflightReport;
begin
Pdf1.FileName := 'C:\Incoming\job.pdf';
Pdf1.Active := True;
Report := BuildPdfPreflightReport(Pdf1, [ppsPdfA, ppsPdfX]);
Memo1.Lines.Text := Report.ToText;
Report.SaveHtmlToFile('C:\Incoming\job.preflight.html');
Report.SaveMarkdownToFile('C:\Incoming\job.preflight.md');
Report.SaveJsonToFile('C:\Incoming\job.preflight.json');
Report.SaveCsvToFile('C:\Incoming\job.preflight.csv');
Report.SaveSarifToFile('C:\Incoming\job.preflight.sarif');
Report.SaveJUnitXmlToFile('C:\Incoming\job.preflight.junit.xml');
Report.SaveNdjsonToFile('C:\Incoming\job.preflight.ndjson');
Report.SaveXmlToFile('C:\Incoming\job.preflight.xml');
end;