Skip to content
Boris Doubrov edited this page May 24, 2024 · 9 revisions

PDF/UA-1 validation rules

Rule 5-1

Requirement

The PDF/UA version and conformance level of a file shall be specified using the PDF/UA Identification extension schema.

Error details

The document metadata stream doesn't contains PDF/UA Identification Schema.

  • Object type: MainXMPPackage
  • Test condition: UAIdentification_size == 1
  • Specification: ISO 14289-1:2014

Rule 5-2

Requirement

The value of "pdfuaid:part" shall be the part number of the International Standard to which the file conforms.

Error details

The "part" property of the PDF/UA Identification Schema is not 1 for PDF/UA-1 conforming file.

  • Object type: PDFUAIdentification
  • Test condition: part == 1
  • Specification: ISO 14289-1:2014

Rule 5-3

Requirement

Property "part" of the PDF/UA Identification Schema shall have namespace prefix "pdfuaid"

Error details

Property "part" of the PDF/UA Identification Schema has an invalid namespace prefix

  • Object type: PDFUAIdentification
  • Test condition: partPrefix == null || partPrefix == "pdfuaid"
  • Specification: ISO 14289-1:2014

Rule 5-4

Requirement

Property "amd" of the PDF/UA Identification Schema shall have namespace prefix "pdfuaid"

Error details

Property "amd" of the PDF/UA Identification Schema has an invalid namespace prefix

  • Object type: PDFUAIdentification
  • Test condition: amdPrefix == null || amdPrefix == "pdfuaid"
  • Specification: ISO 14289-1:2014

Rule 5-5

Requirement

Property "corr" of the PDF/UA Identification Schema shall have namespace prefix "pdfuaid"

Error details

Property "corr" of the PDF/UA Identification Schema has an invalid namespace prefix

  • Object type: PDFUAIdentification
  • Test condition: corrPrefix == null || corrPrefix == "pdfuaid"
  • Specification: ISO 14289-1:2014

Rule 7.1-1

Requirement

Content marked as Artifact should not present inside tagged content

Error details

Content marked as Artifact is present inside tagged content

  • Object type: SEMarkedContent
  • Test condition: tag != 'Artifact' || isTaggedContent == false
  • Specification: ISO 14289-1:2014

Rule 7.1-2

Requirement

Tagged content should not present inside content marked as Artifact

Error details

Tagged content is present inside content marked as Artifact

  • Object type: SEMarkedContent
  • Test condition: isTaggedContent == false || parentsTags.split('&').filter(elem => elem == 'Artifact').length == 0
  • Specification: ISO 14289-1:2014

Rule 7.1-3

Requirement

Content shall be marked as Artifact or tagged as real content

Error details

Content is neither marked as Artifact nor tagged as real content

  • Object type: SESimpleContentItem
  • Test condition: isTaggedContent == true || parentsTags.split('&').filter(elem => elem == 'Artifact').length > 0
  • Specification: ISO 14289-1:2014

Rule 7.1-4

Requirement

Files shall have a Suspects value of false(ISO 32000-1:2008, Table 321)

Error details

Suspects entry has a value of true

  • Object type: CosDocument
  • Test condition: Suspects != true
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.7.1

Rule 7.1-5

Requirement

All non-standard structure types shall be mapped to the nearest functionally equivalent standard type, as defined in ISO 32000-1:2008, 14.8.4, in the role map dictionary of the structure tree root. This mapping may be indirect; within the role map a non-standard type can map directly to another non-standard type, but eventually the mapping shall terminate at a standard type.

Error details

Non-standard structure type is not mapped to a standard type

  • Object type: SENonStandard
  • Test condition: isNotMappedToStandardType == false
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4

Rule 7.1-6

Requirement

A circular mapping shall not exist

Error details

A circular mapping exists

  • Object type: PDStructElem
  • Test condition: circularMappingExist != true
  • Specification: ISO 14289-1:2014

Rule 7.1-7

Requirement

Standard tags defined in ISO 32000-1:2008, 14.8.4, shall not be remapped.

Error details

Standard type is remapped

  • Object type: PDStructElem
  • Test condition: remappedStandardType == null
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4

Rule 7.1-8

Requirement

The Catalog dictionary of a conforming file shall contain the Metadata key whose value is a metadata stream as defined in ISO 32000-1:2008, 14.3.2.

Error details

The document catalog dictionary doesn't contain metadata key.

  • Object type: PDDocument
  • Test condition: metadata_size == 1
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.3.2

Rule 7.1-9

Requirement

The Metadata stream in the document's catalog dictionary shall contain a dc:title entry, where dc is the recommended prefix for the Dublin Core metadata schema as defined in the XMP specification, which clearly identifies the document.

Error details

Metadata stream does not contain dc:title

  • Object type: MainXMPPackage
  • Test condition: dc_title != null
  • Specification: ISO 14289-1:2014

Rule 7.1-10

Requirement

The document catalog dictionary shall include a ViewerPreferences dictionary containing a DisplayDocTitle key, whose value shall be true.

Error details

ViewerPreferences dictionary is not present in the document Catalog, or DisplayDocTitle key is set to false or is not present in the ViewerPreferences dictionary.

  • Object type: CosDocument
  • Test condition: DisplayDocTitle == true
  • Specification: ISO 14289-1:2014

Rule 7.1-11

Requirement

The logical structure of the conforming file shall be described by a structure hierarchy rooted in the StructTreeRoot entry of the document's Catalog dictionary, as described in ISO 32000-1:2008, 14.7.

Error details

StructTreeRoot entry is not present in the document catalog

The logical structure of a document is described by a hierarchy of objects called the structure hierarchy or structure tree. At the root of the hierarchy is a dictionary object called the structure tree root, located via the StructTreeRoot entry in the document catalog.

  • Object type: PDDocument
  • Test condition: StructTreeRoot_size == 1
  • Specifications: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.7

