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 질의 헬퍼, 그리고 짝이 되는 SaveXxxToFile 프로시저를 갖춘 ToCsv, ToHtml, ToMarkdown, ToJson, ToNdjson, ToSarif, ToJUnitXml, ToText, ToXml 내보내기 헬퍼로 이루어진 완전한 보고서입니다 |
TPdfValidationRule | Id와 Profile, Clause, 심각도, DependencyIds, FixHint 수리 지침, IssueCode, 그리고 PredicateKind가 고르는 issue·standard·custom Predicate를 갖춘 선언적 프로필 조항입니다 |
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, ToJson JSON 출력을 갖춥니다 |
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 | PDF/X Validation 결과에 페이지별 Pages 정보, HasOutputIntent, HasEmbeddedFonts, HasTransparency, HasOverprint, SeparationCount, DeviceNCount, MinimumEffectiveDpi, Issues 배열, ErrorCount, IsProductionReady, ToJson JSON 출력을 더한 것입니다 |
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 | TPdfARepairPlan이 저장하는 의존성 순서의 PDF/A 수리 단계입니다 |
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는 활성 TPdf 문서에 대해 ValidatePdfA, ValidatePdfUa, ValidatePdfE, ValidatePdfX, ValidatePdfR, ValidatePdfVT를 호출하고 TPdfPreflightReport를 반환합니다
보고서에는 선택된 표준마다 감지된 적합성, 상태, 우선순위, 다음 조치, 문제 코드, 범주, Info / Warning / Error 심각도, 설명, 권고가 한 행씩 담깁니다. 상태, 심각도, 범주, 문제 코드 카운터가 재사용 가능한 요약 데이터를 노출합니다
FindStandard, HasIssueCode, FlattenIssues, SearchIssues, FilterByStandards, FilterBySeverities, FilterByCategory가 메모리 내 조회 뷰를 제공합니다. 필터링된 보고서는 독립적인 문제 배열을 반환하면서 원래의 적합성·상태 값을 유지합니다
Fingerprint는 순서가 있는 표준·문제 결과 집합의 소문자 SHA-256 식별자를 반환합니다. 소스 경로와 생성 타임스탬프는 의도적으로 제외되어, 동등한 검증 결과가 하나의 지문을 공유합니다
각 To* 내보내기에는 짝이 되는 Save*ToFile 메서드가 있습니다. 파일은 곧바로 UTF-8로 기록되고, CSV는 Excel 감지를 위해 BOM을 유지하며 수식으로 시작하는 셀을 중화합니다
TPdfValidationRuleRegistry는 모놀리식 표준 검증기 밖에서 선언적 프로필 조항을 실행합니다. 규칙은 앞선 조항에 의존하거나, 내장 issue·profile 술어를 고르거나, 상한이 있는 증거를 기록하는 사용자 지정 술어를 제공할 수 있습니다
TPdfValidationExecutionContext는 객체, 재귀, UTF-8 증거, 예약 메모리에 대한 협력적 checkpoint와 명시적 카운터를 제공합니다. 실행은 fast-fail, 취소, 예산 소진을 완전한 준수 결과가 아니라 미완료 상태로 보고합니다
ValidatePdfFilesParallel은 워커마다 비공개 TPdf 문서를 주고 입력 순서를 유지하며 문제 코드 수를 집계하고, 파일마다 통과·실패·취소·로드 오류를 독립적으로 기록합니다
PDFium은 문서 간에 스레드 안전하지 않으므로 워커들은 공유 잠금 아래 파일을 한 번에 하나씩 열고 검사하며, 병렬로 도는 것은 규칙 평가뿐입니다. 따라서 WorkerCount를 늘리면 문서 로딩이 아니라 규칙이 많은 레지스트리가 빨라집니다
BuildPdfARepairPlan은 PDF/A 증거를 의존성 순서의 보안, 폰트, 색, 첨부, 구조, 메타데이터, 잔여 단계로 사상합니다. 서명을 무효화하는 단계는 호출자가 명시적 승인을 주지 않으면 차단됩니다
BuildPdfXProductionPreflight는 PDF/X 프로필 결과에 네이티브 페이지·이미지 정보, 구조적 색재·검인 스캔, 페이지 박스 검사를 결합합니다. 해상도 분석 중에 이미지 페이로드를 디코딩하거나 복사하지 않습니다
| Format | Shape |
|---|---|
| Text | 일반 텍스트 소스, 생성 시각, 범위 노트, 요약, 표준 행, 조치 계획, 문제 범주, 문제 상세 |
| HTML | 상태 스타일링, 문제 범주 표, 표준 표, 문제 표를 갖춘 독립 실행형 HTML 보고서 |
| Markdown | 표준, 문제 범주, 조치 계획, 문제 상세를 위한 Markdown 제목과 표 |
| JSON | format, sourceKind, summary, issueCategoryCounts, 표준별 문제 배열을 갖춘 구조화된 객체 |
| CSV | RowType으로 구분되는 스프레드시트 친화적 행입니다. Summary, Standard, Category, Issue |
| SARIF 2.1.0 | 안정적인 규칙 ID, 심각도 수준, 수정 메시지, 속성, 부분 지문을 갖춘 CI 및 코드 스캐닝 결과 |
| JUnit XML | 선택된 표준마다 테스트 케이스 하나씩이며, Action required 결과는 실패로, Review 결과는 건너뜀 케이스로 출력됩니다 |
| NDJSON | 큰 JSON 문서 하나를 로드하지 않고 점진적으로 흡수할 수 있게 요약·표준·문제 JSON 객체를 줄마다 하나씩 담습니다 |
| XML | 보고서 메타데이터, 요약 속성, 표준 결과, 심각도, 설명, 권고를 갖춘 네이티브 preflight XML |
ValidatePdf* 메서드와 같은 프로필·파일 검사를 사용합니다Demo\Delphi\PreflightReport, Demo\Lazarus\PreflightReport, Demo\CBuilder\PreflightReport는 표준 선택, 상태 / 우선순위 요약 행, 생성된 보고서의 문제 범주 수, 텍스트 / Markdown / JSON / CSV 미리보기 전환, TXT / HTML / Markdown / JSON / CSV 내보내기를 보여줍니다. Delphi GUI 샘플에는 같은 데이터를 수리 체크리스트로 집중하는 Action Plan 미리보기도 포함되어 있습니다Demo\Delphi\PreflightReportCli는 같은 보고서 경로를 스크립트 가능한 콘솔 워크플로로 보여줍니다. 단일 파일 모드는 입력, 출력, 선택적 암호, 보고서 형식, standards=, attach=, failon=을 받습니다. plan / actionplan 형식은 단일 파일 및 배치 실행용 텍스트 수리 체크리스트를 씁니다. 인수가 없으면 실행 파일 옆에 샘플 PDF를 만들고 텍스트 보고서를 씁니다batch=에서 줄마다 PDF 경로 하나를 읽고, 빈 줄과 # 주석은 건너뛰며, 없는 상대 경로는 목록 파일의 폴더 기준으로 해석합니다. 디렉터리 모드는 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, 보고서가 기록된 뒤 선택된 failon= 규칙에 해당하면 2로 끝납니다
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;