Is my PDF really PDF/A, and why would an archive reject it?
This screen reads which PDF/A version a file claims and runs eight checks for the usual reasons archives reject files: fonts left out, a password, JavaScript and a missing colour profile. In our test, a file claiming PDF/A-2b still failed because it had no colour profile. Passing here does not certify the file; an archive may still run its own validator.
How do I check if a PDF is PDF/A?
Upload it here. A PDF/A file states its part and level, such as PDF/A-2b, in its hidden details, and the screen reads that claim. If nothing is declared, the file is not PDF/A, however tidy it is. Archives and validators look for that declaration first.
Why does my PDF/A file fail?
The usual causes are fonts that are not embedded, encryption, JavaScript and a missing colour profile. A claim alone proves nothing: our test file declared PDF/A-2b but left Helvetica out. Fix it at the source. Export again from the app that made the file, with its PDF/A option turned on.
Is this a full PDF/A validator?
No. It screens eight common requirements. It does not check transparency, how each page uses colour, attachment rules or every forbidden action. If your archive names a validator such as veraPDF, run that too before you submit.
Reading the declaration: part and level
A PDF/A file announces itself in its XMP metadata with two properties: pdfaid:part, the number of the ISO 19005 part it follows, and pdfaid:conformance, the level letter. The checker accepts both the element form and the attribute form such as pdfaid:part='2', and joins them into a label like PDF/A-2b. Parts 1 to 3 need a level letter to count as a declaration; part 4 does not use one.
- Level b (basic) aims to preserve how pages look.
- Level u adds a requirement that all text can be mapped to Unicode, so it can be searched and copied.
- Level a adds tagged structure and other accessibility requirements on top of u.
| Part | Standard and base PDF | Levels | Header version the screen expects |
|---|---|---|---|
| PDF/A-1 | ISO 19005-1:2005, based on PDF 1.4 | a, b | 1.4 or later |
| PDF/A-2 | ISO 19005-2:2011, based on ISO 32000-1 (PDF 1.7) | a, b, u | 1.6 or later |
| PDF/A-3 | ISO 19005-3:2012, as part 2 but allowing attachments of any format | a, b, u | 1.6 or later |
| PDF/A-4 | ISO 19005-4:2020, based on PDF 2.0 | none; optional 4e and 4f variants | 2.0 |
The eight indicators and their outcomes
The overall line reads "PDF/A indicators pass" only when a declaration exists and no indicator failed. Warnings do not change it. The declaration is matched in the file's raw bytes, so metadata stored in a compressed stream would not be read. The output intent and colour checks also look inside compressed object streams, where Ghostscript 10 and most PDF 1.5 writers keep the catalog.
| Indicator | Pass | Otherwise |
|---|---|---|
| PDF/A Conformance Declaration | Declared: PDF/A-2b (for example) | Fail: No pdfaid namespace found in XMP metadata |
| XMP Metadata Present | XMP metadata stream present | Warning: No XMP metadata stream detected |
| Font Embedding | 3/3 fonts embedded (for example) | Fail: lists up to three fonts not embedded; Warning when fonts could not be analysed |
| No Encryption | No encryption detected | Fail: Document is encrypted |
| PDF Version Compatibility | PDF version 1.7 (for example) | Warning when the header is older than the declared part expects |
| No JavaScript | No JavaScript detected | Fail: JavaScript found in document |
| Output Intent | PDF/A output intent (GTS_PDFA1) present | Fail: No PDF/A output intent and no ICC-based colour space found; Warning when only ICC-based or calibrated colour spaces are present |
| Color Space | ICC color profile detected | Warning: No ICC profile detected |
Three measured files
The same short PostScript page was turned into PDFs in different ways, and one hand-built file had a declaration typed into its XMP. Each result below is the checker's own output.
Results by file
1. Ghostscript with -dPDFA=2, no ICC profile supplied Declared: PDF/A-2b. 6 pass, 1 fail (No PDF/A output intent and no ICC-based colour space found), 1 warning (No ICC profile detected). Overall: PDF/A indicators fail. qpdf shows the file has no OutputIntents entry at all. The same page made with Ghostscript\'s PDFA_def.ps and its sRGB profile passes Output Intent and Color Space. 2. Hand-built file declaring PDF/A-2b, Helvetica not embedded Font Embedding: fail, "1 font(s) not embedded: Helvetica". Overall: PDF/A indicators fail. 3. Ghostscript with -dPDFSETTINGS=/prepress, no PDF/A option All fonts embedded as subsets, XMP present, no encryption. Declaration: fail, "No pdfaid namespace found in XMP metadata". Overall: PDF/A indicators fail.
What the three results teach
File 1 is the important case. It declares PDF/A-2b but has no output intent, the embedded ICC profile that PDF/A uses to define what device colours mean. Ghostscript normally receives that profile through a PDF/A definition file, and we did not supply one. Until 12 October 2026 this screen had no output intent indicator and reported the file as passing; it now fails it. A pass on this screen is still a reason to run a formal validator such as veraPDF, not a substitute for it.
File 2 shows that a declaration is only a claim. Anyone can write pdfaid:part into the metadata; the fonts in that file were still missing. File 3 shows the reverse: a technically tidy file is not PDF/A until it is exported as PDF/A, because the declaration is what archives and validators look for first.
Requirements outside this screen
- Which colour spaces the pages actually use. The output intent indicator checks the catalog and colour-space dictionaries, not the drawing instructions inside each page.
- Transparency, blend modes and optional content restrictions that differ by part.
- Annotation appearance streams and forbidden actions other than JavaScript, such as launching files.
- Unicode mapping for level u and tagged structure for level a.
- Rules for attachments in PDF/A-3 and the 4f variant.
- Agreement between the XMP metadata and the Info dictionary.
Fixing the common failures
A missing declaration or unembedded font is best fixed at the source: export again from the authoring application with its PDF/A option selected, rather than editing the finished PDF. Encryption has to be removed entirely, because PDF/A does not allow it even without an open password. JavaScript usually comes from interactive form features; flatten or remove them before conversion. After re-exporting, run this screen again and then a full validator if the file is going into a formal archive.
Last updated . Indicator rules are quoted from the checker's source code. The three sample results were produced on 12 October 2026 by running the same service locally on files we made with Ghostscript 10.08.0 and on a hand-built test PDF; structure was confirmed with qpdf 12.4.2 and Poppler 26.10.0.