Rule 7.1-12

Requirement

A structure element dictionary shall contain the P (parent) entry according to ISO 32000-1:2008, 14.7.2, Table 355

Error details

A structure element dictionary does not contain the P (parent) entry

  • Object type: PDStructElem
  • Test condition: containsParent == true
  • Specifications: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.7.2, Table 355

Rule 7.2-2

Requirement

Natural language in the Outline entries shall be determined

Error details

Natural language in the Outline entries cannot be determined

  • Object type: PDOutline
  • Test condition: gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-3

Requirement

Table element may contain only TR, THead, TBody, TFoot and Caption elements

Error details

Table element contains element(s) different from TR, THead, TBode, TFoot or Caption

  • Object type: SETable
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem != 'TR' && elem != 'THead' && elem != 'TBody' && elem != 'TFoot' && elem != 'Caption').length == 0 || kidsStandardTypes == ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-4

Requirement

TR element should be contained in Table, THead, TBody or TFoot element

Error details

TR element not contained in Table, THead, TBody and TFoot element

  • Object type: SETR
  • Test condition: /^(Table|THead|TBody|TFoot)$/.test(parentStandardType)
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-5

Requirement

THead element should be contained in Table element

Error details

THead element not contained in Table element

  • Object type: SETHead
  • Test condition: parentStandardType == 'Table'
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-6

Requirement

TBody element should be contained in Table element

Error details

TBody element not contained in Table element

  • Object type: SETBody
  • Test condition: parentStandardType == 'Table'
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-7

Requirement

TFoot element should be contained in Table element

Error details

TFoot element not contained in Table element

  • Object type: SETFoot
  • Test condition: parentStandardType == 'Table'
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-8

Requirement

TH element should be contained in TR element

Error details

TH element not contained in TR element

  • Object type: SETH
  • Test condition: parentStandardType == 'TR'
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-9

Requirement

TD element should be contained in TR element

Error details

TD element not contained in TR element

  • Object type: SETD
  • Test condition: parentStandardType == 'TR'
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-10

Requirement

TR element may contain only TH and TD elements

Error details

TR element contains not a TH or TD elements

  • Object type: SETR
  • Test condition: /^(TH|TD)(&(TH|TD))*$/.test(kidsStandardTypes) || kidsStandardTypes == ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-11

Requirement

Table element should contain zero or one THead kid

Error details

Table element contains more than one THead kid

  • Object type: SETable
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem == 'THead').length <= 1
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-12

Requirement

Table element should contain zero or one TFoot kid

Error details

Table element contains more than one TFoot kid

  • Object type: SETable
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem == 'TFoot').length <= 1
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-13

Requirement

If Table element contains TFoot kid, Table element should contain one or more TBody kids

Error details

Table element contains TFoot kid, but does not contain TBody kids

  • Object type: SETable
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem == 'TFoot').length == 0 || kidsStandardTypes.split('&').filter(elem => elem == 'TBody').length > 0
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-14

Requirement

If Table element contains THead kid, Table element should contain one or more TBody kids

Error details

Table element contains THead kid, but does not contain TBody kids

  • Object type: SETable
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem == 'THead').length == 0 || kidsStandardTypes.split('&').filter(elem => elem == 'TBody').length > 0
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-15

Requirement

A table cell shall not have intersection with other cells

Error details

Table cell has intersection with other cells

  • Object type: SETableCell
  • Test condition: hasIntersection != true
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-16

Requirement

Table element may contain a Caption element as its first or last kid

Error details

Table element contains Caption not as its first or last child

  • Object type: SETable
  • Test condition: kidsStandardTypes.indexOf('&Caption&') < 0
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-17

Requirement

LI element should be contained in L element

Error details

LI element not contained in L element

  • Object type: SELI
  • Test condition: parentStandardType == 'L'
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.3

Rule 7.2-18

Requirement

LBody element should be contained in LI element

Error details

LBody element not contained in LI element

  • Object type: SELBody
  • Test condition: parentStandardType == 'LI'
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.3

Rule 7.2-19

Requirement

L element may contain only L, LI and Caption elements

Error details

L element contains element(s) different from L, LI or Caption

  • Object type: SEL
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem != 'L' && elem != 'LI' && elem != 'Caption').length == 0 || kidsStandardTypes == ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.3

Rule 7.2-20

Requirement

LI element may contain only Lbl and LBody elements

Error details

LI element contains not a Lbl or LBody elements

  • Object type: SELI
  • Test condition: /^(Lbl|LBody)(&(Lbl|LBody))*$/.test(kidsStandardTypes) || kidsStandardTypes == ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.3

Rule 7.2-21

Requirement

Natural language for text in ActualText attribute shall be determined

Error details

Natural language for text in ActualText attribute cannot be determined

  • Object type: PDStructElem
  • Test condition: ActualText == null || Lang_size != 0 || parentLang != null || gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-22

Requirement

Natural language for text in Alt attribute shall be determined

Error details

Natural language for text in Alt attribute cannot be determined

  • Object type: PDStructElem
  • Test condition: Alt == null || Lang_size != 0 || parentLang != null || gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-23

Requirement

Natural language for text in E attribute shall be determined

Error details

Natural language for text in E attribute cannot be determined

  • Object type: PDStructElem
  • Test condition: E == null || Lang_size != 0 || parentLang != null || gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-24

Requirement

Natural language in the Contents entry for annotations shall be determined

Error details

Natural language in the Contents entry for annotations cannot be determined

  • Object type: PDAnnot
  • Test condition: Contents == null || Lang_size != 0 || gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-25

Requirement

Natural language in the TU key for form fields shall be determined

Error details

