PDF/A and PDF/UA capabilities
Fork PDF can generate archival PDF/A and tagged PDF/UA output, either standalone or in supported combinations. Font embedding is verified independently. PDF/A status is stable; PDF/UA status remains experimental until the human screen-reader audit.
Capability status
| Capability | Status | Notes |
|---|---|---|
| Font embedding verification | Stable | Every used font must be embedded and Unicode-mapped. |
| Strict font policy | Stable | Rejects external stylesheets, non-inline fonts, and system fallback. |
| PDF/A-2b / 2u / 2a | Stable | PDF 1.7, machine-validated with veraPDF. |
| PDF/A-3b / 3u / 3a | Stable | PDF 1.7, machine-validated with veraPDF. |
| PDF/A-4 | Stable | PDF 2.0, machine-validated with veraPDF. |
| PDF/UA-1 | Experimental | Machine-validated; human screen-reader audit pending. |
| PDF/UA-2 | Experimental | Machine-validated; human screen-reader audit pending. |
Compatibility matrix
| Request | Result |
|---|---|
pdfA: "2b" | "2u" | "2a" | Standalone PDF/A-2, PDF 1.7. |
pdfA: "3b" | "3u" | "3a" | Standalone PDF/A-3, PDF 1.7. |
pdfA: "4" | Standalone PDF/A-4, PDF 2.0. |
pdfUa: 1 | Standalone PDF/UA-1, PDF 1.7. |
pdfUa: 2 | Standalone PDF/UA-2, PDF 2.0. |
pdfUa: 1 + PDF/A-2/3 | Combined PDF 1.7 output. |
pdfUa: 2 + pdfA: "4" | Combined PDF 2.0 output. |
pdfUa: 1 + pdfA: "4" | Rejected with UNSUPPORTED_COMPLIANCE_COMBINATION. |
pdfUa: 2 + PDF/A-2/3 | Rejected with UNSUPPORTED_COMPLIANCE_COMBINATION. |
Standalone PDF/A
{
"htmlContent": "<h1>Archived report</h1>",
"compliance": { "pdfA": "3b" }
}
The response omits x-pdf-ua and pdfUa from complianceStatus.
Combined PDF/A + PDF/UA
{
"htmlContent": "<h1>Accessible archive</h1>",
"compliance": { "pdfUa": 1, "pdfA": "3b" },
"fontPolicy": "strict"
}
Response status
{
"compliance": { "pdfUa": 1, "pdfA": "3b" },
"complianceStatus": {
"fontPolicy": "strict",
"fontEmbedding": "verified",
"pdfA": "stable",
"pdfAFlavor": "3b",
"pdfUa": "experimental",
"pdfUaVersion": 1
}
}
JSON, webhook, and stream-only responses use the same status object. Stream-only clients read it from x-compliance-status (base64 JSON).
Response headers
x-pdf-a: 3b
x-pdf-ua: 1
x-font-embedding: verified
x-font-policy: strict
x-compliance-status: <base64 JSON>
Font policy
fontPolicy: "warn" is the default. It reports advisory warnings. fontPolicy: "strict" rejects external stylesheets, non-inline @font-face rules, and system/generic font fallback with FONT_POLICY_STRICT.
Capability discovery
curl https://api.forkpdf.com/v1/compliance/capabilities
The response lists supported PDF/A flavors, PDF/UA versions, valid combinations, font policies, and the current forms limitation.
Errors
| Code | HTTP | Meaning |
|---|---|---|
EMPTY_COMPLIANCE | 400 | No pdfUa or pdfA was provided. |
UNSUPPORTED_COMPLIANCE_STANDARD | 400 | Unsupported PDF/A version. |
UNSUPPORTED_COMPLIANCE_COMBINATION | 400 | The PDF/UA and PDF/A versions cannot be combined. |
UNSUPPORTED_PDF_UA_VERSION | 400 | Only PDF/UA-1 and PDF/UA-2 are supported. |
COMPLIANCE_FORM_UNSUPPORTED | 400 | Compliance cannot be combined with pdfForm yet. |
FONT_POLICY_STRICT | 422 | Strict font policy rejected the source. |
Limitations
- Only one PDF/A flavor and one PDF/UA version can be claimed per document.
- PDF/A-2/3 require PDF 1.7; PDF/A-4 requires PDF 2.0.
- PDF/UA-1/2 remain experimental until the human screen-reader audit.
- Compliance and
pdfFormcannot be combined until tagged form fields are implemented. - PDF/A does not imply PDF/UA, and PDF/UA does not imply PDF/A.