{"record":{"id":"d7f381b83a90fb5a","repo":"parallax/jsPDF","slug":"zoom-must-be-integer-e-g-2-a-percentage-value","errorCode":null,"errorMessage":"zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"{zoom}\" is not recognized.","messagePattern":"zoom must be Integer \\(e\\.g\\. 2\\), a percentage Value \\(e\\.g\\. 300%\\) or fullwidth, fullheight, fullpage, original\\. \"(.+?)\" is not recognized\\.","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"src/jspdf.js","lineNumber":904,"sourceCode":"\n  var setZoomMode = (API.__private__.setZoomMode = function(zoom) {\n    var validZoomModes = [\n      undefined,\n      null,\n      \"fullwidth\",\n      \"fullheight\",\n      \"fullpage\",\n      \"original\"\n    ];\n\n    if (/^(?:\\d+\\.\\d*|\\d*\\.\\d+|\\d+)%$/.test(zoom)) {\n      zoomMode = zoom;\n    } else if (!isNaN(zoom)) {\n      zoomMode = parseInt(zoom, 10);\n    } else if (validZoomModes.indexOf(zoom) !== -1) {\n      zoomMode = zoom;\n    } else {\n      throw new Error(\n        'zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. \"' +\n          zoom +\n          '\" is not recognized.'\n      );\n    }\n  });\n\n  API.__private__.getZoomMode = function() {\n    return zoomMode;\n  };\n\n  var pageMode; // default: 'UseOutlines';\n  var setPageMode = (API.__private__.setPageMode = function(pmode) {\n    var validPageModes = [\n      undefined,\n      null,\n      \"UseNone\",\n      \"UseOutlines\",","sourceCodeStart":886,"sourceCodeEnd":922,"githubUrl":"https://github.com/parallax/jsPDF/blob/a3930ce03a585a26b2c76d12a0f413ce96f6d1a3/src/jspdf.js#L886-L922","documentation":"`setZoomMode` (src/jspdf.js:887) accepts an integer zoom factor, a percentage string like `'300%'`, or one of the named modes `fullwidth`, `fullheight`, `fullpage`, `original` (and undefined/null for default). It throws at src/jspdf.js:904 for anything that matches none of these. The numeric branch uses `!isNaN(zoom)`, so numeric strings are tolerated, but arbitrary strings and out-of-vocabulary names are rejected.","triggerScenarios":"`new jsPDF({ zoom: 'fit' })`; `doc.setZoomMode('200')` is fine (numeric), but `'200x'` throws; `zoom: 'FullWidth'` throws (case-sensitive); passing an object or boolean.","commonSituations":"Using viewer-specific zoom vocabulary (`'fit'`, `'fit-width'`, `'actual-size'`) that isn't in jsPDF's list; case typos; passing a value meant for a different PDF viewer's API.","solutions":["Use one of the exact tokens: `'fullwidth'`, `'fullheight'`, `'fullpage'`, `'original'` (lowercase).","For a numeric zoom, pass a number or numeric string (e.g. `2` or `'2'`).","For a percentage, use the `'300%'` form with a `%` suffix.","If migrating from another viewer's options, map their vocabulary onto jsPDF's allowed set."],"exampleFix":"// before\n new jsPDF({ zoom: 'fit-width' });  // throws\n\n// after\n new jsPDF({ zoom: 'fullwidth' });","handlingStrategy":"validation","validationCode":"var ZOOM_TOKENS = ['fullwidth','fullheight','fullpage','original'];\nfunction normalizeZoom(z) {\n  if (z == null) return undefined;\n  if (ZOOM_TOKENS.indexOf(z) !== -1) return z;          // named mode\n  if (typeof z === 'number' || /^\\d+$/.test(String(z))) return parseInt(z, 10); // integer\n  if (/^\\d+(\\.\\d+)?%$/.test(String(z))) return z;       // percentage\n  return undefined; // unsupported -> use default\n}\nvar zoom = normalizeZoom(userZoom);\nif (zoom !== undefined) doc.internal.__private__.setZoomMode(zoom);","typeGuard":"function isValidZoom(z) {\n  if (z == null) return true;\n  if (['fullwidth','fullheight','fullpage','original'].indexOf(z) !== -1) return true;\n  if (!isNaN(z)) return true;\n  return /^\\d+(\\.\\d+)?%$/.test(String(z));\n}","tryCatchPattern":"try {\n  doc.internal.__private__.setZoomMode(zoom);\n} catch (e) {\n  if (/zoom must be/.test(e.message)) {\n    doc.internal.__private__.setZoomMode('fullwidth');  // safe default\n  } else throw e;\n}","preventionTips":["Use only the documented tokens (lowercase) or a numeric/percentage value.","Map viewer-specific vocabulary onto jsPDF's allowed set in a config layer.","Avoid free-text zoom strings from user input."],"tags":["viewer","zoom","config","validation"],"backgroundTag":null,"analyzedSha":"a3930ce03a585a26b2c76d12a0f413ce96f6d1a3","analyzedAt":"2026-08-13T05:33:39.648Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}