Natural language in the TU key for form fields cannot be determined

  • Object type: PDFormField
  • Test condition: TU == null || Lang_size != 0 || gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-26

Requirement

TOCI element should be contained in TOC element

Error details

TOCI element not contained in TOC element

  • Object type: SETOCI
  • Test condition: parentStandardType == 'TOC'
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.2

Rule 7.2-27

Requirement

TOC element may contain only TOC, TOCI and Caption elements

Error details

TOC element contains element(s) different from TOC, TOCI or Caption

  • Object type: SETOC
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem != 'TOC' && elem != 'TOCI' && elem != 'Caption').length == 0 || kidsStandardTypes == ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.2

Rule 7.2-28

Requirement

TOC element may contain a Caption element only as its first kid

Error details

TOC element contains Caption child not as its first one

  • Object type: SETOC
  • Test condition: kidsStandardTypes == '' || kidsStandardTypes.split('&').slice(1).findIndex(elem => elem == 'Caption') < 0
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.2

Rule 7.2-29

Requirement

If the Lang entry is present in the document's Catalog dictionary or in a structure element dictionary or property list, its value shall be a language identifier as described in ISO 32000-1:2008, 14.9.2. A language identifier shall be a Language-Tag as defined in RFC 3066, Tags for the Identification of Languages.

Error details

Value of the Lang entry is not a Language-Tag

  • Object type: CosLang
  • Test condition: /^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/.test(unicodeValue)
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.9.2
    • RFC 3066, 2.1

Rule 7.2-30

Requirement

Natural language for text in ActualText attribute in Span Marked Content shall be determined

Error details

Natural language for text in ActualText attribute in Span Marked Content cannot be determined

  • Object type: SEMarkedContent
  • Test condition: tag != 'Span' || ActualText == null || Lang != null || inheritedLang != null || gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-31

Requirement

Natural language for text in Alt attribute in Span Marked Content shall be determined

Error details

Natural language for text in Alt attribute in Span Marked Content cannot be determined

  • Object type: SEMarkedContent
  • Test condition: tag != 'Span' || Alt == null || Lang != null || inheritedLang != null || gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-32

Requirement

Natural language for text in E attribute in Span Marked Content shall be determined

Error details

Natural language for text in E attribute in Span Marked Content cannot be determined

  • Object type: SEMarkedContent
  • Test condition: tag != 'Span' || E == null || Lang != null || inheritedLang != null || gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-33

Requirement

Natural language for document metadata shall be determined

Error details

Natural language for document metadata cannot be determined

  • Object type: XMPLangAlt
  • Test condition: xDefault == false || gSizeCatalogLang != 0
  • Specification: ISO 14289-1:2014

Rule 7.2-34

Requirement

Natural language for text in page content shall be determined

Error details

Natural language for text in page content cannot be determined

  • Object type: SETextItem
  • Test condition: gSizeCatalogLang != 0 || Lang != null
  • Specification: ISO 14289-1:2014

Rule 7.2-36

Requirement

THead element may contain only TR elements

Error details

THead element contains not a TR elements

  • Object type: SETHead
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem != 'TR').length == 0 || kidsStandardTypes == ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-37

Requirement

TBody element may contain only TR elements

Error details

TBody element contains not a TR elements

  • Object type: SETBody
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem != 'TR').length == 0 || kidsStandardTypes == ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-38

Requirement

TFoot element may contain only TR elements

Error details

TFoot element contains not a TR elements

  • Object type: SETFoot
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem != 'TR').length == 0 || kidsStandardTypes == ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-39

Requirement

Table element may contain only one Caption element

Error details

Table element contains several Caption elements instead of one

  • Object type: SETable
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem == 'Caption').length < 2
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-40

Requirement

L element may contain a Caption element only as its first kid

Error details

L element contains Caption child not as its first one

  • Object type: SEL
  • Test condition: kidsStandardTypes == '' || kidsStandardTypes.split('&').slice(1).findIndex(elem => elem == 'Caption') < 0
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.2

Rule 7.2-41

Requirement

Table columns shall have the same number of rows (taking into account row spans)

Error details

Some table columns span different number of rows

  • Object type: SETable
  • Test condition: numberOfColumnWithWrongRowSpan == null
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-42

Requirement

Table rows shall have the same number of columns (taking into account column spans)

Error details

Some table rows span different number of columns

  • Object type: SETable
  • Test condition: numberOfRowWithWrongColumnSpan == null || wrongColumnSpan != null
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.2-43

Requirement

Table rows shall have the same number of columns (taking into account column spans)

Error details

Some table rows span different number of columns

  • Object type: SETable
  • Test condition: numberOfRowWithWrongColumnSpan == null || wrongColumnSpan == null
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.4

Rule 7.3-1

Requirement

Figure tags shall include an alternative representation or replacement text that represents the contents marked with the Figure tag as noted in ISO 32000-1:2008, 14.7.2, Table 323

Error details

Figure structure element neither has an alternate description nor a replacement text

  • Object type: SEFigure
  • Test condition: (Alt != null && Alt != '') || ActualText != null
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.7.2

Rule 7.4.2-1

Requirement

For documents that are not strongly structured, as described in ISO 32000-1:2008, 14.8.4.3.5, heading tags shall be used as follows:

  • If any heading tags are used, H1 shall be the first.
  • A document may use more than one instance of any specific tag level. For example, a tag level may be repeated if document content requires it.
  • If document semantics require a descending sequence of headers, such a sequence shall proceed in strict numerical order and shall not skip an intervening heading level.
  • A document may increment its heading sequence without restarting at H1 if document semantics require it.

Error details

A heading level is skipped in a descending sequence of header levels

  • Object type: SEHn
  • Test condition: hasCorrectNestingLevel == true
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.3.5

Rule 7.4.4-1

