ISO Standards
phpdftk supports every major PDF subset standard — 7 ISO specifications plus ZUGFeRD, covering 31 conformance levels. Each is validated end-to-end in CI with dedicated integration tests and external tool verification via veraPDF, Matterhorn Protocol, and JHOVE.
The pdf-conformance package validates documents against these standards at write time via PdfWriter::setConformance() or at read time via ConformanceChecker.
Key files:
ConformanceProfile— interface all profiles implementConformanceChecker— read-side validation entry pointConformanceValidator— runs constraints against a documentProfileConstraintRegistry— maps profiles to constraintsConformanceXmpWriter— auto-injects XMP identification metadata
At a glance
Section titled “At a glance”| Standard | ISO | Profiles | PDF Version | Purpose |
|---|---|---|---|---|
| PDF/A | 19005 (Parts 1–4) | 11 levels | 1.4–2.0 | Long-term archival |
| PDF/UA | 14289 (Parts 1–2) | 2 levels | 1.7–2.0 | Universal accessibility |
| PDF/X | 15930 (Parts 4, 6–9) | 6 levels | 1.3–1.6 | Print production |
| PDF/VT | 16612 (Parts 2–3) | 3 levels | 2.0 | Variable/transactional printing |
| PDF/E | 24517-1 | 1 level | 1.6 | Engineering documents |
| PDF/R | 23504-1 | 1 level | 2.0 | Raster image transport |
| Factur-X | ZUGFeRD/Factur-X | 6 levels | 1.7 | European e-invoicing |
| PDF/mail | 23053-2 | 1 level | 2.0 | Email-safe documents |
PDF/A — Long-Term Archival
Section titled “PDF/A — Long-Term Archival”ISO 19005 (Parts 1–4) ensures documents remain readable decades from now by eliminating external dependencies.
Profile enum: PdfAProfile
Profiles
Section titled “Profiles”| Case | Part | Conformance | Tagged | Transparency | |
|---|---|---|---|---|---|
A1a | Part 1 (ISO 19005-1) | Level A | 1.4 | Required | Prohibited |
A1b | Part 1 (ISO 19005-1) | Level B | 1.4 | — | Prohibited |
A2a | Part 2 (ISO 19005-2) | Level A | 1.7 | Required | Allowed |
A2b | Part 2 (ISO 19005-2) | Level B | 1.7 | — | Allowed |
A2u | Part 2 (ISO 19005-2) | Level U | 1.7 | — | Allowed |
A3a | Part 3 (ISO 19005-3) | Level A | 1.7 | Required | Allowed |
A3b | Part 3 (ISO 19005-3) | Level B | 1.7 | — | Allowed |
A3u | Part 3 (ISO 19005-3) | Level U | 1.7 | — | Allowed |
A4 | Part 4 (ISO 19005-4) | — | 2.0 | — | Allowed |
A4e | Part 4 (ISO 19005-4) | Level E | 2.0 | — | Allowed |
A4f | Part 4 (ISO 19005-4) | Level F | 2.0 | — | Allowed |
What gets enforced
Section titled “What gets enforced”- All fonts must be embedded with complete glyph programs
- No encryption permitted
- XMP metadata with
pdfaididentification required - OutputIntent with ICC profile required
- Device-dependent color spaces trigger warnings
- JavaScript, Launch, Movie, Sound actions prohibited
- LZW compression prohibited (A-1 only)
- Transparency prohibited (A-1 only)
- Tagged structure required (Level A only)
Constraints
Section titled “Constraints”| Constraint | Source | A-1 | A-2 | A-3 | A-4 |
|---|---|---|---|---|---|
| FontEmbedding | FontEmbeddingConstraint.php | ✓ | ✓ | ✓ | ✓ |
| Encryption | EncryptionConstraint.php | ✓ | ✓ | ✓ | ✓ |
| Metadata | MetadataConstraint.php | ✓ | ✓ | ✓ | ✓ |
| OutputIntent | OutputIntentConstraint.php | ✓ | ✓ | ✓ | ✓ |
| ColorSpace | ColorSpaceConstraint.php | ✓ | ✓ | ✓ | ✓ |
| Action | ActionConstraint.php | ✓ | ✓ | ✓ | ✓ |
| EmbeddedFile | EmbeddedFileConstraint.php | Prohibited | Prohibited | Allowed | Allowed |
| Transparency | TransparencyConstraint.php | Prohibited | — | — | — |
| Filter | FilterConstraint.php | LZW prohibited | — | — | — |
| TaggedStructure | TaggedStructureConstraint.php | Level A only | Level A only | Level A only | — |
use Phpdftk\Pdf\Conformance\Profile\PdfAProfile;
$writer->setConformance(PdfAProfile::A2b);PdfA1bIntegrationTest.php— A-1b end-to-endPdfALevelsIntegrationTest.php— A-1a through A-4f
PDF/UA — Universal Accessibility
Section titled “PDF/UA — Universal Accessibility”ISO 14289 ensures documents are accessible to users of assistive technologies.
Profile enum: PdfUaProfile
Profiles
Section titled “Profiles”| Case | Part | |
|---|---|---|
UA1 | Part 1 (ISO 14289-1) | 1.7 |
UA2 | Part 2 (ISO 14289-2:2024) | 2.0 |
What gets enforced
Section titled “What gets enforced”- Complete tagged structure (StructTreeRoot, StructElem hierarchy)
- Document language (
/Lang) required DisplayDocTitlemust be true in ViewerPreferences- All pages with annotations must have
/Tabs /S - Annotations must have
/Contentsfor accessibility (Widget/Popup exempt) - All fonts embedded
- XMP metadata with
pdfuaididentification
Constraints
Section titled “Constraints”| Constraint | Source | Applies |
|---|---|---|
| FontEmbedding | FontEmbeddingConstraint.php | All |
| Metadata | MetadataConstraint.php | All |
| TaggedStructure | TaggedStructureConstraint.php | All |
| DisplayDocTitle | DisplayDocTitleConstraint.php | All |
| TabOrder | TabOrderConstraint.php | All |
| Annotation | AnnotationConstraint.php | All |
use Phpdftk\Pdf\Conformance\Profile\PdfUaProfile;
$writer->setConformance(PdfUaProfile::UA1);Dual profile — combine with PDF/A for archival + accessible:
$writer->setConformanceProfiles([PdfAProfile::A2a, PdfUaProfile::UA1]);PdfUaIntegrationTest.php— UA-1/UA-2 end-to-end
PDF/X — Print Production
Section titled “PDF/X — Print Production”ISO 15930 ensures reliable color reproduction in print workflows.
Profile enum: PdfXProfile
Profiles
Section titled “Profiles”| Case | ISO Part | Transparency | Reference XObjects | |
|---|---|---|---|---|
X1a2003 | ISO 15930-4 | 1.3 | Prohibited | — |
X32003 | ISO 15930-6 | 1.3 | Prohibited | — |
X4 | ISO 15930-7 | 1.6 | Allowed | — |
X5g | ISO 15930-8 | 1.6 | Allowed | Supported |
X5pg | ISO 15930-8 | 1.6 | Allowed | Supported |
X5n | ISO 15930-9 | 1.6 | Allowed | Supported |
What gets enforced
Section titled “What gets enforced”- OutputIntent required (GTS_PDFX type)
- TrimBox or ArtBox required on every page
/Trappedmust beTrueorFalse(notUnknown)- All fonts embedded
- No encryption
- Transparency prohibited for X-1a and X-3
- Reference XObject support validated for X-5
Constraints
Section titled “Constraints”| Constraint | Source | X-1a/X-3 | X-4 | X-5 |
|---|---|---|---|---|
| FontEmbedding | FontEmbeddingConstraint.php | ✓ | ✓ | ✓ |
| Encryption | EncryptionConstraint.php | ✓ | ✓ | ✓ |
| Metadata | MetadataConstraint.php | ✓ | ✓ | ✓ |
| OutputIntent | OutputIntentConstraint.php | ✓ | ✓ | ✓ |
| TrimBox | TrimBoxConstraint.php | ✓ | ✓ | ✓ |
| Trapped | TrappedConstraint.php | ✓ | ✓ | ✓ |
| Transparency | TransparencyConstraint.php | Prohibited | — | — |
| ReferenceXObject | ReferenceXObjectConstraint.php | — | — | ✓ |
use Phpdftk\Pdf\Conformance\Profile\PdfXProfile;
$writer->setConformance(PdfXProfile::X4);PdfXIntegrationTest.php— X-1a, X-3, X-4, X-5g end-to-end
PDF/VT — Variable & Transactional Printing
Section titled “PDF/VT — Variable & Transactional Printing”ISO 16612 (Parts 2–3) builds on PDF/X-4 for high-volume variable data printing (bills, statements, direct mail).
Profile enum: PdfVtProfile
Profiles
Section titled “Profiles”| Case | ISO Part | Base | |
|---|---|---|---|
VT1 | ISO 16612-2 | 2.0 | PDF/X-4 |
VT2 | ISO 16612-2 | 2.0 | PDF/X-4 |
VT2s | ISO 16612-3 | 2.0 | PDF/X-4 |
What gets enforced
Section titled “What gets enforced”All PDF/X-4 constraints plus:
DPartRootrequired (document part hierarchy for variable records)- XMP
pdfvtididentification
Constraints
Section titled “Constraints”Inherits all PDF/X-4 constraints plus:
| Constraint | Source |
|---|---|
| DPartRoot | DPartRootConstraint.php |
use Phpdftk\Pdf\Conformance\Profile\PdfVtProfile;
$writer->setConformance(PdfVtProfile::VT1);PdfVtEandRIntegrationTest.php— VT-1/VT-2/VT-2s end-to-end
PDF/E — Engineering Documents
Section titled “PDF/E — Engineering Documents”ISO 24517-1 supports 3D models, geospatial data, and interactive engineering content.
Profile enum: PdfEProfile
Profiles
Section titled “Profiles”| Case | ISO Part | |
|---|---|---|
E1 | ISO 24517-1 | 1.6 |
What gets enforced
Section titled “What gets enforced”- 3D content must use valid U3D or PRC streams with defined views
- JavaScript and Launch actions prohibited
- OutputIntent recommended (warning if missing)
- All fonts embedded, no encryption
- XMP metadata with identification
Constraints
Section titled “Constraints”| Constraint | Source |
|---|---|
| Metadata | MetadataConstraint.php |
| Encryption | EncryptionConstraint.php |
| FontEmbedding | FontEmbeddingConstraint.php |
| ThreeDContent | ThreeDContentConstraint.php |
| PdfEAction | PdfEActionConstraint.php |
| PdfEColorSpace | PdfEColorSpaceConstraint.php |
use Phpdftk\Pdf\Conformance\Profile\PdfEProfile;
$writer->setConformance(PdfEProfile::E1);PdfVtEandRIntegrationTest.php— E-1 end-to-end
PDF/R — Raster Image Transport
Section titled “PDF/R — Raster Image Transport”ISO 23504-1 is designed for scanned document workflows where raster content is primary.
Profile enum: PdfRProfile
Profiles
Section titled “Profiles”| Case | ISO Part | |
|---|---|---|
R1 | ISO 23504-1 | 2.0 |
What gets enforced
Section titled “What gets enforced”- Raster-only content expected (non-raster triggers warning)
- JavaScript and Launch actions prohibited
- Font presence triggers warning (raster docs shouldn’t need text fonts)
- No encryption
Constraints
Section titled “Constraints”| Constraint | Source |
|---|---|
| Metadata | MetadataConstraint.php |
| Encryption | EncryptionConstraint.php |
| RasterContent | RasterContentConstraint.php |
| PdfRAction | PdfRActionConstraint.php |
| PdfRFont | PdfRFontConstraint.php |
use Phpdftk\Pdf\Conformance\Profile\PdfRProfile;
$writer->setConformance(PdfRProfile::R1);PdfVtEandRIntegrationTest.php— R-1 end-to-end
Factur-X / ZUGFeRD — E-Invoicing
Section titled “Factur-X / ZUGFeRD — E-Invoicing”Built on PDF/A-3b, these profiles add structured invoice data as an embedded XML file.
Profile enum: ZugferdProfile
Profiles
Section titled “Profiles”| Case | Description | Base Profile |
|---|---|---|
MINIMUM | Minimum invoice data | PDF/A-3b |
BASIC_WL | Basic without lines | PDF/A-3b |
BASIC | Basic invoice | PDF/A-3b |
EN16931 | EU norm compliant | PDF/A-3b |
EXTENDED | Extended data | PDF/A-3b |
XRECHNUNG | German e-invoice | PDF/A-3b |
What gets enforced
Section titled “What gets enforced”All PDF/A-3b constraints plus:
- XML invoice file embedded via FileSpec/EmbeddedFile (named
factur-x.xmlorxrechnung.xml) - Factur-X XMP metadata with conformance level identification
Constraints
Section titled “Constraints”Inherits all PDF/A-3b constraints plus:
| Constraint | Source |
|---|---|
| ZugferdXmp | ZugferdXmpConstraint.php |
| ZugferdInvoice | ZugferdInvoiceConstraint.php |
use Phpdftk\Pdf\Conformance\Profile\ZugferdProfile;
$writer->setConformance(ZugferdProfile::EN16931);ZugferdIntegrationTest.php— All profile levels
PDF/mail — Email-Safe Documents
Section titled “PDF/mail — Email-Safe Documents”ISO 23053-2 ensures documents can be safely attached to and opened from email without triggering security concerns.
Profile enum: PdfMailProfile
Profiles
Section titled “Profiles”| Case | ISO Part | |
|---|---|---|
Mail1 | ISO 23053-2 | 2.0 |
What gets enforced
Section titled “What gets enforced”- No encryption
- No JavaScript or Launch actions
- No interactive forms (AcroForm)
- No multimedia content
- All fonts embedded
- Pins to PDF 2.0
Constraints
Section titled “Constraints”| Constraint | Source |
|---|---|
| FontEmbedding | FontEmbeddingConstraint.php |
| Encryption | EncryptionConstraint.php |
| Metadata | MetadataConstraint.php |
| Action | ActionConstraint.php |
| Form | FormConstraint.php |
| Multimedia | MultimediaConstraint.php |
use Phpdftk\Pdf\Conformance\Profile\PdfMailProfile;
$writer->setConformance(PdfMailProfile::Mail1);PdfMailIntegrationTest.php— mail-1 end-to-end
Constraint Matrix
Section titled “Constraint Matrix”Shows which constraints apply across all standard families.