{"record":{"id":"77f9e051cef9d6b7","repo":"parallax/jsPDF","slug":"the-filter-filterchain-i-is-not-implemented","errorCode":null,"errorMessage":"The filter: \"${filterChain[i]}\" is not implemented","messagePattern":"The filter: \"(.+?)\" is not implemented","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/modules/filters.js","lineNumber":188,"sourceCode":"          reverseChain.push(\"/ASCII85Decode\");\n          break;\n        case \"ASCIIHexDecode\":\n        case \"/ASCIIHexDecode\":\n          data = ASCIIHexDecode(data);\n          reverseChain.push(\"/ASCIIHexEncode\");\n          break;\n        case \"ASCIIHexEncode\":\n        case \"/ASCIIHexEncode\":\n          data = ASCIIHexEncode(data);\n          reverseChain.push(\"/ASCIIHexDecode\");\n          break;\n        case \"FlateEncode\":\n        case \"/FlateEncode\":\n          data = FlateEncode(data);\n          reverseChain.push(\"/FlateDecode\");\n          break;\n        default:\n          throw new Error(\n            'The filter: \"' + filterChain[i] + '\" is not implemented'\n          );\n      }\n    }\n\n    return { data: data, reverseChain: reverseChain.reverse().join(\" \") };\n  };\n})(jsPDF.API);\n","sourceCodeStart":170,"sourceCodeEnd":197,"githubUrl":"https://github.com/parallax/jsPDF/blob/a3930ce03a585a26b2c76d12a0f413ce96f6d1a3/src/modules/filters.js#L170-L197","documentation":"processDataByFilters(data, filterChain) walks the filter chain and only recognizes ASCII85Encode/Decode, ASCIIHexEncode/Decode, and FlateEncode (each with optional leading '/'). Any other filter name hits the switch default and throws 'not implemented'. The filter name in the message is the offending token.","triggerScenarios":"Calling jsPDF.API.processDataByFilters(data, 'FlateDecode') — note only FlateENCODE is implemented, FlateDecode is not; passing 'DCTDecode', 'RunLengthDecode', 'CCITTFaxDecode', 'LZWDecode', or any other PDF filter; typos like 'flateencode' (case-sensitive) or missing '/' prefix variants.","commonSituations":"Trying to DEFLATE-decompress an embedded stream (FlateDecode unsupported); mixing up Encode/Decode directions; copying filter names from PDF specs that jsPDF never implemented.","solutions":["Use only the implemented names: ASCII85Encode/Decode, ASCIIHexEncode/Decode, FlateEncode (optionally with a leading '/').","For decompression (FlateDecode) use an external library (pako/zlib) and feed the result back to jsPDF.","Check filter name case and the optional leading slash against the switch cases."],"exampleFix":"// before\nconst out = jsPDF.API.processDataByFilters(stream, 'FlateDecode'); // throws [116]\n\n// after: decode with pako, then re-encode with jsPDF if needed\nimport { inflate } from 'pako';\nconst decoded = inflate(stream);\nconst reencoded = jsPDF.API.processDataByFilters(decoded, 'FlateEncode');","handlingStrategy":"validation","validationCode":"const IMPLEMENTED_FILTERS = new Set([\n  'ASCII85Encode', '/ASCII85Encode',\n  'ASCII85Decode', '/ASCII85Decode',\n  'ASCIIHexEncode', '/ASCIIHexEncode',\n  'ASCIIHexDecode', '/ASCIIHexDecode',\n  'FlateEncode', '/FlateEncode'\n]);\nfunction safeProcessByFilters(data, chain) {\n  const list = Array.isArray(chain) ? chain : [chain];\n  if (!list.every(f => IMPLEMENTED_FILTERS.has(f))) {\n    throw new Error('Unsupported filter requested: ' + list.filter(f => !IMPLEMENTED_FILTERS.has(f)).join(','));\n  }\n  return jsPDF.API.processDataByFilters(data, list);\n}","typeGuard":"function isImplementedFilter(name) {\n  return IMPLEMENTED_FILTERS.has(name);\n}","tryCatchPattern":"try {\n  out = jsPDF.API.processDataByFilters(data, filter);\n} catch (e) {\n  if (/is not implemented/.test(e.message)) {\n    // route to an external decoder (pako for FlateDecode) and skip jsPDF's filter\n  } else throw e;\n}","preventionTips":["Remember FlateDecode (decompression) is NOT implemented — only FlateEncode.","Match filter names exactly (case-sensitive); a leading '/' is optional.","For PDF stream decoding use pako/zlib externally."],"tags":["filters","pdf","validation","unsupported","encode"],"backgroundTag":null,"analyzedSha":"a3930ce03a585a26b2c76d12a0f413ce96f6d1a3","analyzedAt":"2026-08-13T05:33:39.648Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}