Requirement

Each node in the tag tree shall contain at most one child H tag.

Error details

A node contains more than one H tag

  • Object type: PDStructElem
  • Test condition: kidsStandardTypes.split('&').filter(elem => elem == 'H').length <= 1
  • Specification: ISO 14289-1:2014

Rule 7.4.4-2

Requirement

All documents shall be either strongly or weakly structured, but not both.

Error details

Document uses both H and H# tags

  • Object type: SEH
  • Test condition: usesHn == false
  • Specification: ISO 14289-1:2014

Rule 7.4.4-3

Requirement

All documents shall be either strongly or weakly structured, but not both.

Error details

Document uses both H and H# tags

  • Object type: SEHn
  • Test condition: usesH == false
  • Specification: ISO 14289-1:2014

Rule 7.5-1

Requirement

If the table's structure is not determinable via Headers and IDs, then structure elements of type TH shall have a Scope attribute

Error details

TD does not contain Headers attribute, and Headers for this table cell can not be determined via algorithm from ISO 32000-2, 14.8.4.8.3.

  • Object type: SETD
  • Test condition: hasConnectedHeader != false || unknownHeaders != ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-2, 14.8.4.8.3

Rule 7.5-2

Requirement

If the table's structure is not determinable via Headers and IDs, then structure elements of type TH shall have a Scope attribute

Error details

TD references undefined Header(s), and Headers for this table cell can not be determined via algorithm from ISO 32000-2, 14.8.4.8.3.

  • Object type: SETD
  • Test condition: hasConnectedHeader != false || unknownHeaders == ''
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-2, 14.8.4.8.3

Rule 7.7-1

Requirement

All mathematical expressions shall be enclosed within a Formula tag as detailed in ISO 32000-1:2008, 14.8.4.5 and shall have Alt or ActualText attributes

Error details

Formula structure element neither has an alternate description nor a replacement text

  • Object type: SEFormula
  • Test condition: (Alt != null && Alt != '') || ActualText != null
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.5

Rule 7.9-1

Requirement

Note tag shall have ID entry

Error details

ID key of the Note tag is not present

  • Object type: SENote
  • Test condition: noteID != null && noteID != ''
  • Specification: ISO 14289-1:2014

Rule 7.9-2

Requirement

Each Note tag shall have unique ID key

Error details

ID key of the Note tag is non-unique

  • Object type: SENote
  • Test condition: hasDuplicateNoteID == false
  • Specification: ISO 14289-1:2014

Rule 7.10-1

Requirement

Each optional content configuration dictionary that forms the value of the D key, or that is an element in the array that forms the value of the Configs key in the OCProperties dictionary, shall contain the Name key.

Error details

Missing or empty Name entry of the optional content configuration dictionary

  • Object type: PDOCConfig
  • Test condition: Name != null && Name.length() > 0
  • Specification: ISO 14289-1:2014

Rule 7.10-2

Requirement

The AS key shall not appear in any optional content configuration dictionary.

Error details

AS key is present in the optional content configuration dictionary

  • Object type: PDOCConfig
  • Test condition: AS == null
  • Specification: ISO 14289-1:2014

Rule 7.11-1

Requirement

The file specification dictionary for an embedded file shall contain the non-empty F and UF keys

Error details

The file specification dictionary for an embedded file does not contain either F or EF key or at least one of the keys is empty

  • Object type: CosFileSpecification
  • Test condition: containsEF == false || (F != null && F != '' && UF != null && UF != '')
  • Specification: ISO 14289-1:2014

Rule 7.15-1

Requirement

Dynamic XFA forms shall not be used

Error details

Dynamic XFA forms is present

  • Object type: PDAcroForm
  • Test condition: dynamicRender != 'required'
  • Specification: ISO 14289-1:2014

Rule 7.16-1

Requirement

An encrypted conforming file shall contain a P key in its encryption dictionary (ISO 32000-1:2008, 7.6.3.2, Table 21). The 10th bit position of the P key shall be true.

Error details

The file is encrypted but does not contain a P entry in its encryption dictionary or the file is encrypted and does contain a P entry, but the 10th bit position of the P entry is false

  • Object type: PDEncryption
  • Test condition: P != null && (P & 512) == 512
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 7.6.3.2

Rule 7.18.1-1

Requirement

An annotation, excluding annotations of subtype Widget, PrinterMark or Link, shall be nested within an Annot tag

Error details

An annotation, excluding annotations of subtype Widget, PrinterMark or Link, is an Artifact or is not nested within an Annot tag

  • Object type: PDAnnot
  • Test condition: Subtype == 'Widget' || Subtype == 'PrinterMark' || Subtype == 'Link' || isOutsideCropBox == true || (F & 2) == 2 || structParentStandardType == 'Annot'
  • Specification: ISO 14289-1:2014

Rule 7.18.1-2

Requirement

An annotation (except Widget annotations or hidden annotations, or those having rectangle outside the crop-box) shall have either Contents key or an Alt entry in the enclosing structure element

Error details

An annotation whose hidden flag is not set and whose rectangle is not outside the crop-box has neither Contents key nor an Alt entry in the enclosing structure element

  • Object type: PDAnnot
  • Test condition: Subtype == 'Widget' || isOutsideCropBox == true || (F & 2) == 2 || (Contents != null && Contents != '') || (Alt != null && Alt != '')
  • Specification: ISO 14289-1:2014

Rule 7.18.1-3

Requirement

A form field shall have a TU key present or all its Widget annotations shall have alternative descriptions (in the form of an Alt entry in the enclosing structure elements)

Error details

A form field neither has TU key nor its Widget annotations have alternative descriptions (in the form of an Alt entry in the enclosing structure element)

  • Object type: PDWidgetAnnot
  • Test condition: isOutsideCropBox == true || (F & 2) == 2 || (TU != null && TU != '') || (Alt != null && Alt != '')
  • Specification: ISO 14289-1:2014

