Pdfa 1 rules
Local-only checks¶
These checks support parsing or local model preconditions and do not map to a standalone veraPDF profile predicate.
| Local rule | Note |
|---|---|
PDF-PARSE-001 |
Operational parser gate, not an ISO conformance rule. |
PDFA1B-CATALOG-001 |
Local object-model gate; the profile has no standalone catalog-exists rule. |
PDFA1B-CMAP-CID-RANGE-001 |
Local bounded precondition supporting the ISO 19005-1 ยง6.3.5 test-1 glyph-presence predicate: a CID decoded from a rendered byte must be within the descendant CIDFont's supported range before glyph presence can be evaluated. It is not an independently numbered veraPDF test. |
PDF/A-1a-only mappings¶
These rules apply only to PDF/A-1a; the mappings below are implemented locally and are checked against the pinned veraPDF 1.30.2 PDF/A-1a profile.
| Local rule | veraPDF rule | Strength | Pinned note |
|---|---|---|---|
PDFA1A-ID-CONFORMANCE-001 |
ISO 19005-1:2005:6.7.11:3 |
exact | For PDF/A-1a validation, the PDF/A Identification Schema declares conformance == "A"; PDF/A-1b accepts A or B through the shared identification check. |
PDFA1A-TAGGED-DOCUMENT-001 |
ISO 19005-1:2005:6.8.2.2:1 |
exact | The document catalog contains a MarkInfo dictionary with boolean Marked == true. |
PDFA1A-STRUCT-TREE-ROOT-001 |
ISO 19005-1:2005:6.8.3.3:1 |
exact | The document catalog contains a valid StructTreeRoot entry describing the logical structure hierarchy. |
PDFA1A-STRUCT-TREE-ROLE-MAP-001 |
ISO 19005-1:2005:6.8.3.4:1 |
exact | Every non-standard structure type resolves through RoleMap to a standard structure type. |
PDFA1A-STRUCT-TREE-ROLE-MAP-CYCLE-001 |
ISO 19005-1:2005:6.8.3.4:2 |
exact | The StructTreeRoot RoleMap contains no circular mapping. |
PDFA1A-LANG-001 |
ISO 19005-1:2005:6.8.4:1 |
exact | Every present catalog, structure-element, or property-list Lang value is empty or matches the pinned RFC 1766 language-tag syntax. |
PDFA1A-UNICODE-MAPPING-001 |
ISO 19005-1:2005:6.3.8:1 |
exact | Every rendered font has a usable ToUnicode CMap unless one of the PDF/A-1a rule's predefined-encoding, standard Type 1 character-name, or Adobe character-collection exceptions applies. |
PDF/A-1b-only mappings¶
These rules apply only to PDF/A-1b.
| Local rule | veraPDF rule | Strength | Pinned note |
|---|---|---|---|
PDFA1B-ID-CONFORMANCE-001 |
ISO 19005-1:2005:6.7.11:3 |
exact | Exact A/B value, multiplicity, duplicate-package, and applicability semantics are pinned by the complete metadata:* differential suite. |
Shared PDF/A-1a and PDF/A-1b mappings¶
These rules apply to both PDF/A-1 conformance levels.
| Local rule | veraPDF rule | Strength | Pinned note |
|---|---|---|---|
PDFA1B-STREAM-LZW-001 |
ISO 19005-1:2005:6.1.10:1 |
exact | For every selected indirect stream filter: internalRepresentation != "LZWDecode"; escaped names are decoded and direct, array, and indirect declarations are resolved. |
PDFA1B-INLINE-IMAGE-LZW-001 |
ISO 19005-1:2005:6.1.10:2 |
exact | No inline image in bounded executed page, Form, annotation-appearance, selected tiling-Pattern, or rendered-Type3 content declares internalRepresentation == "LZWDecode" (or the inline-image-only LZW spelling). |
PDFA1B-FILE-SPEC-EMBEDDED-FILE-001 |
ISO 19005-1:2005:6.1.11:1 |
exact | containsEF == false for every reachable file specification: dictionary-based values in the catalog's EmbeddedFiles name tree (Names arrays and recursive Kids traversed with configured reference-depth bounds), and a GoToR/SubmitForm action's /F entry (confirmed against veraPDF 1.30.2, which creates the same CosFileSpecification object either way). |
PDFA1B-NAMES-EMBEDDED-FILES-001 |
ISO 19005-1:2005:6.1.11:2 |
exact | For the catalog's dictionary-based /Names: EmbeddedFiles is absent; direct null is empty, while an indirect null remains a present key. |
PDFA1B-INTEGER-RANGE-001 |
ISO 19005-1:2005:6.1.12:1 |
exact | Every integer in the active revision's effective object graph is evaluated from its source token before lopdf narrowing; overwritten duplicate values and superseded revisions are inapplicable. |
PDFA1B-CMAP-MAX-CID-001 |
ISO 19005-1:2005:6.1.12:10 |
exact | Every embedded CMap's maximum CID is at most 65,535. |
PDFA1B-REAL-RANGE-001 |
ISO 19005-1:2005:6.1.12:2 |
exact | Every real in the active revision's effective object graph is evaluated from its source token before lopdf f32 normalization. |
PDFA1B-STRING-LENGTH-001 |
ISO 19005-1:2005:6.1.12:3 |
exact | Every effective literal or hexadecimal string value has fewer than 65,536 decoded bytes; original escape and odd-nibble forms are retained separately. |
PDFA1B-NAME-LENGTH-001 |
ISO 19005-1:2005:6.1.12:4 |
exact | Every effective name value has at most 127 decoded bytes after #xx processing; dictionary keys are outside the pinned CosName model. |
PDFA1B-ARRAY-LENGTH-001 |
ISO 19005-1:2005:6.1.12:5 |
exact | Every parsed array has at most 8,191 entries. |
PDFA1B-DICTIONARY-LENGTH-001 |
ISO 19005-1:2005:6.1.12:6 |
exact | Every effective dictionary has at most 4,095 unique non-null entries after last-duplicate-key selection; direct null entries are absent in the pinned COS size. |
PDFA1B-INDIRECT-OBJECT-COUNT-001 |
ISO 19005-1:2005:6.1.12:7 |
exact | Active non-free classic or compressed xref entries supply nrIndirects <= 8388607; configured input/object limits may fail operationally before a larger source is modeled. |
PDFA1B-GRAPHICS-STATE-NESTING-001 |
ISO 19005-1:2005:6.1.12:8 |
exact | Bounded executed page, Form, annotation-appearance, selected tiling-Pattern, and rendered-Type3 content maintains at most 28 saved graphics states; each nested content container starts its own graphics-state stack. |
PDFA1B-DEVICEN-COMPONENTS-001 |
ISO 19005-1:2005:6.1.12:9 |
exact | Every DeviceN colour space array reached anywhere in the parsed object graph, or through the bounded content-execution paths, declares at most 8 components. |
PDFA1B-OPTIONAL-CONTENT-001 |
ISO 19005-1:2005:6.1.13:1 |
exact | On the document catalog: OCProperties is empty or absent; direct null is empty, while any non-empty value, including an indirect null, is present. |
PDFA1B-HEADER-001 |
ISO 19005-1:2005:6.1.2:1 |
exact | The % marker of the file header occurs at byte offset 0 and is immediately followed by a PDF-major.minor version declaration. |
PDFA1B-HEADER-BINARY-COMMENT-001 |
ISO 19005-1:2005:6.1.2:2 |
exact | The header line is immediately followed by a comment whose first four bytes each have a decimal value above 127. |
PDFA1B-TRAILER-ID-001 |
ISO 19005-1:2005:6.1.3:1 |
exact | The applicable revision trailer is the first-page trailer for a validated linearized file and otherwise the last trailer. Any direct ID array is non-null in veraPDF's accessor, including empty and one-item arrays; string elements are concatenated and wrong-type elements are ignored. |
PDFA1B-ENCRYPTION-001 |
ISO 19005-1:2005:6.1.3:2 |
exact | isEncrypted != true |
PDFA1B-POST-EOF-DATA-001 |
ISO 19005-1:2005:6.1.3:3 |
exact | No bytes follow the last %%EOF marker except a single optional end-of-line marker. |
PDFA1B-LINEARIZED-TRAILER-ID-001 |
ISO 19005-1:2005:6.1.3:4 |
exact | In a linearized file, if ID is present in both the first-page and last trailer, the two values are identical. |
PDFA1B-XREF-SUBSECTION-SPACING-001 |
ISO 19005-1:2005:6.1.4:1 |
exact | Each classic-xref subsection in the /Prev and /XRefStm revision graph separates its starting object number and range with a single SPACE; recoverable alternate separators remain modeled failures. |
PDFA1B-XREF-EOL-001 |
ISO 19005-1:2005:6.1.4:2 |
exact | The xref keyword and each subsection header in every selected revision are separated by a single end-of-line marker; recoverable extra markers remain modeled failures. |
PDFA1B-XREF-STREAM-001 |
ISO 19005-1:2005:6.1.4:3 |
exact | The document contains no cross-reference stream. |
PDFA1B-HEX-STRING-LENGTH-001 |
ISO 19005-1:2005:6.1.6:1 |
exact | Every modeled hexadecimal string retains its original non-whitespace digit count, including veraPDF-recoverable malformed strings, and that count is even. |
PDFA1B-HEX-STRING-CHARACTERS-001 |
ISO 19005-1:2005:6.1.6:2 |
exact | Every modeled hexadecimal string retains whether all original non-whitespace characters were 0-9, A-F, or a-f; a recoverable invalid character is a conformance failure rather than PDF-PARSE-001. |
PDFA1B-STREAM-LENGTH-001 |
ISO 19005-1:2005:6.1.7:1 |
exact | The effective direct or indirect /Length, after last-duplicate-key selection, matches the independent raw byte extent from the first data byte through the byte before the EOL preceding endstream. |
PDFA1B-STREAM-EOL-001 |
ISO 19005-1:2005:6.1.7:2 |
exact | The stream keyword is followed by CRLF or a single LF, and endstream is preceded by an end-of-line marker. |
PDFA1B-STREAM-EXTERNAL-DATA-001 |
ISO 19005-1:2005:6.1.7:3 |
exact | For every selected indirect stream dictionary: F == null && FFilter == null && FDecodeParms == null; direct null and last-duplicate-key selection follow the pinned COS model. |
PDFA1B-INDIRECT-OBJECT-SYNTAX-001 |
ISO 19005-1:2005:6.1.8:1 |
exact | An indirect object's number and generation are separated from each other and from the obj/endobj keywords by a single whitespace character, bounded by end-of-line markers. |
PDFA1B-CONTENT-OPERATOR-001 |
ISO 19005-1:2005:6.2.10:1 |
exact | No undefined operator occurs in bounded executed page, Form, annotation-appearance, selected tiling-Pattern, or rendered-Type3 content, including compatibility sections delimited by BX and EX. Soft-mask /G content is excluded because veraPDF 1.30.2 does not create content-operation model objects for it. |
PDFA1B-OUTPUTINTENT-001 |
ISO 19005-1:2005:6.2.2:1 |
exact | For safely decoded linked streams: (deviceClass == "prtr" \|\| deviceClass == "mntr") && (colorSpace == "RGB " \|\| colorSpace == "CMYK" \|\| colorSpace == "GRAY") && version < 3.0. |
PDFA1B-OUTPUTINTENT-IDENTITY-001 |
ISO 19005-1:2005:6.2.2:2 |
exact | sameOutputProfileIndirect == true; missing/direct values are ignored and indirect non-stream targets participate by identity. |
PDFA1B-ICCBASED-001 |
ISO 19005-1:2005:6.2.3.2:1 |
exact | For safely decoded profiles reached through executed page, Form, selected Pattern, annotation-appearance, or rendered-Type3 content; invoked images and alternates; inline images; shadings; transparency-group CS; Indexed bases; Separation/DeviceN alternates; and default-device replacements: (deviceClass == "prtr" \|\| deviceClass == "mntr" \|\| deviceClass == "scnr" \|\| deviceClass == "spac") && (colorSpace == "RGB " \|\| colorSpace == "CMYK" \|\| colorSpace == "GRAY" \|\| colorSpace == "Lab ") && version < 3.0. Unselected resources, mask-only images, malformed direct profile streams, an uncoloured Pattern's underlying space, and soft-mask /G content remain inapplicable exactly where veraPDF 1.30.2 omits their model objects. |
PDFA1B-ICCBASED-COMPONENTS-001 |
ISO 19005-1:2005:6.2.3.2:2 |
exact | For every safely decoded ICC profile reached through the same exact colour-source population as test 1: N != null && ((N == 1 && colorSpace == "GRAY") \|\| (N == 3 && (colorSpace == "RGB " \|\| colorSpace == "Lab ")) \|\| (N == 4 && colorSpace == "CMYK")). |
PDFA1B-DEVICE-RGB-001 |
ISO 19005-1:2005:6.2.3.3:1 |
exact | For DeviceRGB uses reached through executed page, Form, selected Pattern, annotation-appearance, or rendered-Type3 content; images; inline images; shadings; transparency-group CS; Indexed bases; and Separation/DeviceN alternates after DefaultRGB substitution: gOutputCS != null && gOutputCS == "RGB ". The uncoloured Pattern underlying-space and soft-mask /G exclusions follow veraPDF 1.30.2. |
PDFA1B-DEVICE-CMYK-001 |
ISO 19005-1:2005:6.2.3.3:2 |
exact | For DeviceCMYK uses reached through the same bounded colour-source population and after DefaultCMYK substitution: gOutputCS != null && gOutputCS == "CMYK". |
PDFA1B-DEVICE-GRAY-001 |
ISO 19005-1:2005:6.2.3.3:3 |
exact | For DeviceGray uses reached through the same bounded colour-source population and after DefaultGray substitution: gOutputCS != null. |
PDFA1B-IMAGE-ALTERNATES-001 |
ISO 19005-1:2005:6.2.4:1 |
exact | For invoked Image XObjects: containsAlternates == false. |
PDFA1B-XOBJECT-OPI-001 |
ISO 19005-1:2005:6.2.4:2 |
exact | For invoked XObjects: containsOPI == false. |
PDFA1B-IMAGE-INTERPOLATE-001 |
ISO 19005-1:2005:6.2.4:3 |
exact | For invoked Image XObjects: Interpolate == false. |
PDFA1B-IMAGE-BPC-001 |
ISO 19005-1:2005:6.2.4:4 |
exact | For invoked Image XObjects: isMask == true \|\| BitsPerComponent == null \|\| BitsPerComponent == 1 \|\| BitsPerComponent == 2 \|\| BitsPerComponent == 4 \|\| BitsPerComponent == 8. |
PDFA1B-IMAGE-MASK-BPC-001 |
ISO 19005-1:2005:6.2.4:5 |
exact | For images reached through another image's /Mask reference: BitsPerComponent == null \|\| BitsPerComponent == 1. |
PDFA1B-FORM-POSTSCRIPT-001 |
ISO 19005-1:2005:6.2.5:1 |
exact | For invoked Form XObjects: (Subtype2 == null \|\| Subtype2 != "PS") && containsPS == false. |
PDFA1B-FORM-REFERENCE-001 |
ISO 19005-1:2005:6.2.6:1 |
exact | For invoked Form XObjects: containsRef == false. |
PDFA1B-XOBJECT-POSTSCRIPT-001 |
ISO 19005-1:2005:6.2.7:1 |
exact | For invoked XObjects: Subtype != "PS". |
PDFA1B-EXTGSTATE-TR-001 |
ISO 19005-1:2005:6.2.8:1 |
exact | For direct or indirect ExtGState dictionaries selected by gs in any executed content source: containsTR == false. |
PDFA1B-EXTGSTATE-TR2-001 |
ISO 19005-1:2005:6.2.8:2 |
exact | For direct or indirect ExtGState dictionaries selected by gs in any executed content source: containsTR2 == false \|\| TR2NameValue == "Default". |
PDFA1B-RENDERING-INTENT-001 |
ISO 19005-1:2005:6.2.9:1 |
exact | For rendering intents reached through executed page, Form, selected Pattern, annotation-appearance, or rendered-Type3 ri/gs operators; invoked primary, alternate, or soft-mask images; and inline-image Intent entries: the name is RelativeColorimetric, AbsoluteColorimetric, Perceptual, or Saturation. Non-name values, explicit-mask images, unexecuted resources, and soft-mask /G content remain inapplicable exactly as in veraPDF 1.30.2. |
PDFA1B-FONT-TYPE-001 |
ISO 19005-1:2005:6.3.2:1 |
exact | For fonts reached by bounded text-show paths: Type == "Font". Confirmed live: a font with a valid /Subtype but a missing /Type fails on both veraPDF and locally, with the failure attached to the same font object. /Type is resolved through indirection before this check. |
PDFA1B-FONT-SUBTYPE-001 |
ISO 19005-1:2005:6.3.2:2 |
exact | Modeled fonts have subtype Type1, MMType1, TrueType, Type3, Type0, CIDFontType0, or CIDFontType2; missing/unsupported subtypes create no veraPDF PDFont object and are inapplicable, so this predicate cannot fail on either side by construction (confirmed live: a font with an unsupported /Subtype, used normally, is fully compliant on both). /Subtype itself is resolved through indirection before this recognition check (confirmed live: an indirect reference to a supported name, e.g. /TrueType, is recognized exactly like a direct one, so the font is not wrongly treated as inapplicable and skipped). |
PDFA1B-FONT-BASEFONT-001 |
ISO 19005-1:2005:6.3.2:3 |
exact | For fonts reached by bounded text-show paths: Subtype == "Type3" \|\| fontName != null. Confirmed live: missing and wrong-type /BaseFont both fail on veraPDF and locally. /BaseFont is resolved through indirection before this check and before every other /BaseFont-driven decision in this file (the standard-14 exemption, and the Type1/CID subset-name gates for TYPE1-SUBSET-CHARSET-001/CID-SUBSET-CIDSET-001). |
PDFA1B-FONT-FIRSTCHAR-001 |
ISO 19005-1:2005:6.3.2:4 |
exact | For modeled simple fonts: isStandard == true \|\| FirstChar != null. isStandard (the standard-14-fonts exemption) is confirmed live to apply only to Type1/MMType1; a TrueType or Type3 font whose /BaseFont matches a standard-14 name is not exempt. |
PDFA1B-FONT-LASTCHAR-001 |
ISO 19005-1:2005:6.3.2:5 |
exact | For modeled simple fonts: isStandard == true \|\| LastChar != null. isStandard is confirmed live to apply only to Type1/MMType1, not TrueType/Type3. |
PDFA1B-FONT-WIDTHS-001 |
ISO 19005-1:2005:6.3.2:6 |
exact | For modeled simple fonts: isStandard == true \|\| (Widths_size != null && Widths_size == LastChar - FirstChar + 1). isStandard is confirmed live to apply only to Type1/MMType1, not TrueType/Type3. /Widths is resolved through indirection before its length is read (confirmed live: an indirect reference to a correctly sized array is accepted exactly like a direct one). |
PDFA1B-FONT-FILE-SUBTYPE-001 |
ISO 19005-1:2005:6.3.2:7 |
exact | For embedded font streams reached through modeled fonts: fontFileSubtype == null \|\| fontFileSubtype == "Type1C" \|\| fontFileSubtype == "CIDFontType0C". Confirmed live for both a simple font's own /FontDescriptor and a Type0 font's first descendant's /FontDescriptor (the recursive record_font call applies the same dictionary check to the descendant). The /FontFile3 stream's own /Subtype is resolved through indirection before this comparison. |
PDFA1B-TYPE0-CID-SYSTEM-INFO-001 |
ISO 19005-1:2005:6.3.3.1:1 |
exact | cmapName == "Identity-H" \|\| cmapName == "Identity-V" \|\| (CIDFontOrdering != null && CIDFontOrdering == CMapOrdering && CIDFontRegistry != null && CIDFontRegistry == CMapRegistry) over CMaps reached by bounded text-show paths. /Encoding is resolved through indirection before the Identity-H/V name check (confirmed live: an indirect reference to /Identity-H is exempt exactly like a direct one). CIDFontRegistry/CIDFontOrdering/CMapRegistry/CMapOrdering are each resolved through indirection before comparison (confirmed live: an indirect /Registry string compares equal to a matching direct one). Named CMaps resolve against the byte-exact 118-resource collection bundled in veraPDF 1.30.2; the composite_named_cmap fixture confirms /UniJIS-UCS2-H supplies Adobe/Japan1 system information and produces the same failed-rule delta. |
PDFA1B-CIDTOGIDMAP-001 |
ISO 19005-1:2005:6.3.3.2:1 |
exact | For used first descendants: Subtype != "CIDFontType2" \|\| CIDToGIDMap != null \|\| renderingMode == 3; a modeled map is Identity or a stream, resolved through indirection first (confirmed live: an indirect reference to the name /Identity is accepted exactly like a direct one). The descendant's own /Subtype is also resolved through indirection before this predicate's applicability check runs at all (confirmed live: an indirect reference to /CIDFontType2 is recognized exactly like a direct one, so a missing /CIDToGIDMap is still caught rather than the check being silently skipped). |
PDFA1B-CMAP-EMBEDDING-001 |
ISO 19005-1:2005:6.3.3.3:1 |
exact | For Type0 fonts reached by bounded text-show paths: CMapName == "Identity-H" \|\| CMapName == "Identity-V" \|\| containsEmbeddedFile == true. /Encoding is resolved through indirection before the Identity-H/V name check (confirmed live: an indirect reference to /Identity-H is exempt exactly like a direct one). The embedded CMap stream's own /CMapName entry (checked when /Encoding resolves to a stream rather than a name) is likewise resolved through indirection first. Reaching a resolved stream unconditionally satisfies containsEmbeddedFile, independent of that stream's own /CMapName -- so, unlike TYPE0-CID-SYSTEM-INFO-001, this predicate never needs to decode a predefined (non-embedded, named) CMap's contents, only detect its name-vs-stream shape; a named non-Identity CMap that is not embedded is confirmed live to fail exactly like the local unembedded_cmaps check (composite_named_cmap). |
PDFA1B-CMAP-WMODE-001 |
ISO 19005-1:2005:6.3.3.3:2 |
exact | For bounded embedded CMaps: the parsed stream WMode equals the stream-dictionary WMode, defaulting each missing value to zero, resolved through indirection first (confirmed live: an indirect /WMode value is resolved and compared exactly like a direct one). |
PDFA1B-FONT-EMBEDDING-001 |
ISO 19005-1:2005:6.3.4:1 |
exact | Implements Subtype == "Type3" \|\| Subtype == "Type0" \|\| renderingMode == 3 \|\| containsFontFile == true for bounded page, Form, annotation appearance, selected Pattern, and rendered Type3 text-show paths, including used Type0 descendants and every button Widget appearance state rather than only the /AS-selected one. containsFontFile for a /FontFile2 stream is valid_sfnt via ttf_parser::RawFace (SFNT signature + table directory only), confirmed live: a font whose maxp table is malformed enough that a full ttf_parser::Face::parse fails still counts as embedded on veraPDF. For a /FontFile3 stream, the stream's own /Subtype (Type1C/CIDFontType0C) is resolved through indirection before this check (confirmed live: an indirect reference to /Type1C is recognized exactly like a direct one, so a validly embedded program still counts as embedded rather than falling through to unembedded). A referenced XObject's own /Subtype (ContentExecutor::execute_xobject's == "Form" gate) is likewise resolved through indirection first. containsFontFile for a /FontFile (Type1) stream requires both the magic header (%!PS-AdobeFont or the 0x80 0x01 PFB marker) and an eexec/0x80 0x02 marker somewhere in the stream (confirmed live: a stream with the header but no encrypted section at all still fails on veraPDF -- the header alone is not sufficient). containsFontFile for a /FontFile3 (Type1C/CIDFontType0C) stream requires the bytes to parse as a well-formed CFF table via ttf_parser::cff::Table::parse, not merely match the header-byte shape (confirmed live: a stream matching only bytes[0] in {1,2} and bytes[2] <= len but with no parseable CFF structure beyond the header still fails on veraPDF). |
PDFA1B-TYPE1-GLYPH-PRESENCE-001 |
ISO 19005-1:2005:6.3.5:1 |
exact | For simple Type1, MMType1, Type1C, and Type3 fonts reached by bounded text-show paths: the selected PDF/program encoding resolves every rendered byte to a glyph present in the bounded embedded program or Type3 /CharProcs. PDF simple encodings use veraPDF 1.30.2's exact Standard, MacRoman, MacExpert, and WinAnsi byte-to-name tables plus /Differences; for Type1 and Type1C only, an unmapped PDF byte falls back to the embedded program encoding. The real StandardSymL fixture family pins program fallback, PDF /Differences, WinAnsi override to an absent glyph, and valid/missing outcomes live against veraPDF. Type3 MacRoman byte 202 and MacExpert byte 33 cases pin the predefined tables. The older deliberately incomplete hand-rolled Type1 byte programs remain local parser-hardening fixtures only because veraPDF 1.30.2 crashes while parsing them; this is a fixture-shape exception, not an unmodeled result for a program veraPDF can process. |
PDFA1B-TRUETYPE-GLYPH-PRESENCE-001 |
ISO 19005-1:2005:6.3.5:1 |
exact | For TrueType, CIDFontType2, and CID-keyed CFF (CIDFontType0C) fonts reached by bounded text-show paths: a bounded embedded program defines a glyph for every rendered byte or CID. For CIDFontType2, /CIDToGIDMap is resolved through indirection before the /Identity name check; an unresolvable map is treated as inapplicable because PDFA1B-CIDTOGIDMAP-001 separately flags a missing/invalid map. TrueType lookup uses independently bounded SFNT cmap and loca reads rather than a whole-font parse, including Unicode, Windows Symbol (0xF000 + byte with direct-byte fallback), and other direct byte-oriented subtables. The malformed-maxp fixture confirms live that veraPDF still reports the missing glyph when maxp is unreadable but cmap and short loca prove the referenced GID is outside the program. |
PDFA1B-TYPE1-SUBSET-CHARSET-001 |
ISO 19005-1:2005:6.3.5:2 |
exact | For a subset Type1/MMType1/Type1C font (BaseFont with a six-uppercase-letter subset tag): the descriptor /CharSet names every rendered embedded glyph selected by the PDF /Encoding. /BaseFont, /Encoding, /BaseEncoding, /Differences codes/names, and the embedded stream subtype are resolved through bounded indirection. Matching veraPDF's GFGlyph.name, this predicate deliberately does not fall back to the Type1 or Type1C program encoding when the PDF encoding supplies no name; real StandardSymL and minimal Type1C cases pin complete, incomplete, and program-encoding-ignored outcomes live. |
PDFA1B-CID-SUBSET-CIDSET-001 |
ISO 19005-1:2005:6.3.5:3 |
exact | For a subset CIDFontType0/CIDFontType2 descendant: the descriptor /CIDSet stream's bits identify every rendered CID as present. The descendant's own /Subtype and /BaseFont are both resolved through indirection before the subset-tag check (confirmed live: an indirect reference to a subset-tagged /BaseFont is recognized exactly like a direct one, so a /CIDSet omitting a rendered CID is still caught rather than the descendant being treated as non-subset and the check silently skipped). Rendered codes are decoded through Identity, explicit embedded, inherited usecmap, and the byte-exact predefined CMap collection bundled in veraPDF 1.30.2; composite_named_cmap_cidset_real_program pins /UniJIS-UCS2-H code 003F to CID 32 and reproduces veraPDF's missing-CIDSet failure. |
PDFA1B-TRUETYPE-GLYPH-WIDTH-001 |
ISO 19005-1:2005:6.3.6:1 |
exact | For TrueType, CIDFontType2, Type1, Type1C/CIDFontType0C, and Type3 fonts reached by bounded text-show paths: a rendered byte or CID's program width agrees with its dictionary-declared width within 1 unit, matching veraPDF's inclusive abs(...) <= 1 tolerance. Type1 uses the same PDF-then-program encoding selection as glyph presence and gives an absent selected glyph a program width of zero; Type3 reads the leading d0/d1 width and likewise uses zero when the CharProc/width is absent. Real Type1 present/missing/mismatch cases and Type3 d0, d1, zero-width missing-CharProc, and one-unit-boundary cases are pinned live. For CIDFontType2, /CIDToGIDMap is resolved through indirection before /Identity; for simple fonts, the /Widths array and entries are resolved; for CID fonts, /DW and /W single entries are resolved. TrueType advances and units-per-em are independently bounded reads from hmtx/hhea/head, so malformed unrelated tables do not introduce a whole-font parse gate. |
PDFA1B-TRUETYPE-NONSYMBOLIC-ENCODING-001 |
ISO 19005-1:2005:6.3.7:1 |
exact | For used TrueType fonts whose descriptor Flags do not set Symbolic: (Encoding == "MacRomanEncoding" \|\| Encoding == "WinAnsiEncoding") && containsDifferences == false. When /Encoding resolves to a dictionary, its /BaseEncoding entry is resolved through indirection before this comparison. |
PDFA1B-TRUETYPE-SYMBOLIC-ENCODING-001 |
ISO 19005-1:2005:6.3.7:2 |
exact | For used TrueType fonts whose descriptor Flags set Symbolic: Encoding == null; direct and indirect Null values are both resolved and compared as null. |
PDFA1B-TRUETYPE-SYMBOLIC-CMAP-001 |
ISO 19005-1:2005:6.3.7:3 |
exact | For recognized embedded symbolic TrueType programs: nrCmaps == 1, read from the bounded SFNT cmap table header via ttf_parser::RawFace (confirmed live: this holds even when the rest of the font -- maxp, hhea, ... -- is malformed enough that a full ttf_parser::Face::parse fails). |
PDFA1B-EXTGSTATE-SMASK-001 |
ISO 19005-1:2005:6.4:1 |
exact | For direct or indirect ExtGState dictionaries selected by gs in any veraPDF-executed content source: containsSMask == false \|\| SMaskNameValue == "None". |
PDFA1B-XOBJECT-SMASK-001 |
ISO 19005-1:2005:6.4:2 |
exact | For direct or indirect XObjects reached through Do, appearances, image masks, soft masks, or alternates in the bounded invoked graph: containsSMask == false. |
PDFA1B-TRANSPARENCY-GROUP-001 |
ISO 19005-1:2005:6.4:3 |
exact | For page Groups and all Form Groups reached through veraPDF's bounded invoked graph, including appearances: S != "Transparency". A soft-mask /G Form is deliberately excluded because veraPDF 1.30.2 does not expose its Group model. |
PDFA1B-EXTGSTATE-BLEND-MODE-001 |
ISO 19005-1:2005:6.4:4 |
exact | For direct or indirect ExtGState dictionaries selected by gs in any veraPDF-executed content source: containsBM == false \|\| BMNameValue == "Normal" \|\| BMNameValue == "Compatible". The canonical mutation uses a valid PDF/A-1b document and changes only the used blend mode to /Multiply, producing the exact local and veraPDF failure delta. |
PDFA1B-EXTGSTATE-STROKE-ALPHA-001 |
ISO 19005-1:2005:6.4:5 |
exact | For modeled numeric values in direct or indirect ExtGState dictionaries selected in any veraPDF-executed content source: CA == null \|\| abs(CA - 1.0) < 0.000001. |
PDFA1B-EXTGSTATE-FILL-ALPHA-001 |
ISO 19005-1:2005:6.4:6 |
exact | For modeled numeric values in direct or indirect ExtGState dictionaries selected in any veraPDF-executed content source: ca == null \|\| abs(ca - 1.0) < 0.000001. |
PDFA1B-ANNOTATION-SUBTYPE-001 |
ISO 19005-1:2005:6.5.2:1 |
exact | For direct or indirect page /Annots entries resolving specifically to COS dictionaries (not streams): the resolved Subtype is Text, Link, FreeText, Line, Square, Circle, Highlight, Underline, Squiggly, StrikeOut, Stamp, Ink, Popup, Widget, PrinterMark, or TrapNet; unreferenced and stream-backed annotation-looking objects are inapplicable. |
PDFA1B-ANNOTATION-OPACITY-001 |
ISO 19005-1:2005:6.5.3:1 |
exact | For page-annotation COS dictionaries, direct or indirect numeric CA is resolved before applying CA == null \|\| CA == 1.0; missing and nonnumeric values are exposed as null. |
PDFA1B-ANNOTATION-FLAGS-001 |
ISO 19005-1:2005:6.5.3:2 |
exact | For page-annotation COS dictionaries, direct or indirect integer F is resolved before applying F != null && (F & 4) == 4 && (F & 1) == 0 && (F & 2) == 0 && (F & 32) == 0; missing and noninteger values fail. |
PDFA1B-ANNOTATION-COLOR-001 |
ISO 19005-1:2005:6.5.3:3 |
exact | For page-annotation COS dictionaries, containsC/containsIC are true only when the resolved value is an array (scalar, null, and missing values are false); (containsC == false && containsIC == false) \|\| gOutputCS == "RGB " then uses the pinned PDF/A-1 output-colour fold. |
PDFA1B-ANNOTATION-AP-ENTRIES-001 |
ISO 19005-1:2005:6.5.3:4 |
exact | For page-annotation COS dictionaries, AP is exposed only when it resolves specifically to a COS dictionary; absent, scalar, and stream values are null, while a modeled appearance dictionary passes only when its joined key set is exactly N. |
PDFA1B-WIDGET-BUTTON-APPEARANCE-001 |
ISO 19005-1:2005:6.5.3:5 |
exact | When AP == "N", resolved Subtype == "Widget", and direct or inherited FT == "Btn" (walking dictionary- and stream-backed parents with bounded cycle detection), N_type == "Dict" and its state dictionary contains at least one resolved appearance stream; scalar-only or empty state dictionaries fail. |
PDFA1B-ANNOTATION-NORMAL-APPEARANCE-001 |
ISO 19005-1:2005:6.5.3:6 |
exact | When AP == "N" and the annotation is not a resolved button Widget, the resolved N entry is dictionary-based and specifically stream-backed (N_type == "Stream"); missing, scalar, and state-dictionary values fail. |
PDFA1B-ACTION-TYPE-001 |
ISO 19005-1:2005:6.6.1:1 |
exact | For actions reached from catalog OpenAction, the five catalog AA triggers, page O/C triggers, annotation A and ten AA triggers, field K/F/V/C triggers, outline A, and dictionary/array Next chains: the resolved S is GoTo, GoToR, Thread, URI, Named, or SubmitForm. Source-specific COS-dictionary versus dictionary-based shape gates match veraPDF, including stream-backed outline actions but not stream-backed OpenAction, annotation action, AA action, or Next entries. |
PDFA1B-NAMED-ACTION-001 |
ISO 19005-1:2005:6.6.1:2 |
exact | For every reached action whose resolved S == "Named", direct or indirect N resolves to NextPage, PrevPage, FirstPage, or LastPage; missing, wrong-type, and other names fail. |
PDFA1B-WIDGET-ACTION-001 |
ISO 19005-1:2005:6.6.1:3 |
exact | For COS-dictionary Widget annotations created from page /Annots after resolving Subtype: containsA == false; non-null key presence fails regardless of value type, direct null is empty, and stream-backed or field-only Widget-looking objects are inapplicable. |
PDFA1B-WIDGET-ADDITIONAL-ACTIONS-001 |
ISO 19005-1:2005:6.6.2:1 |
exact | For COS-dictionary Widget annotations created from page /Annots after resolving Subtype: containsAA == false; non-null key presence fails regardless of value type, direct null is empty, and stream-backed or field-only Widget-looking objects are inapplicable. |
PDFA1B-FIELD-ADDITIONAL-ACTIONS-001 |
ISO 19005-1:2005:6.6.2:2 |
exact | For dictionary- or stream-backed objects directly in a dictionary-based catalog AcroForm /Fields, plus dictionary-based /Kids descendants having a non-null /T: containsAA == false. Top-level objects remain fields without /T; unnamed child encounters do not suppress a later top-level occurrence; field, child, and action graphs are cycle- and depth-bounded. |
PDFA1B-CATALOG-ADDITIONAL-ACTIONS-001 |
ISO 19005-1:2005:6.6.2:3 |
exact | containsAA == false on the document catalog; key presence is tested regardless of value type. |
PDFA1B-ID-SCHEMA-001 |
ISO 19005-1:2005:6.7.11:1 |
exact | Exact main-package selection, malformed-package recovery, and namespace-presence semantics are pinned by the complete metadata:* veraPDF 1.30.2 differential suite. |
PDFA1B-ID-PART-001 |
ISO 19005-1:2005:6.7.11:2 |
exact | Exact Java Integer.parseInt value, multiplicity, duplicate-package, and applicability semantics are pinned by the complete metadata:* differential suite. |
PDFA1B-ID-PART-PREFIX-001 |
ISO 19005-1:2005:6.7.11:4 |
exact | partPrefix == null \|\| partPrefix == "pdfaid"; lexical source-QName selection and applicability match veraPDF 1.30.2. |
PDFA1B-ID-CONFORMANCE-PREFIX-001 |
ISO 19005-1:2005:6.7.11:5 |
exact | conformancePrefix == null \|\| conformancePrefix == "pdfaid"; lexical source-QName selection and applicability match veraPDF 1.30.2. |
PDFA1B-ID-AMD-PREFIX-001 |
ISO 19005-1:2005:6.7.11:6 |
exact | amdPrefix == null \|\| amdPrefix == "pdfaid"; lexical source-QName selection matches veraPDF, and a missing amd property is inapplicable. |
PDFA1B-METADATA-STRUCTURE-001 |
ISO 19005-1:2005:6.7.2:1 |
exact | containsMetadata == true |
PDFA1B-METADATA-FILTER-001 |
ISO 19005-1:2005:6.7.2:2 |
exact | isCatalogMetadata == false \|\| Filter == null |
PDFA1B-INFO-CREATIONDATE-001 |
ISO 19005-1:2005:6.7.3:1 |
exact | Exact PDF and XMP date parsing covers reduced precision, offsets, local-time/DST behavior, Java Gregorian cutover semantics, Unicode PDF digits, and millisecond comparison. |
PDFA1B-INFO-TITLE-001 |
ISO 19005-1:2005:6.7.3:2 |
exact | Exact Info PDF-string decoding and XMP 2004 localized-text selection, including normalized language qualifiers and fallback order. |
PDFA1B-INFO-AUTHOR-001 |
ISO 19005-1:2005:6.7.3:3 |
exact | Exact Info PDF-string decoding, ordered-array extraction, simple-item validation, and sole-entry multiplicity. |
PDFA1B-INFO-SUBJECT-001 |
ISO 19005-1:2005:6.7.3:4 |
exact | Exact Info PDF-string decoding and XMP 2004 localized-text selection, including normalized language qualifiers and fallback order. |
PDFA1B-INFO-KEYWORDS-001 |
ISO 19005-1:2005:6.7.3:5 |
exact | Exact Info PDF-string decoding and XMP simple-property extraction across compact, expanded, and qualified RDF forms. |
PDFA1B-INFO-CREATOR-001 |
ISO 19005-1:2005:6.7.3:6 |
exact | Exact Info PDF-string decoding and XMP simple-property extraction across compact, expanded, and qualified RDF forms. |
PDFA1B-INFO-PRODUCER-001 |
ISO 19005-1:2005:6.7.3:7 |
exact | Exact Info PDF-string decoding, including the removal of one trailing NUL, and XMP simple-property extraction. |
PDFA1B-INFO-MODDATE-001 |
ISO 19005-1:2005:6.7.3:8 |
exact | Exact PDF and XMP date parsing covers reduced precision, offsets, local-time/DST behavior, Java Gregorian cutover semantics, Unicode PDF digits, and millisecond comparison. |
PDFA1B-XMP-PACKET-BYTES-001 |
ISO 19005-1:2005:6.7.5:1 |
exact | On the last xpacket processing instruction encountered before the main RDF node: bytes == null, using veraPDF's case-sensitive, unanchored quoted-assignment matcher. |
PDFA1B-XMP-PACKET-ENCODING-001 |
ISO 19005-1:2005:6.7.5:2 |
exact | On the same selected packet header: encoding == null, using the corresponding case-sensitive, unanchored quoted-assignment matcher. |
PDFA1B-XMP-EXTENSION-FIELDS-001 |
ISO 19005-1:2005:6.7.8:1 |
exact | containsUndefinedFields == false, using the complete pinned namespace and allowed-child sets for schema definitions, properties, value types, and fields. |
PDFA1B-XMP-EXTENSION-PROPERTY-CATEGORY-001 |
ISO 19005-1:2005:6.7.8:10 |
exact | isCategoryValidText == true && (category == "external" \|\| category == "internal") && categoryPrefix == "pdfaProperty". |
PDFA1B-XMP-EXTENSION-PROPERTY-DESCRIPTION-001 |
ISO 19005-1:2005:6.7.8:11 |
exact | isDescriptionValidText == true && descriptionPrefix == "pdfaProperty". |
PDFA1B-XMP-EXTENSION-VALUE-TYPE-NAME-001 |
ISO 19005-1:2005:6.7.8:12 |
exact | isTypeValidText == true && typePrefix == "pdfaType". |
PDFA1B-XMP-EXTENSION-VALUE-TYPE-NAMESPACE-001 |
ISO 19005-1:2005:6.7.8:13 |
exact | isNamespaceURIValidURI == true && namespaceURIPrefix == "pdfaType". |
PDFA1B-XMP-EXTENSION-VALUE-TYPE-PREFIX-001 |
ISO 19005-1:2005:6.7.8:14 |
exact | isPrefixValidText == true && prefixPrefix == "pdfaType". |
PDFA1B-XMP-EXTENSION-VALUE-TYPE-DESCRIPTION-001 |
ISO 19005-1:2005:6.7.8:15 |
exact | isDescriptionValidText == true && descriptionPrefix == "pdfaType". |
PDFA1B-XMP-EXTENSION-VALUE-TYPE-FIELDS-001 |
ISO 19005-1:2005:6.7.8:16 |
exact | isFieldValidSeq == true && (fieldPrefix == null \|\| fieldPrefix == "pdfaType"); absence is allowed. |
PDFA1B-XMP-EXTENSION-FIELD-NAME-001 |
ISO 19005-1:2005:6.7.8:17 |
exact | isNameValidText == true && namePrefix == "pdfaField". |
PDFA1B-XMP-EXTENSION-FIELD-VALUE-TYPE-001 |
ISO 19005-1:2005:6.7.8:18 |
exact | isValueTypeValidText == true && isValueTypeDefined == true && valueTypePrefix == "pdfaField". |
PDFA1B-XMP-EXTENSION-FIELD-DESCRIPTION-001 |
ISO 19005-1:2005:6.7.8:19 |
exact | isDescriptionValidText == true && descriptionPrefix == "pdfaField". |
PDFA1B-XMP-EXTENSION-CONTAINER-001 |
ISO 19005-1:2005:6.7.8:2 |
exact | For every selected pdfaExtension:schemas: isValidBag == true && prefix == "pdfaExtension". |
PDFA1B-XMP-EXTENSION-SCHEMA-NAME-001 |
ISO 19005-1:2005:6.7.8:3 |
exact | For every schema definition: isSchemaValidText == true && schemaPrefix == "pdfaSchema". |
PDFA1B-XMP-EXTENSION-SCHEMA-NAMESPACE-001 |
ISO 19005-1:2005:6.7.8:4 |
exact | isNamespaceURIValidURI == true && namespaceURIPrefix == "pdfaSchema"; the pinned URI validator requires a simple XMP node. |
PDFA1B-XMP-EXTENSION-SCHEMA-PREFIX-001 |
ISO 19005-1:2005:6.7.8:5 |
exact | isPrefixValidText == true && prefixPrefix == "pdfaSchema". |
PDFA1B-XMP-EXTENSION-SCHEMA-PROPERTIES-001 |
ISO 19005-1:2005:6.7.8:6 |
exact | isPropertyValidSeq == true && (propertyPrefix == null \|\| propertyPrefix == "pdfaSchema"); absence is allowed. |
PDFA1B-XMP-EXTENSION-SCHEMA-VALUE-TYPES-001 |
ISO 19005-1:2005:6.7.8:7 |
exact | isValueTypeValidSeq == true && (valueTypePrefix == null \|\| valueTypePrefix == "pdfaSchema"); absence is allowed. |
PDFA1B-XMP-EXTENSION-PROPERTY-NAME-001 |
ISO 19005-1:2005:6.7.8:8 |
exact | isNameValidText == true && namePrefix == "pdfaProperty". |
PDFA1B-XMP-EXTENSION-PROPERTY-VALUE-TYPE-001 |
ISO 19005-1:2005:6.7.8:9 |
exact | isValueTypeValidText == true && isValueTypeDefined == true && valueTypePrefix == "pdfaProperty". |
PDFA1B-XMP-001 |
ISO 19005-1:2005:6.7.9:1 |
exact | Complete bounded XMP 2004 RDF serialization, root selection, duplicate/conflict handling, qualified values, source-QName semantics, and extension-schema object creation match veraPDF 1.30.2. |
PDFA1B-XMP-PREDEFINED-PROPERTY-001 |
ISO 19005-1:2005:6.7.9:2 |
exact | Every top-level XMP property in a predefined namespace is checked against the complete 172-entry XMP 2004 table reflected from the pinned release. |
PDFA1B-XMP-EXTENSION-PROPERTY-DEFINITION-001 |
ISO 19005-1:2005:6.7.9:2 |
exact | Every top-level extension property is resolved against the exact current-package extension-schema registration and replacement semantics. |
PDFA1B-XMP-PREDEFINED-VALUE-TYPE-001 |
ISO 19005-1:2005:6.7.9:3 |
exact | Every predefined property is checked with the pinned simple, array, LangAlt, date, XPath, GPS, and structured-type validators. |
PDFA1B-XMP-EXTENSION-PROPERTY-VALUE-SHAPE-001 |
ISO 19005-1:2005:6.7.9:3 |
exact | Every extension property is checked with the pinned declared simple, array, and structured field/value-type semantics. |
PDFA1B-ACROFORM-NEED-APPEARANCES-001 |
ISO 19005-1:2005:6.9:1 |
exact | For a modeled catalog AcroForm: NeedAppearances == null \|\| NeedAppearances == false; a present non-boolean value follows veraPDF's conservative true fallback and fails. |
PDFA1B-WIDGET-APPEARANCE-001 |
ISO 19005-1:2005:6.9:2 |
exact | For COS-dictionary Widget annotations created from page /Annots after resolving Subtype: AP != null; veraPDF exposes AP only when it resolves specifically to a COS dictionary, so missing, stream, and scalar values fail while an empty or indirect dictionary passes; AP is not inherited and field-only, unreferenced, and stream-backed Widget-looking objects are inapplicable. |