{"details":{"name":"PDF/UA-1 validation profile","description":"Validation rules against ISO 14289-1:2014","creator":"veraPDF Consortium","dateCreated":1586259472486},"rules":[{"object":"PDStructElem","deferred":null,"tags":"structure","description":"Standard tags defined in ISO 32000-1:2008, 14.8.4, shall not be remapped","test":"remappedStandardType == null","error":{"message":"Standard type %1 is remapped","arguments":[{"argument":"remappedStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4"}],"tagsSet":["structure"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":7}},{"object":"Glyph","deferred":null,"tags":"font","description":"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","test":"name != \".notdef\"","error":{"message":"The document contains a reference to the .notdef glyph","arguments":[]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.8","testNumber":1}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"Table columns shall have the same number of rows (taking into account row spans)","test":"numberOfColumnWithWrongRowSpan == null","error":{"message":"Table columns 1 and %1 span different number of rows","arguments":[{"argument":"numberOfColumnWithWrongRowSpan + 1","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":41}},{"object":"SEL","deferred":null,"tags":"structure,list","description":"L element may contain only L, LI and Caption elements","test":"kidsStandardTypes.split('&').filter(elem => elem != 'L' && elem != 'LI' && elem != 'Caption').length == 0 || kidsStandardTypes == ''","error":{"message":"L element contains %1 element(s) instead of L, LI or Caption","arguments":[{"argument":"kidsStandardTypes.split('&').filter(elem => elem != 'L' && elem != 'LI'\n                        && elem != 'Caption').toString()","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.3"}],"tagsSet":["structure","list"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":19}},{"object":"PDStructElem","deferred":null,"tags":"structure","description":"A circular mapping shall not exist","test":"circularMappingExist != true","error":{"message":"A circular mapping exists for %1 structure type","arguments":[{"argument":"valueS","name":null,"argumentValue":null}]},"references":[],"tagsSet":["structure"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":6}},{"object":"PDXForm","deferred":null,"tags":"syntax","description":"The content of Form XObjects shall be incorporated into structure elements according to ISO 32000-1:2008, 14.7.2","test":"isUniqueSemanticParent == true","error":{"message":"Form XObject contains MCIDs and is referenced more than once","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.7.2"}],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.20","testNumber":2}},{"object":"PDTrueTypeFont","deferred":null,"tags":"font","description":"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","test":"isSymbolic == true || ((Encoding == \"MacRomanEncoding\" || Encoding == \"WinAnsiEncoding\") && (containsDifferences == false || differencesAreUnicodeCompliant == true))","error":{"message":"A non-symbolic TrueType font encoding does not define a correct mapping to the Adobe Glyph List (Encoding = %1, Encoding entry contains a Differences = %2, Differences are Unicode compliant = %3)","arguments":[{"argument":"Encoding","name":null,"argumentValue":null},{"argument":"containsDifferences","name":null,"argumentValue":null},{"argument":"differencesAreUnicodeCompliant","name":null,"argumentValue":null}]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.6","testNumber":2}},{"object":"XMPLangAlt","deferred":true,"tags":"lang,metadata","description":"Natural language for document metadata shall be determined","test":"xDefault == false || gContainsCatalogLang == true","error":{"message":"Natural language for document metadata cannot be determined","arguments":[]},"references":[],"tagsSet":["lang","metadata"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":33}},{"object":"SETBody","deferred":null,"tags":"structure,table","description":"TBody element may contain only TR elements","test":"kidsStandardTypes.split('&').filter(elem => elem != 'TR').length == 0 || kidsStandardTypes == ''","error":{"message":"TBody element contains %1 element(s) instead of TR","arguments":[{"argument":"kidsStandardTypes.split('&').filter(elem => elem != 'TR').toString()","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":37}},{"object":"PDFUAIdentification","deferred":null,"tags":"metadata","description":"Property \"corr\" of the PDF/UA Identification Schema shall have namespace prefix \"pdfuaid\"","test":"corrPrefix == null || corrPrefix == \"pdfuaid\"","error":{"message":"Property \"corr\" of the PDF/UA Identification Schema has invalid namespace prefix %1","arguments":[{"argument":"corrPrefix","name":null,"argumentValue":null}]},"references":[],"tagsSet":["metadata"],"ruleId":{"specification":"ISO_14289_1","clause":"5","testNumber":5}},{"object":"SEH","deferred":null,"tags":"structure,heading","description":"All documents shall be either strongly or weakly structured, but not both","test":"usesHn == false","error":{"message":"Document uses both H and H# tags","arguments":[]},"references":[],"tagsSet":["structure","heading"],"ruleId":{"specification":"ISO_14289_1","clause":"7.4.4","testNumber":2}},{"object":"MainXMPPackage","deferred":null,"tags":"metadata","description":"The PDF/UA version and conformance level of a file shall be specified using the PDF/UA Identification extension schema","test":"containsPDFUAIdentification == true","error":{"message":"The document metadata stream doesn't contain PDF/UA Identification Schema","arguments":[]},"references":[],"tagsSet":["metadata"],"ruleId":{"specification":"ISO_14289_1","clause":"5","testNumber":1}},{"object":"CosLang","deferred":null,"tags":"lang","description":"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","test":"/^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$/.test(unicodeValue)","error":{"message":"Value %1 of the Lang entry is not a Language-Tag","arguments":[{"argument":"unicodeValue","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.9.2"},{"specification":"RFC 3066","clause":"2.1"}],"tagsSet":["lang"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":29}},{"object":"TrueTypeFontProgram","deferred":null,"tags":"font","description":"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","test":"isSymbolic == true || (cmap30Present == true ? nrCmaps > 1 : nrCmaps > 0)","error":{"message":"The embedded font program for a non-symbolic TrueType font does not contain non-symbolic cmap entries","arguments":[]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.6","testNumber":1}},{"object":"PDStructElem","deferred":null,"tags":"structure","description":"A structure element dictionary shall contain the P (parent) entry according to ISO 32000-1:2008, 14.7.2, Table 355","test":"containsParent == true","error":{"message":"A structure element dictionary does not contain the P (parent) entry","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.7.2, Table 355"}],"tagsSet":["structure"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":12}},{"object":"SEFigure","deferred":null,"tags":"alt-text,structure,figure","description":"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","test":"(Alt != null && Alt != '') || ActualText != null","error":{"message":"Figure structure element neither has an alternate description nor a replacement text","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.7.2"}],"tagsSet":["alt-text","structure","figure"],"ruleId":{"specification":"ISO_14289_1","clause":"7.3","testNumber":1}},{"object":"PDReferencedCMap","deferred":null,"tags":"font","description":"A CMap shall not reference any other CMap except those listed in ISO 32000-1:2008, 9.7.5.2, Table 118","test":"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\"","error":{"message":"A CMap references another non-standard CMap %1","arguments":[{"argument":"CMapName","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"9.7.5.2, Table 118"}],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.3.3","testNumber":3}},{"object":"SETOC","deferred":null,"tags":"structure,toc","description":"TOC element may contain a Caption element only as its first kid","test":"kidsStandardTypes == '' || kidsStandardTypes.split('&').slice(1).findIndex(elem => elem == 'Caption') < 0","error":{"message":"TOC element contains Caption as its %1 child instead of first one","arguments":[{"argument":"kidsStandardTypes.split('&').slice(1).findIndex(elem => elem == 'Caption') + 2","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.2"}],"tagsSet":["structure","toc"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":28}},{"object":"PDType1Font","deferred":null,"tags":"font","description":"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","test":"containsFontFile == false || fontName.search(/[A-Z]{6}\\+/) != 0 || CharSet == null || charSetListsAllGlyphs == true","error":{"message":"A CharSet entry in the Descriptor dictionary of a Type1 font incorrectly lists glyphs present in the font program","arguments":[]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.4.2","testNumber":1}},{"object":"Glyph","deferred":null,"tags":"font","description":"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","test":"toUnicode == null || (toUnicode.indexOf(\"\\u0000\") == -1 && toUnicode.indexOf(\"\\uFFFE\") == -1 && toUnicode.indexOf(\"\\uFEFF\") == -1)","error":{"message":"The glyph has Unicode value 0, U+FEFF or U+FFFE, which is invalid by Unicode standard","arguments":[]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.7","testNumber":2}},{"object":"SENonStandard","deferred":null,"tags":"structure","description":"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","test":"isNotMappedToStandardType == false","error":{"message":"Non-standard structure type %1 is not mapped to a standard type","arguments":[{"argument":"valueS","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4"}],"tagsSet":["structure"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":5}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"Table rows shall have the same number of columns (taking into account column spans)","test":"numberOfRowWithWrongColumnSpan == null || wrongColumnSpan != null","error":{"message":"Table rows 1 and %1 span different number of columns","arguments":[{"argument":"numberOfRowWithWrongColumnSpan + 1","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":42}},{"object":"PDStructElem","deferred":null,"tags":"structure,lang","description":"Natural language for text in E attribute shall be determined","test":"E == null || containsLang == true || parentLang != null || gContainsCatalogLang == true","error":{"message":"Natural language for text in E attribute cannot be determined","arguments":[]},"references":[],"tagsSet":["structure","lang"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":23}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"Table element may contain a Caption element as its first or last kid","test":"kidsStandardTypes.indexOf('&Caption&') < 0","error":{"message":"Table element contains Caption as its %1 child instead of first or last one","arguments":[{"argument":"kidsStandardTypes.split('&').slice(1).findIndex(elem => elem == 'Caption') + 2","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":16}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"If Table element contains THead kid, Table element should contain one or more TBody kids","test":"kidsStandardTypes.split('&').filter(elem => elem == 'THead').length == 0 || kidsStandardTypes.split('&').filter(elem => elem == 'TBody').length > 0","error":{"message":"Table element contains THead kid, but does not contain TBody kids","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":14}},{"object":"SETOC","deferred":null,"tags":"structure,toc","description":"TOC element may contain only TOC, TOCI and Caption elements","test":"kidsStandardTypes.split('&').filter(elem => elem != 'TOC' && elem != 'TOCI' && elem != 'Caption').length == 0 || kidsStandardTypes == ''","error":{"message":"TOC element contains %1 element(s) instead of TOC, TOCI or Caption","arguments":[{"argument":"kidsStandardTypes.split('&').filter(elem => elem != 'TOC' && elem != 'TOCI'\n                        && elem != 'Caption').toString()","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.2"}],"tagsSet":["structure","toc"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":27}},{"object":"SEHn","deferred":null,"tags":"structure,heading","description":"All documents shall be either strongly or weakly structured, but not both","test":"usesH == false","error":{"message":"Document uses both H and H# tags","arguments":[]},"references":[],"tagsSet":["structure","heading"],"ruleId":{"specification":"ISO_14289_1","clause":"7.4.4","testNumber":3}},{"object":"PDFUAIdentification","deferred":null,"tags":"metadata","description":"The value of \"pdfuaid:part\" shall be the part number of the International Standard to which the file conforms","test":"part == 1","error":{"message":"The \"part\" property of the PDF/UA Identification Schema is %1 instead of 1 for PDF/UA-1 conforming file","arguments":[{"argument":"part","name":null,"argumentValue":null}]},"references":[],"tagsSet":["metadata"],"ruleId":{"specification":"ISO_14289_1","clause":"5","testNumber":2}},{"object":"SETBody","deferred":null,"tags":"structure,table","description":"TBody element should be contained in Table element","test":"parentStandardType == 'Table'","error":{"message":"TBody element contained in %1 instead of Table element","arguments":[{"argument":"parentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":6}},{"object":"PDOCConfig","deferred":null,"tags":"syntax","description":"The AS key shall not appear in any optional content configuration dictionary","test":"AS == null","error":{"message":"AS key is present in the optional content configuration dictionary","arguments":[]},"references":[],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.10","testNumber":2}},{"object":"CosDocument","deferred":null,"tags":"syntax","description":"The file header shall consist of \"%PDF-1.n\" followed by a single EOL marker, where 'n' is a single digit number between 0 (30h) and 7 (37h)","test":"/^%PDF-1\\.[0-7]$/.test(header)","error":{"message":"File header %1 does not match the pattern %PDF-1.n, where 'n' is a single digit number between 0 and 7","arguments":[{"argument":"header","name":null,"argumentValue":null}]},"references":[],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"6.1","testNumber":1}},{"object":"Glyph","deferred":null,"tags":"font","description":"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","test":"toUnicode != null","error":{"message":"The glyph can not be mapped to Unicode","arguments":[]},"references":[{"specification":"ISO 14289-1:2014","clause":"7.21.7"}],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.7","testNumber":1}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"Table element may contain only TR, THead, TBody, TFoot and Caption elements","test":"kidsStandardTypes.split('&').filter(elem => elem != 'TR' && elem != 'THead' && elem != 'TBody' && elem != 'TFoot' && elem != 'Caption').length == 0 || kidsStandardTypes == ''","error":{"message":"Table element contains %1 element(s) instead of TR, THead, TBode, TFoot or Caption","arguments":[{"argument":"kidsStandardTypes.split('&').filter(elem => elem != 'TR' && elem != 'THead'\n                        && elem != 'TBody' && elem != 'TFoot' && elem != 'Caption').toString()","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":3}},{"object":"CosDocument","deferred":null,"tags":"syntax","description":"The document catalog dictionary shall include a MarkInfo dictionary containing an entry, Marked, whose value shall be true","test":"Marked == true","error":{"message":"MarkInfo dictionary is not present in the document catalog, or Marked entry is set to false or is not present in the MarkInfo dictionary (MarkInfo = %1, Marked = %2)","arguments":[{"argument":"MarkInfo","name":null,"argumentValue":null},{"argument":"Marked","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.7.1"}],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"6.2","testNumber":1}},{"object":"PDFUAIdentification","deferred":null,"tags":"metadata","description":"Property \"amd\" of the PDF/UA Identification Schema shall have namespace prefix \"pdfuaid\"","test":"amdPrefix == null || amdPrefix == \"pdfuaid\"","error":{"message":"Property \"amd\" of the PDF/UA Identification Schema has invalid namespace prefix %1","arguments":[{"argument":"amdPrefix","name":null,"argumentValue":null}]},"references":[],"tagsSet":["metadata"],"ruleId":{"specification":"ISO_14289_1","clause":"5","testNumber":4}},{"object":"Glyph","deferred":null,"tags":"font","description":"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","test":"renderingMode == 3 || isGlyphPresent == null || isGlyphPresent == true","error":{"message":"Not all glyphs referenced for rendering are present in the embedded font program","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"9.3.6"},{"specification":"ISO 32000-1:2008","clause":"9.6.6.4"}],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.4.1","testNumber":2}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"Table rows shall have the same number of columns (taking into account column spans)","test":"numberOfRowWithWrongColumnSpan == null || wrongColumnSpan == null","error":{"message":"Table rows 1 and %1 span different number of columns (%2 and %3 respectively)","arguments":[{"argument":"numberOfRowWithWrongColumnSpan + 1","name":null,"argumentValue":null},{"argument":"columnSpan","name":null,"argumentValue":null},{"argument":"wrongColumnSpan","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":43}},{"object":"PDEncryption","deferred":null,"tags":"syntax","description":"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","test":"P != null && (P & 512) == 512","error":{"message":"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 (P = %1, 10th bit = %2)","arguments":[{"argument":"P","name":null,"argumentValue":null},{"argument":"P != null ? (P & 512) >> 9 : null","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"7.6.3.2"}],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.16","testNumber":1}},{"object":"PDDocument","deferred":null,"tags":"structure","description":"The logical structure of the conforming file shall be described by a structure hierarchy rooted in the StructTreeRoot entry of the document catalog dictionary, as described in ISO 32000-1:2008, 14.7","test":"containsStructTreeRoot == true","error":{"message":"StructTreeRoot entry is not present in the document catalog","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.7"}],"tagsSet":["structure"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":11}},{"object":"SETR","deferred":null,"tags":"structure,table","description":"TR element may contain only TH and TD elements","test":"/^(TH|TD)(&(TH|TD))*$/.test(kidsStandardTypes) || kidsStandardTypes == ''","error":{"message":"TR element contains %1 element(s) instead of TH or TD","arguments":[{"argument":"kidsStandardTypes.split('&').filter(elem => elem != 'TD' && elem != 'TH').toString()","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":10}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"Table element should contain zero or one THead kid","test":"kidsStandardTypes.split('&').filter(elem => elem == 'THead').length <= 1","error":{"message":"Table element contains more than one THead kid","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":11}},{"object":"PDAnnot","deferred":null,"tags":"annotation,alt-text","description":"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","test":"Subtype == 'Widget' || isOutsideCropBox == true || (F & 2) == 2 || (Contents != null && Contents != '') || (Alt != null && Alt != '')","error":{"message":"%1 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","arguments":[{"argument":"Subtype","name":null,"argumentValue":null}]},"references":[],"tagsSet":["annotation","alt-text"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.1","testNumber":2}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"If Table element contains TFoot kid, Table element should contain one or more TBody kids","test":"kidsStandardTypes.split('&').filter(elem => elem == 'TFoot').length == 0 || kidsStandardTypes.split('&').filter(elem => elem == 'TBody').length > 0","error":{"message":"Table element contains TFoot kid, but does not contain TBody kids","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":13}},{"object":"SEMarkedContent","deferred":null,"tags":"artifact","description":"Tagged content should not be present inside content marked as Artifact","test":"isTaggedContent == false || parentsTags.contains('Artifact') == false","error":{"message":"Tagged content (parent struct element %1) is present inside content marked as Artifact","arguments":[{"argument":"parentStructureElementObjectKey","name":null,"argumentValue":null}]},"references":[],"tagsSet":["artifact"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":2}},{"object":"PDMediaClip","deferred":null,"tags":"alt-text","description":"In the media clip data dictionary, the optional Alt key (ISO 32000-1:2008, 13.2.4.2, Table 274) is required","test":"hasCorrectAlt == true","error":{"message":"Alt key (value %1) is missing from the media clip data dictionary or has incorrect value","arguments":[{"argument":"Alt","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"13.2.4.2"}],"tagsSet":["alt-text"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.6.2","testNumber":2}},{"object":"SETHead","deferred":null,"tags":"structure,table","description":"THead element may contain only TR elements","test":"kidsStandardTypes.split('&').filter(elem => elem != 'TR').length == 0 || kidsStandardTypes == ''","error":{"message":"THead element contains %1 element(s) instead of TR","arguments":[{"argument":"kidsStandardTypes.split('&').filter(elem => elem != 'TR').toString()","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":36}},{"object":"CMapFile","deferred":null,"tags":"font","description":"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","test":"WMode == dictWMode","error":{"message":"WMode entry (value %1) in the embedded CMap and in the CMap dictionary (value %2) are not identical","arguments":[{"argument":"WMode","name":null,"argumentValue":null},{"argument":"dictWMode","name":null,"argumentValue":null}]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.3.3","testNumber":2}},{"object":"SETextItem","deferred":null,"tags":"lang,text","description":"Natural language for text in page content shall be determined","test":"gContainsCatalogLang == true || Lang != null","error":{"message":"Natural language for text in page content cannot be determined","arguments":[]},"references":[],"tagsSet":["lang","text"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":34}},{"object":"PDWidgetAnnot","deferred":null,"tags":"annotation","description":"A Widget annotation shall be nested within a Form tag per ISO 32000-1:2008, 14.8.4.5, Table 340","test":"structParentStandardType == 'Form' || isOutsideCropBox == true || (F & 2) == 2","error":{"message":"A Widget annotation is an Artifact or is nested within %1 tag (standard type = %2) instead of Form","arguments":[{"argument":"structParentType","name":null,"argumentValue":null},{"argument":"structParentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.5"}],"tagsSet":["annotation"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.4","testNumber":1}},{"object":"SETableCell","deferred":null,"tags":"structure,table","description":"A table cell shall not have intersection with other cells","test":"hasIntersection != true","error":{"message":"Table cell has intersection with other cells","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":15}},{"object":"PDPrinterMarkAnnot","deferred":null,"tags":"annotation","description":"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","test":"structParentType == null || isOutsideCropBox == true || (F & 2) == 2","error":{"message":"A PrinterMark annotation is included in logical structure","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.2.2.3"}],"tagsSet":["annotation"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.8","testNumber":1}},{"object":"MainXMPPackage","deferred":null,"tags":"metadata","description":"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","test":"dc_title != null","error":{"message":"Metadata stream does not contain dc:title","arguments":[]},"references":[],"tagsSet":["metadata"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":9}},{"object":"SELI","deferred":null,"tags":"structure,list","description":"LI element should be contained in L element","test":"parentStandardType == 'L'","error":{"message":"LI element contained in %1 instead of L element","arguments":[{"argument":"parentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.3"}],"tagsSet":["structure","list"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":17}},{"object":"SETFoot","deferred":null,"tags":"structure,table","description":"TFoot element may contain only TR elements","test":"kidsStandardTypes.split('&').filter(elem => elem != 'TR').length == 0 || kidsStandardTypes == ''","error":{"message":"TFoot element contains %1 element(s) instead of TR","arguments":[{"argument":"kidsStandardTypes.split('&').filter(elem => elem != 'TR').toString()","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":38}},{"object":"PDMediaClip","deferred":null,"tags":"syntax","description":"In the media clip data dictionary, the optional CT key (ISO 32000-1:2008, 13.2.4.2, Table 274) is required","test":"CT != null","error":{"message":"CT key is missing from the media clip data dictionary","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"13.2.4.2"}],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.6.2","testNumber":1}},{"object":"CosFileSpecification","deferred":null,"tags":"syntax","description":"The file specification dictionary for an embedded file shall contain the non-empty F and UF keys","test":"containsEF == false || (F != null && F != '' && UF != null && UF != '')","error":{"message":"The file specification dictionary for an embedded file does not contain either F or UF key or at least one of the keys is empty (F = %1, UF = %2)","arguments":[{"argument":"F","name":null,"argumentValue":null},{"argument":"UF","name":null,"argumentValue":null}]},"references":[],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.11","testNumber":1}},{"object":"PDTrapNetAnnot","deferred":null,"tags":"annotation","description":"Annotations of subtype TrapNet shall not be permitted","test":"isOutsideCropBox == true || (F & 2) == 2","error":{"message":"An annotation of subtype TrapNet exists","arguments":[]},"references":[],"tagsSet":["annotation"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.2","testNumber":1}},{"object":"PDPage","deferred":null,"tags":"page","description":"Every page on which there is an annotation shall contain in its page dictionary the key Tabs, and its value shall be S","test":"containsAnnotations == false || Tabs == 'S'","error":{"message":"A page with annotation(s) contains Tabs key with value %1 instead of S","arguments":[{"argument":"Tabs","name":null,"argumentValue":null}]},"references":[],"tagsSet":["page"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.3","testNumber":1}},{"object":"SEMarkedContent","deferred":null,"tags":"artifact","description":"Content marked as Artifact should not be present inside tagged content","test":"tag != 'Artifact' || isTaggedContent == false","error":{"message":"Content marked as Artifact is present inside tagged content (parent struct element %1)","arguments":[{"argument":"parentStructureElementObjectKey","name":null,"argumentValue":null}]},"references":[],"tagsSet":["artifact"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":1}},{"object":"PDOutline","deferred":null,"tags":"lang","description":"Natural language in the Outline entries shall be determined","test":"gContainsCatalogLang == true","error":{"message":"Natural language in the Outline entries cannot be determined","arguments":[]},"references":[],"tagsSet":["lang"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":2}},{"object":"SEMarkedContent","deferred":null,"tags":"lang,alt-text","description":"Natural language for text in Alt attribute in Span Marked Content shall be determined","test":"tag != 'Span' || Alt == null || Lang != null || inheritedLang != null || gContainsCatalogLang == true","error":{"message":"Natural language for text in Alt attribute in Span Marked Content cannot be determined","arguments":[]},"references":[],"tagsSet":["lang","alt-text"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":31}},{"object":"PDType0Font","deferred":null,"tags":"font","description":"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","test":"cmapName == \"Identity-H\" || cmapName == \"Identity-V\" || (CIDFontOrdering != null && CIDFontOrdering == CMapOrdering && CIDFontRegistry != null && CIDFontRegistry == CMapRegistry && CIDFontSupplement != null && CMapSupplement != null && CIDFontSupplement <= CMapSupplement)","error":{"message":"CIDSystemInfo entries the CIDFont and CMap dictionaries of a Type 0 font are not compatible (CIDSystemInfo Ordering = %1, CMap Ordering = %2, CIDSystemInfo Registry = %3, CMap Registry = %4, CIDSystemInfo Supplement = %5, CMap Supplement = %6)","arguments":[{"argument":"CIDFontOrdering","name":null,"argumentValue":null},{"argument":"CMapOrdering","name":null,"argumentValue":null},{"argument":"CIDFontRegistry","name":null,"argumentValue":null},{"argument":"CMapRegistry","name":null,"argumentValue":null},{"argument":"CIDFontSupplement","name":null,"argumentValue":null},{"argument":"CMapSupplement","name":null,"argumentValue":null}]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.3.1","testNumber":1}},{"object":"SETR","deferred":null,"tags":"structure,table","description":"TR element should be contained in Table, THead, TBody or TFoot element","test":"/^(Table|THead|TBody|TFoot)$/.test(parentStandardType)","error":{"message":"TR element contained in %1 instead of Table, THead, TBody or TFoot element","arguments":[{"argument":"parentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":4}},{"object":"SEHn","deferred":null,"tags":"structure,heading","description":"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","test":"hasCorrectNestingLevel == true","error":{"message":"Heading level %1 is skipped in a descending sequence of header levels","arguments":[{"argument":"nestingLevel - 1","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.5"}],"tagsSet":["structure","heading"],"ruleId":{"specification":"ISO_14289_1","clause":"7.4.2","testNumber":1}},{"object":"SENote","deferred":null,"tags":"structure,note","description":"Note tag shall have ID entry","test":"noteID != null && noteID != ''","error":{"message":"ID key of the Note tag is not present","arguments":[]},"references":[],"tagsSet":["structure","note"],"ruleId":{"specification":"ISO_14289_1","clause":"7.9","testNumber":1}},{"object":"SETD","deferred":null,"tags":"structure,table","description":"If the table's structure is not determinable via Headers and IDs, then structure elements of type TH shall have a Scope attribute","test":"hasConnectedHeader != false || unknownHeaders == ''","error":{"message":"TD references undefined Header(s) %1, and Headers for this table cell cannot be determined algorithmically","arguments":[{"argument":"unknownHeaders","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-2:2020","clause":"14.8.4.8.3"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.5","testNumber":2}},{"object":"SESimpleContentItem","deferred":null,"tags":"artifact","description":"Content shall be marked as Artifact or tagged as real content","test":"isTaggedContent == true || parentsTags.contains('Artifact') == true","error":{"message":"Content is neither marked as Artifact nor tagged as real content","arguments":[]},"references":[],"tagsSet":["artifact"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":3}},{"object":"TrueTypeFontProgram","deferred":null,"tags":"font","description":"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","test":"isSymbolic == false || nrCmaps == 1 || cmap30Present == true","error":{"message":"The embedded font program for a symbolic TrueType font contains %1 cmap subtables and does not contain Microsoft Symbol (3,0 – Platform ID=3, Encoding ID=0)","arguments":[{"argument":"nrCmaps","name":null,"argumentValue":null}]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.6","testNumber":4}},{"object":"SEForm","deferred":null,"tags":"structure","description":"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","test":"roleAttribute != null || hasOneInteractiveChild == true","error":{"message":"The Form element omits a Role attribute and doesn't have only one child identifying the widget annotation","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.5"}],"tagsSet":["structure"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.4","testNumber":2}},{"object":"SEL","deferred":null,"tags":"structure,list","description":"L element may contain a Caption element only as its first kid","test":"kidsStandardTypes == '' || kidsStandardTypes.split('&').slice(1).findIndex(elem => elem == 'Caption') < 0","error":{"message":"L element contains Caption as its %1 child instead of first one","arguments":[{"argument":"kidsStandardTypes.split('&').slice(1).findIndex(elem => elem == 'Caption') + 2","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.2"}],"tagsSet":["structure","list"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":40}},{"object":"PDAcroForm","deferred":null,"tags":"syntax","description":"Dynamic XFA forms shall not be used","test":"dynamicRender != 'required'","error":{"message":"Dynamic XFA forms is present","arguments":[]},"references":[],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.15","testNumber":1}},{"object":"PDFUAIdentification","deferred":null,"tags":"metadata","description":"Property \"part\" of the PDF/UA Identification Schema shall have namespace prefix \"pdfuaid\"","test":"partPrefix == null || partPrefix == \"pdfuaid\"","error":{"message":"Property \"part\" of the PDF/UA Identification Schema has invalid namespace prefix %1","arguments":[{"argument":"partPrefix","name":null,"argumentValue":null}]},"references":[],"tagsSet":["metadata"],"ruleId":{"specification":"ISO_14289_1","clause":"5","testNumber":3}},{"object":"SETD","deferred":null,"tags":"structure,table","description":"If the table's structure is not determinable via Headers and IDs, then structure elements of type TH shall have a Scope attribute","test":"hasConnectedHeader != false || unknownHeaders != ''","error":{"message":"TD does not contain Headers attribute, and Headers for this table cell cannot be determined algorithmically","arguments":[]},"references":[{"specification":"ISO 32000-2:2020","clause":"14.8.4.8.3"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.5","testNumber":1}},{"object":"PDCIDFont","deferred":null,"tags":"font","description":"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","test":"Subtype != \"CIDFontType2\" || CIDToGIDMap != null || containsFontFile == false","error":{"message":"A Type 2 CIDFont dictionary has missing or invalid CIDToGIDMap entry","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"9.7.4, Table 117"}],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.3.2","testNumber":1}},{"object":"CosDocument","deferred":null,"tags":"syntax","description":"The document catalog dictionary shall include a ViewerPreferences dictionary containing a DisplayDocTitle key, whose value shall be true","test":"DisplayDocTitle == true","error":{"message":"ViewerPreferences dictionary is not present in the document Catalog, or DisplayDocTitle key is set to false or is not present in the ViewerPreferences dictionary (ViewerPreferences = %1, DisplayDocTitle = %2)","arguments":[{"argument":"ViewerPreferences","name":null,"argumentValue":null},{"argument":"DisplayDocTitle","name":null,"argumentValue":null}]},"references":[],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":10}},{"object":"PDXForm","deferred":null,"tags":"syntax","description":"A conforming file shall not contain any reference XObjects","test":"containsRef == false","error":{"message":"The document contains a reference XObject (Ref key in the form XObject dictionary)","arguments":[]},"references":[],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.20","testNumber":1}},{"object":"Glyph","deferred":null,"tags":"font","description":"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","test":"renderingMode == 3 || widthFromFontProgram == null || widthFromDictionary == null || Math.abs(widthFromFontProgram - widthFromDictionary) <= 1","error":{"message":"Glyph width %1 in the embedded font program is not consistent with the Widths entry of the font dictionary (value %2)","arguments":[{"argument":"widthFromFontProgram","name":null,"argumentValue":null},{"argument":"widthFromDictionary","name":null,"argumentValue":null}]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.5","testNumber":1}},{"object":"SELBody","deferred":null,"tags":"structure,list","description":"LBody element should be contained in LI element","test":"parentStandardType == 'LI'","error":{"message":"LBody element contained in %1 instead of LI element","arguments":[{"argument":"parentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.3"}],"tagsSet":["structure","list"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":18}},{"object":"PDAnnot","deferred":null,"tags":"lang,annotation,structure","description":"Natural language in the Contents entry for annotations shall be determined","test":"Contents == null || containsLang == true || gContainsCatalogLang == true","error":{"message":"Natural language in the Contents entry for annotations cannot be determined","arguments":[]},"references":[],"tagsSet":["lang","annotation","structure"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":24}},{"object":"PDFormField","deferred":null,"tags":"structure,lang","description":"Natural language in the TU key for form fields shall be determined","test":"TU == null || containsLang == true || gContainsCatalogLang == true","error":{"message":"Natural language in the TU key for form fields cannot be determined","arguments":[]},"references":[],"tagsSet":["structure","lang"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":25}},{"object":"PDCMap","deferred":null,"tags":"font","description":"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","test":"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\" || containsEmbeddedFile == true","error":{"message":"A non-standard CMap %1 is not embedded","arguments":[{"argument":"CMapName","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"9.7.5.2, Table 118"}],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.3.3","testNumber":1}},{"object":"SENote","deferred":null,"tags":"structure,note","description":"Each Note tag shall have unique ID key","test":"hasDuplicateNoteID == false","error":{"message":"ID key %1 of the Note tag is non-unique","arguments":[{"argument":"noteID","name":null,"argumentValue":null}]},"references":[],"tagsSet":["structure","note"],"ruleId":{"specification":"ISO_14289_1","clause":"7.9","testNumber":2}},{"object":"SETFoot","deferred":null,"tags":"structure,table","description":"TFoot element should be contained in Table element","test":"parentStandardType == 'Table'","error":{"message":"TFoot element contained in %1 instead of Table element","arguments":[{"argument":"parentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":7}},{"object":"PDTrueTypeFont","deferred":null,"tags":"font","description":"Symbolic TrueType fonts shall not contain an Encoding entry in the font dictionary","test":"isSymbolic == false || Encoding == null","error":{"message":"A symbolic TrueType font specifies an Encoding entry in its dictionary","arguments":[]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.6","testNumber":3}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"Table element may contain only one Caption element","test":"kidsStandardTypes.split('&').filter(elem => elem == 'Caption').length < 2","error":{"message":"Table element contains %1 Caption elements instead of one","arguments":[{"argument":"kidsStandardTypes.split('&').filter(elem => elem == 'Caption').length","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":39}},{"object":"PDDocument","deferred":null,"tags":"metadata","description":"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. The metadata stream dictionary shall contain entry Type with value /Metadata and entry Subtype with value /XML","test":"containsMetadata == true","error":{"message":"The document catalog dictionary doesn't contain metadata key or metadata stream dictionary does not contain either entry Type with value /Metadata or entry Subtype with value /XML","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.3.2"}],"tagsSet":["metadata"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":8}},{"object":"SEFormula","deferred":null,"tags":"structure,alt-text","description":"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","test":"(Alt != null && Alt != '') || ActualText != null","error":{"message":"Formula structure element neither has an alternate description nor a replacement text","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.5"}],"tagsSet":["structure","alt-text"],"ruleId":{"specification":"ISO_14289_1","clause":"7.7","testNumber":1}},{"object":"PDAnnot","deferred":null,"tags":"annotation","description":"An annotation, excluding annotations of subtype Widget, PrinterMark or Link, shall be nested within an Annot tag","test":"Subtype == 'Widget' || Subtype == 'PrinterMark' || Subtype == 'Link' || isOutsideCropBox == true || (F & 2) == 2 || structParentStandardType == 'Annot'","error":{"message":"%1 annotation is an Artifact or is nested within %2 tag (standard type = %3) instead of Annot","arguments":[{"argument":"Subtype","name":null,"argumentValue":null},{"argument":"structParentType","name":null,"argumentValue":null},{"argument":"structParentStandardType","name":null,"argumentValue":null}]},"references":[],"tagsSet":["annotation"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.1","testNumber":1}},{"object":"SETD","deferred":null,"tags":"structure,table","description":"TD element should be contained in TR element","test":"parentStandardType == 'TR'","error":{"message":"TD element contained in %1 instead of TR element","arguments":[{"argument":"parentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":9}},{"object":"SELI","deferred":null,"tags":"structure,list","description":"LI element may contain only Lbl and LBody elements","test":"/^(Lbl|LBody)(&(Lbl|LBody))*$/.test(kidsStandardTypes) || kidsStandardTypes == ''","error":{"message":"LI element contains %1 element(s) instead of Lbl or LBody","arguments":[{"argument":"kidsStandardTypes.split('&').filter(elem => elem != 'LBody' && elem != 'Lbl').toString()","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.3"}],"tagsSet":["structure","list"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":20}},{"object":"SEMarkedContent","deferred":null,"tags":"lang,alt-text","description":"Natural language for text in E attribute in Span Marked Content shall be determined","test":"tag != 'Span' || E == null || Lang != null || inheritedLang != null || gContainsCatalogLang == true","error":{"message":"Natural language for text in E attribute in Span Marked Content cannot be determined","arguments":[]},"references":[],"tagsSet":["lang","alt-text"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":32}},{"object":"CosDocument","deferred":null,"tags":"syntax","description":"Files shall have a Suspects value of false(ISO 32000-1:2008, Table 321)","test":"Suspects != true","error":{"message":"Suspects entry has a value of true","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.7.1"}],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.1","testNumber":4}},{"object":"SEMarkedContent","deferred":null,"tags":"lang,alt-text","description":"Natural language for text in ActualText attribute in Span Marked Content shall be determined","test":"tag != 'Span' || ActualText == null || Lang != null || inheritedLang != null || gContainsCatalogLang == true","error":{"message":"Natural language for text in ActualText attribute in Span Marked Content cannot be determined","arguments":[]},"references":[],"tagsSet":["lang","alt-text"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":30}},{"object":"PDCIDFont","deferred":null,"tags":"font","description":"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","test":"containsFontFile == false || fontName.search(/[A-Z]{6}\\+/) != 0 || containsCIDSet == false || cidSetListsAllGlyphs == true","error":{"message":"A CIDSet entry in the Font descriptor does not correctly identify all glyphs present in the embedded font subset","arguments":[]},"references":[],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.4.2","testNumber":2}},{"object":"PDOCConfig","deferred":null,"tags":"syntax","description":"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","test":"Name != null && Name.length() > 0","error":{"message":"Missing or empty Name entry of the optional content configuration dictionary","arguments":[]},"references":[],"tagsSet":["syntax"],"ruleId":{"specification":"ISO_14289_1","clause":"7.10","testNumber":1}},{"object":"SETable","deferred":null,"tags":"structure,table","description":"Table element should contain zero or one TFoot kid","test":"kidsStandardTypes.split('&').filter(elem => elem == 'TFoot').length <= 1","error":{"message":"Table element contains more than one TFoot kid","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":12}},{"object":"PDLinkAnnot","deferred":null,"tags":"annotation","description":"Links shall be tagged according to ISO 32000-1:2008, 14.8.4.4.2, Link Element","test":"structParentStandardType == 'Link' || isOutsideCropBox == true || (F & 2) == 2","error":{"message":"A Link annotation is an Artifact or is nested within %1 tag (standard type = %2) instead of Link","arguments":[{"argument":"structParentType","name":null,"argumentValue":null},{"argument":"structParentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.4.2"}],"tagsSet":["annotation"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.5","testNumber":1}},{"object":"PDStructElem","deferred":null,"tags":"structure,lang","description":"Natural language for text in Alt attribute shall be determined","test":"Alt == null || containsLang == true || parentLang != null || gContainsCatalogLang == true","error":{"message":"Natural language for text in Alt attribute cannot be determined","arguments":[]},"references":[],"tagsSet":["structure","lang"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":22}},{"object":"PDLinkAnnot","deferred":null,"tags":"structure,annotation,alt-text","description":"Links shall contain an alternate description via their Contents key as described in ISO 32000-1:2008, 14.9.3","test":"(Contents != null && Contents != '') || isOutsideCropBox == true || (F & 2) == 2","error":{"message":"A link annotation does not include an alternate description in the Contents key","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.9.3"}],"tagsSet":["structure","annotation","alt-text"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.5","testNumber":2}},{"object":"PDFont","deferred":null,"tags":"font","description":"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","test":"Subtype == \"Type3\" || Subtype == \"Type0\" || renderingMode == 3 || containsFontFile == true","error":{"message":"The font program is not embedded","arguments":[]},"references":[{"specification":"ISO 32000-1:2008","clause":"9.9"}],"tagsSet":["font"],"ruleId":{"specification":"ISO_14289_1","clause":"7.21.4.1","testNumber":1}},{"object":"PDStructElem","deferred":null,"tags":"structure,heading","description":"Each node in the tag tree shall contain at most one child H tag","test":"kidsStandardTypes.split('&').filter(elem => elem == 'H').length <= 1","error":{"message":"A node contains more than one H tag","arguments":[]},"references":[],"tagsSet":["structure","heading"],"ruleId":{"specification":"ISO_14289_1","clause":"7.4.4","testNumber":1}},{"object":"SETH","deferred":null,"tags":"structure,table","description":"TH element should be contained in TR element","test":"parentStandardType == 'TR'","error":{"message":"TH element contained in %1 instead of TR element","arguments":[{"argument":"parentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":8}},{"object":"PDStructElem","deferred":null,"tags":"structure,lang","description":"Natural language for text in ActualText attribute shall be determined","test":"ActualText == null || containsLang == true || parentLang != null || gContainsCatalogLang == true","error":{"message":"Natural language for text in ActualText attribute cannot be determined","arguments":[]},"references":[],"tagsSet":["structure","lang"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":21}},{"object":"SETOCI","deferred":null,"tags":"structure,toc","description":"TOCI element should be contained in TOC element","test":"parentStandardType == 'TOC'","error":{"message":"TOCI element contained in %1 instead of TOC element","arguments":[{"argument":"parentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.2"}],"tagsSet":["structure","toc"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":26}},{"object":"SETHead","deferred":null,"tags":"structure,table","description":"THead element should be contained in Table element","test":"parentStandardType == 'Table'","error":{"message":"THead element contained in %1 instead of Table element","arguments":[{"argument":"parentStandardType","name":null,"argumentValue":null}]},"references":[{"specification":"ISO 32000-1:2008","clause":"14.8.4.3.4"}],"tagsSet":["structure","table"],"ruleId":{"specification":"ISO_14289_1","clause":"7.2","testNumber":5}},{"object":"PDWidgetAnnot","deferred":null,"tags":"annotation,alt-text","description":"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)","test":"isOutsideCropBox == true || (F & 2) == 2 || (TU != null && TU != '') || (Alt != null && Alt != '')","error":{"message":"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)","arguments":[]},"references":[],"tagsSet":["annotation","alt-text"],"ruleId":{"specification":"ISO_14289_1","clause":"7.18.1","testNumber":3}}],"variables":[{"name":"gContainsCatalogLang","object":"PDDocument","defaultValue":"false","value":"containsLang"},{"name":"usesHn","object":"SEHn","defaultValue":"false","value":"true"},{"name":"usesH","object":"SEH","defaultValue":"false","value":"true"}],"pdfaflavour":"PDFUA_1","hexSha1Digest":"","tags":["alt-text","annotation","artifact","figure","font","heading","lang","list","metadata","note","page","structure","syntax","table","text","toc"]}