Rule 7.18.2-1

Requirement

Annotations of subtype TrapNet shall not be permitted.

Error details

An annotation of subtype TrapNet exists

  • Object type: PDTrapNetAnnot
  • Test condition: isOutsideCropBox == true || (F & 2) == 2
  • Specification: ISO 14289-1:2014

Rule 7.18.3-1

Requirement

Every page on which there is an annotation shall contain in its page dictionary the key Tabs, and its value shall be S.

Error details

A page with annotation(s) does not contain a Tabs key or has a Tabs key with a value other than S.

  • Object type: PDPage
  • Test condition: annots_size == 0 || Tabs == 'S'
  • Specification: ISO 14289-1:2014

Rule 7.18.4-1

Requirement

A Widget annotation shall be nested within a Form tag per ISO 32000-1:2008, 14.8.4.5, Table 340.

Error details

A widget annotation is an Artifact or is not nested within a Form tag

  • Object type: PDWidgetAnnot
  • Test condition: structParentStandardType == 'Form' || isOutsideCropBox == true || (F & 2) == 2
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.5

Rule 7.18.4-2

Requirement

If the Form element omits a Role attribute (Table 348), it shall have only one child: an object reference (14.7.4.3) identifying the widget annotation per ISO 32000-1:2008, 14.8.4.5, Table 340.

Error details

The Form element omits a Role attribute and doesn't have only one child identifying the widget annotation

  • Object type: SEForm
  • Test condition: roleAttribute != null || hasOneInteractiveChild == true
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.5

Rule 7.18.5-1

Requirement

Links shall be tagged according to ISO 32000-1:2008, 14.8.4.4.2, Link Element.

Error details

A link annotation is an Artifact or is not nested within a Link tag

  • Object type: PDLinkAnnot
  • Test condition: structParentStandardType == 'Link' || isOutsideCropBox == true || (F & 2) == 2
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.4.4.2

Rule 7.18.5-2

Requirement

Links shall contain an alternate description via their Contents key as described in ISO 32000-1:2008, 14.9.3.

Error details

A link annotation does not include an alternate description in the Contents Key

  • Object type: PDLinkAnnot
  • Test condition: (Contents != null && Contents != '') || isOutsideCropBox == true || (F & 2) == 2
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.9.3

Rule 7.18.6.2-1

Requirement

In the media clip data dictionary, the optional CT key (ISO 32000-1:2008, 13.2.4.2, Table 274) is required.

Error details

CT key is missing from the media clip data dictionary.

  • Object type: PDMediaClip
  • Test condition: CT != null
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 13.2.4.2

Rule 7.18.6.2-2

Requirement

In the media clip data dictionary, the optional Alt key (ISO 32000-1:2008, 13.2.4.2, Table 274) is required.

Error details

Alt key is missing from the media clip data dictionary

  • Object type: PDMediaClip
  • Test condition: hasCorrectAlt == true
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 13.2.4.2

Rule 7.18.8-1

Requirement

PrinterMark annotations, if present, shall be considered Incidental Artifacts, as if they are hidden page elements as defined in ISO 32000-1:2008, 14.8.2.2.3.

Error details

A PrinterMark annotation is included in logical structure

  • Object type: PDPrinterMarkAnnot
  • Test condition: structParentType == null || isOutsideCropBox == true || (F & 2) == 2
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.8.2.2.3

Rule 7.20-1

Requirement

A conforming file shall not contain any reference XObjects

Error details

The document contains a reference XObject (Ref key in the form XObject dictionary)

Reference XObjects enable one PDF document to import content from another. The document in which the reference occurs is called the containing document; the one whose content is being imported is the target document. The target document may reside in a file external to the containing document or may be included within it as an embedded file stream.

As this makes the initial PDF document dependent on the presence of external resources, this mechanism is not permitted in PDF/UA-compliant documents.

  • Object type: PDXForm
  • Test condition: containsRef == false
  • Specification: ISO 14289-1:2014

Rule 7.20-2

Requirement

The content of Form XObjects shall be incorporated into structure elements according to ISO 32000-1:2008, 14.7.2.

Error details

Form XObject contains MCIDs and is referenced more than once

  • Object type: PDXForm
  • Test condition: isUniqueSemanticParent == true
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 14.7.2

Rule 7.21.3.1-1

Requirement

For any given composite (Type 0) font within a conforming file, the CIDSystemInfo entry in its CIDFont dictionary and its Encoding dictionary shall have the following relationship:

  • If the Encoding key in the Type 0 font dictionary is Identity-H or Identity-V, any values of Registry, Ordering, and Supplement may be used in the CIDSystemInfo entry of the CIDFont.
  • Otherwise, the corresponding Registry and Ordering strings in both CIDSystemInfo dictionaries shall be identical, and the value of the Supplement key in the CIDSystemInfo dictionary of the CIDFont shall be less than or equal to the Supplement key in the CIDSystemInfo dictionary of the CMap.

Error details

CIDSystemInfo entries the CIDFont and CMap dictionaries of a Type 0 font are not compatible

CIDFont and CMap dictionaries contain a CIDSystemInfo entry specifying the character collection assumed by the CIDFont or by each CIDFont associated with the CMap - that is, the interpretation of the CID numbers used by the CIDFont. A character collection is uniquely identified by the Registry, Ordering, and Supplement entries in the CIDSystemInfo dictionary. Character collections whose Registry and Ordering values are the same are compatible.

