PDF/X-6 Authoring and Validation
HotPDF supports complete, externally profiled, and N-colourant PDF/X-6 exchange workflows over PDF 2.0
Profiles
PDFXCompliance | THPDFPDFX6Profile | Output profile |
|---|---|---|
'X-6' | px6Complete | Embedded ICC profile through DestOutputProfile |
'X-6p' | px6External | External gray, RGB, or CMYK ICC profile through DestOutputProfileRef |
'X-6n' | px6NChannel | External N-colourant profile plus matching ColorantTable |
| Detected from the document | px6Automatic | Uses the producer setting or loaded XMP identification |
Complete profile example
PDF.Version := pdf20;
PDF.PDFXCompliance := 'X-6';
PDF.Title := 'Press-ready artwork';
PDF.Trapped := 'False';
PDF.BeginDoc;
PDF.CurrentPage.SetTrimBox(0, 0,
PDF.CurrentPage.Width, PDF.CurrentPage.Height);
PDF.AddPDFXOutputIntent('CGATS TR 001',
'Document printing condition', ICCStream, 4, 'DeviceCMYK');
PDF.EndDoc;
EndDoc runs fail-closed validation for all three PDF/X-6 profiles before serialization
Output-intent scope
AddPDFXOutputIntentadds one embedded Catalog-level profile for the complete profileAddPDFX6PageOutputIntentadds an embedded profile to one pageAddPDFX6ExternalOutputIntentadds an external profile reference at Catalog scope withPageIndex=-1or at page scope with a zero-based index- A page-level
OutputIntentsarray overrides the Catalog array for that page - Each effective scope must contain exactly one PDF/X intent
Page boxes
The validator resolves inherited MediaBox and CropBox, checks direct BleedBox, TrimBox, and ArtBox values, and requires exactly one finished-page box per page
- Every rectangle must contain four finite ordered coordinates
CropBox,BleedBox, and the finished-page box must stay insideMediaBoxTrimBoxandArtBoxare mutually exclusive
Exchange constraints
One bounded graph traversal checks the profile identification and exchange structures while deduplicating shared resources by object identity
- PDF 2.0 header, XMP profile marker, dates, title, trapped state, trailer ID, and absence of encryption
- Action types, action chains, destination arrays, AcroForm state, and field additional actions
- Printable visible annotations with fixed normal appearances and no PrinterMark or TrapNet subtype
- Embedded font programs, Type 0 descendants, graphics-state value types and ranges, and resource XObjects
- Disallowed page production-step data and alternate-presentation or viewer-preference Catalog data
Versioned rules
THPDFPDFX6ValidationOptions.RuleSet selects the published ISO 15930-9:2020 rules or the same edition with resolved errata through 2025-11-11, with the resolved-errata set selected by default
HPDFPDFX6RuleSetRevision returns the stable revision label, and every THPDFPDFX6ValidationIssue carries both RuleSet and RuleRevision so stored diagnostics remain attributable when defaults evolve
Painted colour, overprint, and transparency
The validator interprets graphics state and resources at actual paint operators rather than treating colour selection as painted output
- Content-stream arrays share one
qandQstack, while each Form XObject applies its resources, matrix, transparency group and blending colour space at the invocation point - Paths, text, images, image masks, shadings, tiling and shading patterns, Type 3 glyph CharProcs, soft-mask groups and annotation appearances are traversed through their effective resource dictionaries
- Empty paths, invisible or clipping-only text and unused Type 3 glyphs do not create painted-colour findings
- ICCBased, CalGray, CalRGB, Lab, Indexed, Pattern, Separation, DeviceN and NChannel definitions are structurally validated before a paint is classified, including actual ICC header and component checks rather than trusting
/N - Overprint mode 1 is checked only where component-preserving process paints can use it, and is reported as inapplicable for image and shading paints
- Shading patterns begin from the enclosing content stream's entry state with transparency reset, and their pattern
ExtGStateapplies only the nonstroking parameters used by the implicitshpaint - Combined fill and stroke is modelled as one implicit transparency group, with exact alpha equality and independent transparency or overprint policy gates
- Soft-mask subtype, group and blending-space structure are checked before traversal; Alpha masks ignore group colour, while Luminosity masks require a valid group
/CSand any/BCmust contain one numeric value per blending-space component - Type 3 CharProcs require leading
d0ord1metrics with exact operand counts, horizontal widths matching/Widths, zero vertical advance and orderedd1bounds;d1inherits the caller's colour while ignoring local colour and transparency operators and forbidding regular images but retaining image masks - JPX images without an explicit
/ColorSpaceuse bounded header-only codestream colour metadata, cached once per image stream - When an annotation has a fixed appearance,
/BMapplies to the outer appearance composite, annotation/CAand/cado not override it, and operators inside the appearance retain their own graphics state
Bounded execution and caching
Object, issue, decoded-byte, content-work, recursion and graphics-state-stack ceilings fail closed with stable diagnostics before unbounded allocation, including members nested inside TJ arrays
Decoded content, ICC profiles, JPX header colour and Type 3 structure use indexed document-local caches with geometrically grown storage, while context-sensitive colour and transparency state is re-evaluated for every invocation
Structured diagnostics
ValidatePDFX6 returns THPDFPDFX6ValidationIssues, an array of THPDFPDFX6ValidationIssue records whose THPDFPDFX6IssueSeverity identifies warnings and errors
Each issue includes a stable code, standard clause, rule set, rule revision, object path, object number, zero-based page index, and message
THPDFPDFX6ValidationOptions independently bounds objects, issues, decoded bytes and content tokens and can isolate output-intent, page-box, exchange, font, annotation, painted-colour, overprint, or transparency checks