PDF/UA-1 standard requires that the Registry and Ordering strings of the CIDSystemInfo dictionaries for that font shall be identical and the value of the Supplement key in the CIDSystemInfo dictionary of the CIDFont shall be less than or equal to the Supplement key in the CIDSystemInfo dictionary of the CMap, unless the value of the CMap dictionary UserCMap key is "Identity-H" or "Identity-V".

  • Object type: PDType0Font
  • Test condition: cmapName == "Identity-H" || cmapName == "Identity-V" || (CIDFontOrdering != null && CIDFontOrdering == CMapOrdering && CIDFontRegistry != null && CIDFontRegistry == CMapRegistry && CIDFontSupplement != null && CMapSupplement != null && CIDFontSupplement <= CMapSupplement)
  • Specification: ISO 14289-1:2014

Rule 7.21.3.2-1

Requirement

ISO 32000-1:2008, 9.7.4, Table 117 requires that all embedded Type 2 CIDFonts in the CIDFont dictionary shall contain a CIDToGIDMap entry that shall be a stream mapping from CIDs to glyph indices or the name Identity, as described in ISO 32000-1:2008, 9.7.4, Table 117.

Error details

A Type 2 CIDFont dictionary has missing or invalid CIDToGIDMap entry

For Type 2, the CIDFont program is actually a TrueType font program, which has no native notion of CIDs. In a TrueType font program, glyph descriptions are identified by glyph index values. Glyph indices are internal to the font and are not defined consistently from one font to another. Instead, a TrueType font program contains a "cmap" table that provides mappings directly from character codes to glyph indices for one or more predefined encodings.

If the TrueType font program is embedded, the Type 2 CIDFont dictionary must contain a CIDToGIDMap entry that maps CIDs to the glyph indices for the appropriate glyph descriptions in that font program.

  • Object type: PDCIDFont
  • Test condition: Subtype != "CIDFontType2" || CIDToGIDMap != null || fontFile_size == 0
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 9.7.4, Table 117

Rule 7.21.3.3-1

Requirement

All CMaps used within a PDF/UA file, except those listed in ISO 32000-1:2008, 9.7.5.2, Table 118, shall be embedded in that file as described in ISO 32000-1:2008, 9.7.5.

Error details

A non-standard CMap is not embedded

  • Object type: PDCMap
  • Test condition: CMapName == "Identity-H" || CMapName == "Identity-V" || CMapName == "GB-EUC-H" || CMapName == "GB-EUC-V" || CMapName == "GBpc-EUC-H" || CMapName == "GBpc-EUC-V" || CMapName == "GBK-EUC-H" || CMapName == "GBK-EUC-V" || CMapName == "GBKp-EUC-H" || CMapName == "GBKp-EUC-V" || CMapName == "GBK2K-H" || CMapName == "GBK2K-V" || CMapName == "UniGB-UCS2-H" || CMapName == "UniGB-UCS2-V" || CMapName == "UniGB-UFT16-H" || CMapName == "UniGB-UFT16-V" || CMapName == "B5pc-H" || CMapName == "B5pc-V" || CMapName == "HKscs-B5-H" || CMapName == "HKscs-B5-V" || CMapName == "ETen-B5-H" || CMapName == "ETen-B5-V" || CMapName == "ETenms-B5-H" || CMapName == "ETenms-B5-V" || CMapName == "CNS-EUC-H" || CMapName == "CNS-EUC-V" || CMapName == "UniCNS-UCS2-H" || CMapName == "UniCNS-UCS2-V" || CMapName == "UniCNS-UFT16-H" || CMapName == "UniCNS-UTF16-V" || CMapName == "83pv-RKSJ-H" || CMapName == "90ms-RKSJ-H" || CMapName == "90ms-RKSJ-V" || CMapName == "90msp-RKSJ-H" || CMapName == "90msp-RKSJ-V" || CMapName == "90pv-RKSJ-H" || CMapName == "Add-RKSJ-H" || CMapName == "Add-RKSJ-V" || CMapName == "EUC-H" || CMapName == "EUC-V" || CMapName == "Ext-RKSJ-H" || CMapName == "Ext-RKSJ-V" || CMapName == "H" || CMapName == "V" || CMapName == "UniJIS-UCS2-H" || CMapName == "UniJIS-UCS2-V" || CMapName == "UniJIS-UCS2-HW-H" || CMapName == "UniJIS-UCS2-HW-V" || CMapName == "UniJIS-UTF16-H" || CMapName == "UniJIS-UTF16-V" || CMapName == "KSC-EUC-H" || CMapName == "KSC-EUC-V" || CMapName == "KSCms-UHC-H" || CMapName == "KSCms-UHC-V" || CMapName == "KSCms-UHC-HW-H" || CMapName == "KSCms-UHC-HW-V" || CMapName == "KSCpc-EUC-H" || CMapName == "UniKS-UCS2-H" || CMapName == "UniKS-UCS2-V" || CMapName == "UniKS-UTF16-H" || CMapName == "UniKS-UTF16-V" || embeddedFile_size == 1
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 9.7.5.2, Table 118

Rule 7.21.3.3-2

Requirement

For those CMaps that are embedded, the integer value of the WMode entry in the CMap dictionary shall be identical to the WMode value in the embedded CMap stream.

Error details

WMode entry in the embedded CMap and in the CMap dictionary are not identical

A CMap also specifies the writing mode (horizontal or vertical) for any CIDFont with which the CMap is combined. This determines which metrics are to be used when glyphs are painted from that font.

In case of embedded CMap file, the writing mode is specified in two different places: in the PDF dictionary associated with the embedded CMap, and inside the embedded CMap file itself. To avoid any ambiguities, PDF/A standard requires that values of these two writing modes coincide.

  • Object type: CMapFile
  • Test condition: WMode == dictWMode
  • Specification: ISO 14289-1:2014

Rule 7.21.3.3-3

Requirement

A CMap shall not reference any other CMap except those listed in ISO 32000-1:2008, 9.7.5.2, Table 118.

Error details

A CMap references another non-standard CMap

  • Object type: PDReferencedCMap
  • Test condition: CMapName == "Identity-H" || CMapName == "Identity-V" || CMapName == "GB-EUC-H" || CMapName == "GB-EUC-V" || CMapName == "GBpc-EUC-H" || CMapName == "GBpc-EUC-V" || CMapName == "GBK-EUC-H" || CMapName == "GBK-EUC-V" || CMapName == "GBKp-EUC-H" || CMapName == "GBKp-EUC-V" || CMapName == "GBK2K-H" || CMapName == "GBK2K-V" || CMapName == "UniGB-UCS2-H" || CMapName == "UniGB-UCS2-V" || CMapName == "UniGB-UFT16-H" || CMapName == "UniGB-UFT16-V" || CMapName == "B5pc-H" || CMapName == "B5pc-V" || CMapName == "HKscs-B5-H" || CMapName == "HKscs-B5-V" || CMapName == "ETen-B5-H" || CMapName == "ETen-B5-V" || CMapName == "ETenms-B5-H" || CMapName == "ETenms-B5-V" || CMapName == "CNS-EUC-H" || CMapName == "CNS-EUC-V" || CMapName == "UniCNS-UCS2-H" || CMapName == "UniCNS-UCS2-V" || CMapName == "UniCNS-UFT16-H" || CMapName == "UniCNS-UTF16-V" || CMapName == "83pv-RKSJ-H" || CMapName == "90ms-RKSJ-H" || CMapName == "90ms-RKSJ-V" || CMapName == "90msp-RKSJ-H" || CMapName == "90msp-RKSJ-V" || CMapName == "90pv-RKSJ-H" || CMapName == "Add-RKSJ-H" || CMapName == "Add-RKSJ-V" || CMapName == "EUC-H" || CMapName == "EUC-V" || CMapName == "Ext-RKSJ-H" || CMapName == "Ext-RKSJ-V" || CMapName == "H" || CMapName == "V" || CMapName == "UniJIS-UCS2-H" || CMapName == "UniJIS-UCS2-V" || CMapName == "UniJIS-UCS2-HW-H" || CMapName == "UniJIS-UCS2-HW-V" || CMapName == "UniJIS-UTF16-H" || CMapName == "UniJIS-UTF16-V" || CMapName == "KSC-EUC-H" || CMapName == "KSC-EUC-V" || CMapName == "KSCms-UHC-H" || CMapName == "KSCms-UHC-V" || CMapName == "KSCms-UHC-HW-H" || CMapName == "KSCms-UHC-HW-V" || CMapName == "KSCpc-EUC-H" || CMapName == "UniKS-UCS2-H" || CMapName == "UniKS-UCS2-V" || CMapName == "UniKS-UTF16-H" || CMapName == "UniKS-UTF16-V"
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 9.7.5.2, Table 118

Rule 7.21.4.1-1

Requirement

The font programs for all fonts used for rendering within a conforming file shall be embedded within that file, as defined in ISO 32000-1:2008, 9.9.

Error details

The font program is not embedded

Text rendering mode 3 specifies that glyphs are not stroked, filled or used as a clipping boundary. A font referenced for use solely in this mode is therefore not rendered and is thus exempt from the embedding requirement.

  • Object type: PDFont
  • Test condition: Subtype == "Type3" || Subtype == "Type0" || renderingMode == 3 || fontFile_size == 1
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 9.9

Rule 7.21.4.1-2

Requirement

Embedded fonts shall define all glyphs referenced for rendering within the conforming file. A font referenced solely in text rendering mode 3 is not rendered and is thus exempt from the requirements that impact the visual representation of the glyphs of a font. In all cases for TrueType fonts that are to be rendered, character codes shall be able to be mapped to glyphs according to ISO 32000-1:2008, 9.6.6.4 without the use of a non-standard mapping chosen by the conforming processor.

Error details

Not all glyphs referenced for rendering are present in the embedded font program

All conforming PDF/UA readers shall use the embedded fonts, rather than other locally resident, substituted or simulated fonts, for rendering.

The fonts used exclusively with text rendering mode 3 (invisible) are exempt from this requirement. OCR solutions often use such invisible fonts on top of the original scanned image to enable selection and copying of recognized text.

There is no exemption from the requirements of this rule for the 14 standard Type 1 fonts. The PostScript names of 14 Type 1 fonts, known as the standard fonts, are as follows:

Times−Roman      Helvetica             Courier             Symbol
Times−Bold       Helvetica−Bold        Courier−Bold        ZapfDingbats
Times−Italic     Helvetica−Oblique     Courier−Oblique
Times−BoldItalic Helvetica−BoldOblique Courier−BoldOblique
  • Object type: Glyph
  • Test condition: renderingMode == 3 || isGlyphPresent == null || isGlyphPresent == true
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 32000-1:2008, 9.6.6.4

Rule 7.21.4.2-1

Requirement

If the FontDescriptor dictionary of an embedded Type 1 font contains a CharSet string, then it shall list the character names of all glyphs present in the font program, regardless of whether a glyph in the font is referenced or used by the PDF or not.

Error details

A CharSet entry in the Descriptor dictionary of a Type1 font incorrectly lists glyphs present in the font program

  • Object type: PDType1Font
  • Test condition: fontFile_size == 0 || fontName.search(/[A-Z]{6}\+/) != 0 || CharSet == null || charSetListsAllGlyphs == true
  • Specification: ISO 14289-1:2014

Rule 7.21.4.2-2

Requirement

If the FontDescriptor dictionary of an embedded CID font contains a CIDSet stream, then it shall identify all CIDs which are present in the font program, regardless of whether a CID in the font is referenced or used by the PDF or not.

Error details

A CIDSet entry in the Font descriptor does not correctly identify all glyphs present in the embedded font subset

  • Object type: PDCIDFont
  • Test condition: fontFile_size == 0 || fontName.search(/[A-Z]{6}\+/) != 0 || containsCIDSet == false || cidSetListsAllGlyphs == true
  • Specification: ISO 14289-1:2014

Rule 7.21.5-1

Requirement

For every font embedded in a conforming file and used for rendering, the glyph width information in the font dictionary and in the embedded font program shall be consistent.

Error details

Glyph width information in the embedded font program is not consistent with the Widths entry of the font dictionary

This requirement is necessary to ensure predictable font rendering, regardless of whether a given reader uses the metrics in the Widths entry or those in the font program.

  • Object type: Glyph
  • Test condition: renderingMode == 3 || widthFromFontProgram == null || widthFromDictionary == null || Math.abs(widthFromFontProgram - widthFromDictionary) <= 1
  • Specification: ISO 14289-1:2014

Rule 7.21.6-1

Requirement

For all non-symbolic TrueType fonts used for rendering, the embedded TrueType font program shall contain one or several non-symbolic cmap entries such that all necessary glyph lookups can be carried out.

Error details

The embedded font program for a non-symbolic TrueType font does not contain non-symbolic cmap entries

  • Object type: TrueTypeFontProgram
  • Test condition: isSymbolic == true || (cmap30Present == true ? nrCmaps > 1 : nrCmaps > 0)
  • Specification: ISO 14289-1:2014

Rule 7.21.6-2

Requirement

All non-symbolic TrueType fonts shall have either MacRomanEncoding or WinAnsiEncoding as the value for the Encoding key in the Font dictionary or as the value for the BaseEncoding key in the dictionary which is the value of the Encoding key in the Font dictionary. In addition, no non-symbolic TrueType font shall define a Differences array unless all of the glyph names in the Differences array are listed in the Adobe Glyph List and the embedded font program contains at least the Microsoft Unicode (3,1 – Platform ID=3, Encoding ID=1) encoding in the 'cmap' table.

Error details

A non-symbolic TrueType font encoding does not define a correct mapping to the Adobe Glyph List

  • Object type: PDTrueTypeFont
  • Test condition: isSymbolic == true || ((Encoding == "MacRomanEncoding" || Encoding == "WinAnsiEncoding") && (containsDifferences == false || differencesAreUnicodeCompliant == true))
  • Specification: ISO 14289-1:2014

Rule 7.21.6-3

Requirement

Symbolic TrueType fonts shall not contain an Encoding entry in the font dictionary

Error details

A symbolic TrueType font specifies an Encoding entry in its dictionary

A Font is called symbolic if it contains characters outside the Adobe standard Latin character set. It is marked by special flag in its font descriptor dictionary.

  • Object type: PDTrueTypeFont
  • Test condition: isSymbolic == false || Encoding == null
  • Specification: ISO 14289-1:2014

Rule 7.21.6-4

Requirement

The 'cmap' table in the embedded font program for a symbolic TrueType font shall contain either exactly one encoding or it shall contain, at least, the Microsoft Symbol (3,0 - Platform ID=3, Encoding ID=0) encoding.

Error details

The embedded font program for a symbolic TrueType font contains more than one cmap subtable

  • Object type: TrueTypeFontProgram
  • Test condition: isSymbolic == false || nrCmaps == 1 || cmap30Present == true
  • Specification: ISO 14289-1:2014

Rule 7.21.7-1

Requirement

The Font dictionary of all fonts shall define the map of all used character codes to Unicode values, either via a ToUnicode entry, or other mechanisms as defined in ISO 14289-1, 7.21.7.

Error details

The glyph can not be mapped to Unicode

  • Object type: Glyph
  • Test condition: toUnicode != null
  • Specification: ISO 14289-1:2014
  • Additional references:
    • ISO 14289-1:2014, 7.21.7

Rule 7.21.7-2

Requirement

The Unicode values specified in the ToUnicode CMap shall all be greater than zero (0), but not equal to either U+FEFF or U+FFFE.

Error details

The glyph has an invalid Unicode value, which is either 0, or is equal to U+FEFF or U+FFFE.

The font dictionary of all fonts, regardless of their rendering mode usage, shall include a ToUnicode entry whose value is a CMap stream object that maps character codes for at least all referenced glyphs to Unicode values, as described in ISO 32000-1:2008, 9.10.3, unless the font meets at least one of the following four conditions:

  • fonts that use the predefined encodings MacRomanEncoding, MacExpertEncoding or WinAnsiEncoding;
  • Type 1 and Type 3 fonts where the glyph names of the glyphs referenced are all contained in the Adobe Glyph List or the set of named characters in the Symbol font, as defined in ISO 32000-1:2008, Annex D;
  • Type 0 fonts whose descendant CIDFont uses the Adobe-GB1, Adobe-CNS1, Adobe-Japan1 or Adobe-Korea1 character collections.
  • Non-symbolic TrueType fonts.

This requirement ensures that the values in the ToUnicode CMap will be useful values and not simply placeholders.

  • Object type: Glyph
  • Test condition: toUnicode == null || (toUnicode.indexOf("\u0000") == -1 && toUnicode.indexOf("\uFFFE") == -1 && toUnicode.indexOf("\uFEFF") == -1)
  • Specification: ISO 14289-1:2014

Rule 7.21.8-1

Requirement

A PDF/UA compliant document shall not contain a reference to the .notdef glyph from any of the text showing operators, regardless of text rendering mode, in any content stream.

Error details

The document contains a reference to the .notdef glyph

  • Object type: Glyph
  • Test condition: name != ".notdef"
  • Specification: ISO 14289-1:2014
Clone this wiki locally