{"_id":"dompdf.js","_rev":"14-c9fe49431f884941fd111d8fc8cac420","name":"dompdf.js","dist-tags":{"latest":"2.0.4"},"versions":{"1.0.0":{"name":"dompdf.js","version":"1.0.0","author":{"url":"https://hertzen.com","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.0.0","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://html2canvas.hertzen.com","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"b603e1992e638615dc582af6527e3cc771fe7da9","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.0.0.tgz","fileCount":141,"integrity":"sha512-Ec65PFw5YgIn1hadz7Iu2KUqPKPsmFxjbjj6CVeEvBEYzAN4KvoYxX51/xxqn94XBe09TQYph17jJERGJ6xsOA==","signatures":[{"sig":"MEUCIAQTK4pr6+4IpgZWrE55zuJoYou41yUTYN0BP/tN9FssAiEA35+5ZBlZite253Vu0wuG5XMmCsC+t35A5V2XO4JbWtk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13181420},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"gitHead":"9c14bf95c7f77970099aa65009444aa0454ac8e4","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts && npm run build:create-reftest-list && npm run build:testrunner && npm run build:minify","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","build:minify":"uglifyjs --compress --comments /^!/ -o dist/html2canvas.min.js --mangle -- dist/html2canvas.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","actor":{"name":"dompdfjs","type":"user","email":"lfc191910@gmail.com"},"email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"9.8.1","description":"HTML to PDF","directories":{},"_nodeVersion":"18.18.0","dependencies":{"jspdf":"^2.5.2","fontkit":"^2.0.4","svg2pdf.js":"^2.5.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","uglifyjs-webpack-plugin":"^2.2.0","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^13.0.0","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.0.0_1751904493522_0.03875977023580712","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"dompdf.js","version":"1.0.1","author":{"url":"https://dompdfjs.lisky.com.cn/","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.0.1","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://dompdfjs.lisky.com.cn","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"c4aa42ee93178399a087eea5bbe6b9756780d7b0","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.0.1.tgz","fileCount":141,"integrity":"sha512-hXhp63iQ8qEGsDWifKgqnFvwIhbLajC1eTmIrEo4v+6LwJ+by8E7F7NAXSYKhePkrg+fTVHfy6tV2MI+1aHYHw==","signatures":[{"sig":"MEUCIGiBpUISQkE5i/UF1TkGD6pAP/s0FZphP57uO7rVto9OAiEA/UQP+mCcNuni2FHZ1na+RWZcTHj/yNmHmiDfhMYf/t4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12347613},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"gitHead":"349f47d3a4399d5d8d943c35956e599baeb364e7","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts && npm run build:create-reftest-list && npm run build:testrunner && npm run build:minify","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","build:minify":"uglifyjs --compress --comments /^!/ -o dist/html2canvas.min.js --mangle -- dist/html2canvas.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"9.8.1","description":"HTML to PDF","directories":{},"_nodeVersion":"18.18.0","dependencies":{"jspdf":"^2.5.2","fontkit":"^2.0.4","svg2pdf.js":"^2.5.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","uglifyjs-webpack-plugin":"^2.2.0","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^13.0.0","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.0.1_1753206071140_0.21212869735428974","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"dompdf.js","version":"1.0.2","author":{"url":"https://dompdfjs.lisky.com.cn/","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.0.2","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://dompdfjs.lisky.com.cn","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"c8126671af3b50d217ae55cd6fe7385a98816280","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.0.2.tgz","fileCount":141,"integrity":"sha512-HI2o7nRhPz5BVqGBN1cCs+cc76YLvH1nn7FRnB4T37JtoSOjLgsEAYpDEp2FbSqbOZQssRW+CpmY7FjXZO0TGQ==","signatures":[{"sig":"MEUCIQCmzNR8hXWbrZk1cGC4ebms2oC2Y11jU1Fno2Bj2ZX7cAIgC2sSKKsbm0Rk4ti5v32Zk10rtPDqHaUR9qvWSV8XEt8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":12349733},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"gitHead":"349f47d3a4399d5d8d943c35956e599baeb364e7","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts && npm run build:create-reftest-list && npm run build:testrunner && npm run build:minify","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","build:minify":"uglifyjs --compress --comments /^!/ -o dist/html2canvas.min.js --mangle -- dist/html2canvas.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"9.8.1","description":"HTML to PDF","directories":{},"_nodeVersion":"18.18.0","dependencies":{"jspdf":"^2.5.2","fontkit":"^2.0.4","svg2pdf.js":"^2.5.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","uglifyjs-webpack-plugin":"^2.2.0","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^13.0.0","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.0.2_1753513800392_0.6454399868744405","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"dompdf.js","version":"1.0.3","author":{"url":"https://dompdfjs.lisky.com.cn/","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.0.3","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://dompdfjs.lisky.com.cn","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"f00f9d1dff6a9bada51e095b260200a11a4e65d6","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.0.3.tgz","fileCount":525,"integrity":"sha512-zJYgmz4vGTdzWGef/T7VIUyRq/im/c4QxhPfi07YJ/6bZGXWU77RPVKHHtVcf7MvhByI6PXGvKKMLEs5XC21Ow==","signatures":[{"sig":"MEYCIQDZwJgcmKiLBjN1PXa2klgu0svkoqOLtDOflvZIosI2qAIhAPC36ek/ty4FR5M6aGch7yoCeNUxNyGjrMB7G+8jWjuH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13325886},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"gitHead":"c42c67cb90d955e72dd97977ef5933eca1d426b4","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts && npm run build:create-reftest-list && npm run build:testrunner && npm run build:minify","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","build:minify":"uglifyjs --compress --comments /^!/ -o dist/html2canvas.min.js --mangle -- dist/html2canvas.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"10.9.2","description":"HTML to PDF","directories":{},"_nodeVersion":"22.15.0","dependencies":{"jspdf":"^2.5.2","fontkit":"^2.0.4","svg2pdf.js":"^2.5.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","uglifyjs-webpack-plugin":"^2.2.0","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^13.0.0","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.0.3_1758557661966_0.3299513192459802","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"dompdf.js","version":"1.0.4","author":{"url":"https://dompdfjs.lisky.com.cn/","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.0.4","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://dompdfjs.lisky.com.cn","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"19e928d41e73ac28325ee6bcbf8af7bf3b6b9b5c","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.0.4.tgz","fileCount":525,"integrity":"sha512-DCtbkCzQY4XSiLoKKen3wK9YuJibCn1Ms4Nmm85DlJHGlMOyHj3oLEC11QLLoPzQtyGyhBWgCjPZU3MNUifirw==","signatures":[{"sig":"MEQCIAytyWIl63irz0ZrnWHYjnw+WR8Dt6s0uBkkqJfczzriAiAgcFiCNDzitXrahmDAnaQcWTKVCiCQy4dF5tujdQOQWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13321268},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"gitHead":"197ca973c3fc3228df33d2f56aaa1c792958b9ad","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts && npm run build:create-reftest-list && npm run build:testrunner && npm run build:minify","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","build:minify":"uglifyjs --compress --comments /^!/ -o dist/html2canvas.min.js --mangle -- dist/html2canvas.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"10.9.2","description":"HTML to PDF","directories":{},"_nodeVersion":"22.15.0","dependencies":{"jspdf":"^2.5.2","fontkit":"^2.0.4","svg2pdf.js":"^2.5.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","uglifyjs-webpack-plugin":"^2.2.0","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^13.0.0","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.0.4_1759077106510_0.5830409655111626","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"dompdf.js","version":"1.1.0","author":{"url":"https://dompdfjs.lisky.com.cn/","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.1.0","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://dompdfjs.lisky.com.cn","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"f1243fcb613bdf6ca4f5f3d6586361495c047336","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.1.0.tgz","fileCount":530,"integrity":"sha512-9q6HxhtIGRYSa6+KtYHsC9N5dy1RIt8OoPKu6pfFYc8l7twP3sW3cH0u87j/a3W7TPFNYC/llbpH8TbOszEtZA==","signatures":[{"sig":"MEQCIDQf7FPrIaLncEBhPI2Hoeq16fCNDZt2TKqQXk4oDxewAiBiS70b2qMF8W2tm31yt9qgY8uVcdoaJCX/m/Gt3OuRBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":13230071},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"gitHead":"9c896503b67fa1e057da1cfcc927ed3d76edb485","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts && npm run build:create-reftest-list && npm run build:testrunner && npm run build:minify","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","build:minify":"uglifyjs --compress --comments /^!/ -o dist/html2canvas.min.js --mangle -- dist/html2canvas.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"10.9.2","description":"HTML to PDF","directories":{},"_nodeVersion":"22.15.0","dependencies":{"jspdf":"^2.5.2","fontkit":"^2.0.4","svg2pdf.js":"^2.5.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b","devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","uglifyjs-webpack-plugin":"^2.2.0","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^13.0.0","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.1.0_1765825452906_0.6292246246825335","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"dompdf.js","version":"1.1.1","author":{"url":"https://dompdfjs.lisky.com.cn/","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.1.1","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://dompdfjs.lisky.com.cn","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"e03a2afbefbea3748a5c32d970df41def3355697","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.1.1.tgz","fileCount":153,"integrity":"sha512-vRCv5CWb4VQIPwCTzR9769hFXWwBUmPh0oZigxNx/ZIma0cisXcuEBwFYpO+DFPAsjYJUAjlT50ELUP/OhBOFQ==","signatures":[{"sig":"MEUCIQCxspOGV6RBfpbxym20rDqAEOv5lcvDCU2P2+cGEyQr8gIgVX1sUNge6Pkfv00uX5oCQN+3P8chHhhpTwURST8Pn9k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":14925666},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"gitHead":"2db18ade845f0a2e844cc6234d541427a0a4313d","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts && npm run build:minify","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","build:minify":"uglifyjs --compress --comments /^!/ -o dist/dompdf.min.js --mangle -- dist/dompdf.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"10.9.2","description":"HTML to PDF","directories":{},"_nodeVersion":"22.15.0","dependencies":{"jspdf":"^4.0.0","fontkit":"^2.0.4","svg2pdf.js":"^2.5.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b","devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","uglifyjs-webpack-plugin":"^2.2.0","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^15.2.3","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.1.1_1769611533634_0.1801123690700872","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"dompdf.js","version":"1.2.0","author":{"url":"https://dompdfjs.lisky.com.cn/","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.2.0","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://dompdfjs.lisky.com.cn","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"419b97dedd6909074507a4671264a04a2314854e","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.2.0.tgz","fileCount":563,"integrity":"sha512-pGa2neAd9Pxnt3YTYg70haOeynfNokjjz198kZyvJgxSlQSh4Ng1fEAw1XaUqhm/b5mJBR6OWqhigvv8ypP4aA==","signatures":[{"sig":"MEYCIQCuscQVPGTWGCz9DbCzgj3TlH7gAfoHaoTV/qGhVOlDiwIhALiTa6ErFgtXoABH8xziDLBWeunavNO9Vl+/xr1UMeuA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16829463},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"gitHead":"5d2780bbe25b9913b767ab9356e013528763e9f3","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts && npm run build:minify","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","build:minify":"uglifyjs --compress --comments /^!/ -o dist/dompdf.min.js --mangle -- dist/dompdf.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"10.9.2","description":"HTML to PDF","directories":{},"_nodeVersion":"22.15.0","dependencies":{"jspdf":"^4.0.0","fontkit":"^2.0.4","svg2pdf.js":"^2.5.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b","devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","uglifyjs-webpack-plugin":"^2.2.0","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^15.2.3","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.2.0_1775406989949_0.8918536988052872","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"dompdf.js","version":"1.3.0","author":{"url":"https://dompdfjs.lisky.com.cn/","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.3.0","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://dompdfjs.lisky.com.cn","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"1841d4e1e88bedd3a17cdcb3a7c379ef17e5013e","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.3.0.tgz","fileCount":428,"integrity":"sha512-k1xCJ1ttbrxWYI6xO6wfFA9wgdrJa3EcCobLyQlLo5RhW4tyZsdiR4NreY++RzuOBWZKnLnxYQx+drfiqKin2A==","signatures":[{"sig":"MEUCIQC8M3pDrrro+yz8V6rdomz7Kq00fzFG29pMrEbZDF2NfwIgWG7O5goje/16jsgLbTPw38uM3Z99QTZT3noT8eS+Dxo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17510511},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"gitHead":"78b473d37e93a08e86fd92d45e5fa73234e13917","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts && npm run build:minify","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","release:as":"standard-version --release-as","build:minify":"uglifyjs --compress --comments /^!/ -o dist/dompdf.min.js --mangle -- dist/dompdf.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"11.11.0","description":"HTML to PDF","directories":{},"_nodeVersion":"24.14.1","dependencies":{"jspdf":"^4.0.0","fontkit":"^2.0.4","svg2pdf.js":"^2.5.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b","devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","uglifyjs-webpack-plugin":"^2.2.0","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^15.2.3","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.3.0_1777430238202_0.9100049246517337","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"dompdf.js","version":"1.3.1","author":{"url":"https://dompdfjs.lisky.com.cn/","name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@1.3.1","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://dompdfjs.lisky.com.cn","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"7864488cc3188d2a8e5a6c91e61a24a3ba6ac340","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-1.3.1.tgz","fileCount":434,"integrity":"sha512-ApR8W1/2lgNq/WXnGr1OHYh7Ye+Es1Avc1HRNS74TjxtObw1Ch4ZhxJGjpWfWz9F0QEJ0gkifp5PlqQy7qYa4w==","signatures":[{"sig":"MEUCIB940BSwRN+QLtooKFNNrjN98AgfrHgZwuBini5Qq5N4AiEA4FMxgujsjmV6X4Khm3M6WK1ABgL/Cl7KMSNps0H3wrc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":18340715},"main":"dist/dompdf.js","title":"dompdf.js","module":"dist/esm/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=8.0.0"},"exports":{".":{"import":"./dist/esm/dompdf.esm.js","browser":"./dist/dompdf.js","require":"./dist/dompdf.js"}},"gitHead":"327b1b95a3a2fd0255990b22aac5f219ef73057a","scripts":{"dev":"webpack serve --config webpack.dev.js --open","lint":"eslint src/**/*.ts --max-warnings 0","test":"npm run lint && npm run unittest && npm run karma","build":"tsc --module commonjs && rollup -c rollup.config.ts","karma":"ts-node tests/karma","start":"ts-node tests/server --port=8080 --cors=8081","watch":"npx rollup -c rollup.config.ts -w","format":"prettier --write \"{src,www/src,tests,scripts}/**/*.ts\"","release":"standard-version","prebuild":"rimraf dist/ && rimraf build/ && mkdirp dist && mkdirp build","unittest":"jest","release:as":"standard-version --release-as","build:minify":"uglifyjs --compress --comments /^!/ -o dist/dompdf.min.js --mangle -- dist/dompdf.js","reftests-diff":"mkdirp tmp/snapshots && jest --roots=tests --testMatch=**/reftest-diff.ts","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","watch:unittest":"mocha --require ts-node/register --watch-extensions ts -w src/**/__tests__/*.ts","build:testrunner":"rollup -c tests/rollup.config.ts","build:reftest-preview":"webpack --config www/webpack.config.js","build:create-reftest-list":"ts-node scripts/create-reftest-list.ts tests/reftests/ignore.txt build/reftests.ts","build:reftest-result-list":"ts-node scripts/create-reftest-result-list.ts"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+ssh://git@github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"11.11.0","description":"HTML to PDF","directories":{},"_nodeVersion":"24.14.1","dependencies":{"jspdf":"^4.0.0","@zumer/snapdom":"^1.8.0","css-line-break":"^2.1.0","text-segmentation":"^1.0.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.15.0+sha512.486ebc259d3e999a4e8691ce03b5cac4a71cbeca39372a9b762cb500cfdf0873e2cb16abe3d951b1ee2cf012503f027b98b6584e4df22524e0c7450d9ec7aa7b","devDependencies":{"chai":"4.1.1","cors":"^2.8.5","glob":"7.1.3","jest":"^27.0.6","karma":"^6.3.2","mocha":"^9.0.2","slash":"1.0.0","tslib":"^2.3.0","yargs":"^17.0.1","eslint":"^7.30.0","jquery":"^3.5.1","mkdirp":"^3.0.1","rimraf":"^3.0.2","rollup":"^2.53.1","express":"^4.17.1","ts-jest":"^27.0.3","ts-node":"^10.1.0","webpack":"^5.75.0","platform":"^1.3.6","prettier":"^2.3.2","ts-loader":"^8.3.0","uglify-js":"^3.13.10","@babel/cli":"^7.4.3","chromeless":"^1.5.2","typescript":"^4.3.5","@babel/core":"^7.4.3","@types/chai":"^4.1.7","@types/glob":"^7.1.1","@types/jest":"^26.0.24","@types/node":"^16.3.1","body-parser":"^1.19.0","es6-promise":"^4.2.8","karma-mocha":"^2.0.1","node-simctl":"^5.3.0","serve-index":"^1.9.1","webpack-cli":"^5.0.1","@types/karma":"^6.3.0","@types/mocha":"^8.2.3","babel-eslint":"^10.0.1","babel-loader":"^8.0.5","js-polyfills":"^0.1.42","@types/express":"^4.17.13","filenamify-url":"1.0.0","@types/platform":"^1.3.4","replace-in-file":"^3.0.0","standard-version":"^8.0.2","@babel/preset-env":"^7.4.3","html2canvas-proxy":"1.0.1","karma-ie-launcher":"^1.0.0","@babel/preset-flow":"^7.0.0","@webpack-cli/serve":"^2.0.1","base64-arraybuffer":"1.0.1","webpack-dev-server":"^4.11.1","@rollup/plugin-json":"^4.1.0","jest-image-snapshot":"^4.5.1","karma-edge-launcher":"^0.4.2","rollup-plugin-serve":"^2.0.2","appium-ios-simulator":"^3.10.0","karma-junit-reporter":"^2.0.1","karma-sauce-launcher":"^2.0.2","rollup-plugin-terser":"^7.0.2","karma-chrome-launcher":"^3.1.0","eslint-config-prettier":"^8.3.0","eslint-plugin-prettier":"3.4.0","karma-firefox-launcher":"^2.1.0","@rollup/plugin-commonjs":"^19.0.0","@types/promise-polyfill":"^6.0.3","rollup-plugin-livereload":"^2.0.5","rollup-plugin-sourcemaps":"^0.6.3","@rollup/plugin-typescript":"^8.2.1","@typescript-eslint/parser":"^4.28.2","@types/jest-image-snapshot":"^4.3.1","@rollup/plugin-node-resolve":"^15.2.3","babel-plugin-dev-expression":"^0.2.1","karma-safarinative-launcher":"^1.1.0","babel-plugin-add-module-exports":"^1.0.2","@typescript-eslint/eslint-plugin":"^4.28.2"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_1.3.1_1778289380344_0.3737151100833558","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"dompdf.js","version":"2.0.0","keywords":["pdf","dom-to-pdf","wasm","webassembly","typescript","browser","frontend","rendering"],"author":{"name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@2.0.0","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://github.com/lmn1919/dompdf.js","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"c7cd71d13d0fcaa8133598b880925322d115ce8e","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-2.0.0.tgz","fileCount":18,"integrity":"sha512-Gqr1hD0LIyHo2PQOaOqz8zX4zsSdyQThqI2DAm7KekNKP3Wk1NZTj/iQuhro6/8uyCGi81K1qR9CQh8oNwSs9Q==","signatures":[{"sig":"MEUCIGdMkqx0wreW+JRHZ+JGijkBSlnUfpVbTMjXriqfziuvAiEAg6mnwgyGKUTyiYWrQv4h+fXYUuRJgQY8XPP5Q8KQvzA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4163269},"main":"dist/dompdf.js","title":"dompdf.js","types":"dist/types/index.d.ts","module":"dist/esm/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/dompdf.esm.js","browser":"./dist/dompdf.js","require":"./dist/dompdf.js"}},"gitHead":"9bbccb88e68287bba0bb53933a791763bdc2e2e3","scripts":{"dev":"rollup -c rollup.config.mjs -w","test":"npm run verify","build":"rollup -c rollup.config.mjs && npm run build:types","serve":"npx --yes serve . -l 8080","verify":"npm run build:wasm && node scripts/verify.mjs","release":"standard-version","prebuild":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:wasm && npm run inline:wasm","build:wasm":"node scripts/build-wasm.mjs","release:as":"standard-version --release-as","build:types":"tsc --emitDeclarationOnly --declaration --declarationDir dist/types","inline:wasm":"node scripts/inline-wasm.mjs","build:minify":"npm run build","pdf-diff:all":"npm run build && node scripts/pdf-diff/run-all.mjs","pdf-diff:fix":"node scripts/pdf-diff/fix-loop.mjs","pdf-diff:mcp":"node scripts/pdf-diff/mcp-server.mjs","pdf-diff:mvp":"npm run build && node scripts/pdf-diff-mvp.mjs","pdf-diff:run":"npm run build && node scripts/pdf-diff/run.mjs","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","pdf-diff:agent":"node scripts/pdf-diff/agent.mjs","playwright:install":"playwright install chromium"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+https://github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"11.11.0","description":"Pure-frontend DOM-to-PDF engine (WASM-backed, no jsPDF).","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"pngjs":"^7.0.0","tslib":"^2.8.1","rimraf":"^5.0.5","rollup":"^4.0.0","pdfjs-dist":"^6.0.227","pixelmatch":"^7.2.0","playwright":"^1.61.1","typescript":"^5.3.0","@napi-rs/canvas":"^1.0.0","standard-version":"^8.0.2","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_2.0.0_1784031528624_0.40761310841655507","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"dompdf.js","version":"2.0.1","keywords":["pdf","dom-to-pdf","wasm","webassembly","typescript","browser","frontend","rendering"],"author":{"name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@2.0.1","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://github.com/lmn1919/dompdf.js","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"6e70f388a284bc7d1ddd59925edcf72794d34310","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-2.0.1.tgz","fileCount":20,"integrity":"sha512-RaQyKuLPTOlrIZgpimX6WjHDxiuZ0ins67R7QawDTPI4wUBH+ODIs+ugAQmo6KOhHguZ64BIGTvfqgx6PQQTTA==","signatures":[{"sig":"MEUCID3CToDB71UKKIjY/6TLlYgaBY8cnWxiyMtpm5OivuO5AiEAvV8cZz53LyE3PqCrwgOAvpHvEbOuS4IsRNII1sTvUKw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4943502},"main":"dist/dompdf.js","title":"dompdf.js","types":"dist/types/index.d.ts","module":"dist/esm/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/dompdf.esm.js","browser":"./dist/dompdf.js","require":"./dist/dompdf.js"}},"gitHead":"31e518f09b0d2ebf71587931708dfd239486542b","scripts":{"dev":"rollup -c rollup.config.mjs -w","test":"npm run verify","build":"rollup -c rollup.config.mjs && npm run build:types","serve":"npx --yes serve . -l 8080","verify":"npm run build:wasm && node scripts/verify.mjs","release":"standard-version","prebuild":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:wasm && npm run inline:wasm","build:wasm":"node scripts/build-wasm.mjs","release:as":"standard-version --release-as","build:types":"tsc --emitDeclarationOnly --declaration --declarationDir dist/types","inline:wasm":"node scripts/inline-wasm.mjs","pdf-diff:all":"npm run build && node scripts/pdf-diff/run-all.mjs","pdf-diff:fix":"node scripts/pdf-diff/fix-loop.mjs","pdf-diff:mcp":"node scripts/pdf-diff/mcp-server.mjs","pdf-diff:mvp":"npm run build && node scripts/pdf-diff-mvp.mjs","pdf-diff:run":"npm run build && node scripts/pdf-diff/run.mjs","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","pdf-diff:agent":"node scripts/pdf-diff/agent.mjs","playwright:install":"playwright install chromium"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+https://github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"11.11.0","description":"Pure-frontend DOM-to-PDF engine (WASM-backed, no jsPDF).","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"pngjs":"^7.0.0","tslib":"^2.8.1","rollup":"^4.0.0","pdfjs-dist":"^6.0.227","pixelmatch":"^7.2.0","playwright":"^1.61.1","typescript":"^5.3.0","@napi-rs/canvas":"^1.0.0","standard-version":"^8.0.2","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_2.0.1_1787828449188_0.41661687316581864","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"dompdf.js","version":"2.0.3","keywords":["pdf","dom-to-pdf","wasm","webassembly","typescript","browser","frontend","rendering"],"author":{"name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","_id":"dompdf.js@2.0.3","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"homepage":"https://github.com/lmn1919/dompdf.js","bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"dist":{"shasum":"6657203057686298bd2a09313831f92bd97a9d99","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-2.0.3.tgz","fileCount":20,"integrity":"sha512-RPkJqhug+dHGBiSCd0PRq8Nw9fViX1wPps4s6gc4JufglUEPskO+5kYKs6PQEUPmcd4i1aD0O3Xi0wLUZZKiNw==","signatures":[{"sig":"MEQCIEg3/ICpRon6Klr0HneWZz01NJ95AdKkayWURptJ1pixAiBOcsm/gpG/SCXdQLvopN2Eeuv1VtwFZ1jLJvPc1eptKA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4928219},"main":"dist/dompdf.js","title":"dompdf.js","types":"dist/types/index.d.ts","module":"dist/esm/dompdf.esm.js","browser":"dist/dompdf.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/dompdf.esm.js","browser":"./dist/dompdf.js","require":"./dist/dompdf.js"}},"gitHead":"399acc4eba2635deb6c5dfa9ce702d9736cda49f","scripts":{"dev":"rollup -c rollup.config.mjs -w","test":"npm run verify","build":"rollup -c rollup.config.mjs && npm run build:types","serve":"npx --yes serve . -l 8080","verify":"npm run build:wasm && node scripts/verify.mjs","release":"standard-version","prebuild":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:wasm && npm run inline:wasm","build:wasm":"node scripts/build-wasm.mjs","release:as":"standard-version --release-as","build:types":"tsc --emitDeclarationOnly --declaration --declarationDir dist/types","inline:wasm":"node scripts/inline-wasm.mjs","pdf-diff:all":"npm run build && node scripts/pdf-diff/run-all.mjs","pdf-diff:fix":"node scripts/pdf-diff/fix-loop.mjs","pdf-diff:mcp":"node scripts/pdf-diff/mcp-server.mjs","pdf-diff:mvp":"npm run build && node scripts/pdf-diff-mvp.mjs","pdf-diff:run":"npm run build && node scripts/pdf-diff/run.mjs","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","pdf-diff:agent":"node scripts/pdf-diff/agent.mjs","playwright:install":"playwright install chromium"},"typings":"dist/types/index.d.ts","_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"repository":{"url":"git+https://github.com/lmn1919/dompdf.js.git","type":"git"},"_npmVersion":"11.11.0","description":"Pure-frontend DOM-to-PDF engine (WASM-backed, no jsPDF).","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"pngjs":"^7.0.0","tslib":"^2.8.1","rollup":"^4.0.0","pdfjs-dist":"^6.0.227","pixelmatch":"^7.2.0","playwright":"^1.61.1","typescript":"^5.3.0","@napi-rs/canvas":"^1.0.0","standard-version":"^8.0.2","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.6","@rollup/plugin-node-resolve":"^15.2.3"},"_npmOperationalInternal":{"tmp":"tmp/dompdf.js_2.0.3_1788512242083_0.38754732275557857","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"title":"dompdf.js","name":"dompdf.js","version":"2.0.4","description":"Pure-frontend DOM-to-PDF engine (WASM-backed, no jsPDF).","main":"dist/dompdf.js","module":"dist/esm/dompdf.esm.js","types":"dist/types/index.d.ts","typings":"dist/types/index.d.ts","browser":"dist/dompdf.js","keywords":["pdf","dom-to-pdf","wasm","webassembly","typescript","browser","frontend","rendering"],"engines":{"node":">=18"},"bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"exports":{".":{"types":"./dist/types/index.d.ts","import":"./dist/esm/dompdf.esm.js","require":"./dist/dompdf.js","browser":"./dist/dompdf.js"}},"scripts":{"build:wasm":"node scripts/build-wasm.mjs","inline:wasm":"node scripts/inline-wasm.mjs","build:types":"tsc --emitDeclarationOnly --declaration --declarationDir dist/types","prebuild":"node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && npm run build:wasm && npm run inline:wasm","build":"rollup -c rollup.config.mjs && npm run build:types","dev":"rollup -c rollup.config.mjs -w","serve":"npx --yes serve . -l 8080","verify":"npm run build:wasm && node scripts/verify.mjs","test":"npm run verify","pdf-diff:mvp":"npm run build && node scripts/pdf-diff-mvp.mjs","pdf-diff:run":"npm run build && node scripts/pdf-diff/run.mjs","pdf-diff:all":"npm run build && node scripts/pdf-diff/run-all.mjs","pdf-diff:fix":"node scripts/pdf-diff/fix-loop.mjs","pdf-diff:agent":"node scripts/pdf-diff/agent.mjs","pdf-diff:mcp":"node scripts/pdf-diff/mcp-server.mjs","playwright:install":"playwright install chromium","release":"standard-version","release:major":"standard-version --release-as major","release:minor":"standard-version --release-as minor","release:patch":"standard-version --release-as patch","release:as":"standard-version --release-as"},"author":{"name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","homepage":"https://github.com/lmn1919/dompdf.js","repository":{"type":"git","url":"git+https://github.com/lmn1919/dompdf.js.git"},"devDependencies":{"@napi-rs/canvas":"^1.0.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-terser":"^0.4.4","@rollup/plugin-typescript":"^11.1.6","pdfjs-dist":"^6.0.227","pixelmatch":"^7.2.0","playwright":"^1.61.1","pngjs":"^7.0.0","rollup":"^4.0.0","standard-version":"^8.0.2","tslib":"^2.8.1","typescript":"^5.3.0"},"gitHead":"399acc4eba2635deb6c5dfa9ce702d9736cda49f","_id":"dompdf.js@2.0.4","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-sAH68CA9BFJ0xaXIQQ5T0UixHTK5l4xuJ/KhoeVw/y7LXDpEwlCbuLxoeU6AUtu77I3YCTMGd1A3ohpJ19gbGg==","shasum":"143beaafa12599cbe571a017e1ee178a8ab63da4","tarball":"https://registry.npmjs.org/dompdf.js/-/dompdf.js-2.0.4.tgz","fileCount":20,"unpackedSize":4928219,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDmmF3SiE9QEKnm/NB/JOPrIczc2trQgm8vfukmFR6IgwIhAMhGUFvK+Ww9wIn9W7271KpNBZWdRVJXN0hotxLP3LUM"}]},"_npmUser":{"name":"dompdfjs","email":"lfc191910@gmail.com"},"directories":{},"maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dompdf.js_2.0.4_1788512719650_0.3063362706720092"},"_hasShrinkwrap":false}},"time":{"created":"2025-07-07T16:08:13.521Z","modified":"2026-09-04T09:05:20.027Z","1.0.0":"2025-07-07T16:08:13.829Z","1.0.1":"2025-07-22T17:41:11.418Z","1.0.2":"2025-07-26T07:10:00.648Z","1.0.3":"2025-09-22T16:14:22.261Z","1.0.4":"2025-09-28T16:31:46.797Z","1.1.0":"2025-12-15T19:04:13.259Z","1.1.1":"2026-01-28T14:45:33.969Z","1.2.0":"2026-04-05T16:36:30.221Z","1.3.0":"2026-04-29T02:37:18.568Z","1.3.1":"2026-05-09T01:16:20.698Z","2.0.0":"2026-07-14T12:18:48.831Z","2.0.1":"2026-08-27T11:00:49.353Z","2.0.3":"2026-09-04T08:57:22.238Z","2.0.4":"2026-09-04T09:05:19.880Z"},"bugs":{"url":"https://github.com/lmn1919/dompdf.js/issues"},"author":{"name":"lfc","email":"lfc191910@gmail.com"},"license":"MIT","homepage":"https://github.com/lmn1919/dompdf.js","keywords":["pdf","dom-to-pdf","wasm","webassembly","typescript","browser","frontend","rendering"],"repository":{"type":"git","url":"git+https://github.com/lmn1919/dompdf.js.git"},"description":"Pure-frontend DOM-to-PDF engine (WASM-backed, no jsPDF).","maintainers":[{"name":"dompdfjs","email":"lfc191910@gmail.com"}],"readme":"# dompdf.js\r\n\r\n[English](./README.md) | [中文](./README_CN.md)\r\n\r\n`dompdf.js` is a pure-frontend DOM-to-PDF engine powered by TypeScript, Web Workers, Rust, and WebAssembly. It reads the layout already computed by the browser and generates primarily vector-based PDFs directly in the browser, without a server, jsPDF, or a screenshot-based PDF pipeline.\r\n\r\nIt is designed for browser-side exports that need selectable text, long-document pagination, Chinese and custom fonts, headers and footers, watermarks, forms, compression, or encryption.\r\n\r\nIn representative long-document benchmarks, `dompdf.js` can generate a 500-page PDF in about two seconds. With suitable document structure and sufficient device resources, a single export can scale to tens of thousands of pages. Actual rendering time and page limits depend on DOM complexity, image count, font size, compression settings, browser, and device performance.\r\n\r\n**Live demo:** [dompdfjs.lisky.com.cn](https://dompdfjs.lisky.com.cn)  \r\n**Migration notes:** [docs/migration-compat.md](./docs/migration-compat.md)\r\n\r\n## Table of Contents\r\n\r\n- [Features](#features)\r\n- [Installation](#installation)\r\n- [Quick Start](#quick-start)\r\n- [API](#api)\r\n- [Export Options](#export-options)\r\n- [Pagination and Page Sizes](#pagination-and-page-sizes)\r\n- [Headers and Footers](#headers-and-footers)\r\n- [Watermarks](#watermarks)\r\n- [Fonts and Multilingual Text](#fonts-and-multilingual-text)\r\n- [Form Export](#form-export)\r\n- [PDF Encryption](#pdf-encryption)\r\n- [Images and Cross-Origin Resources](#images-and-cross-origin-resources)\r\n- [Progress Reporting](#progress-reporting)\r\n- [Compatibility and Limitations](#compatibility-and-limitations)\r\n- [Local Development](#local-development)\r\n\r\n## Features\r\n\r\n- Runs entirely in the browser without uploading the document being exported\r\n- Produces searchable, selectable vector text instead of full-page screenshots\r\n- Uses Web Workers and WASM for PDF rendering to reduce main-thread blocking\r\n- Optimized for large documents: about two seconds for 500 pages in representative benchmarks, with extreme workloads reaching tens of thousands of pages\r\n- Supports both continuous single-page output and standard paginated documents\r\n- Supports A/B/C series, Letter, Legal, Tabloid, and custom page sizes\r\n- Supports headers, footers, page-number placeholders, and per-page configuration\r\n- Supports text and image watermarks, under/over layering, and per-page control\r\n- Supports Unicode, TTF fonts, font subsetting, bold, italic, icon fonts, and language-based font fallback\r\n- Supports images, SVG, Canvas, backgrounds, borders, rounded corners, shadows, opacity, gradients, and other common visual effects\r\n- Preserves hyperlinks as PDF link annotations\r\n- Supports static form appearance and interactive PDF AcroForm fields\r\n- Supports DEFLATE compression, user and owner passwords, and PDF permission flags\r\n- Provides `Blob`, `Uint8Array`, direct-download, and low-level snapshot APIs\r\n- Includes TypeScript declarations\r\n\r\n> `dompdf.js` reconstructs the page from geometry already computed by the browser, so CSS layout remains the browser's responsibility. The PDF renderer preserves common visual effects where possible, but it is not a complete browser rendering engine. Complex filters, animations, video, and some advanced CSS may be rasterized or degraded.\r\n\r\n## Installation\r\n\r\n### npm\r\n\r\n```bash\r\nnpm install dompdf.js\r\n```\r\n\r\nThe runtime requires a modern browser with Web Workers, WebAssembly, `Blob`, and related Web APIs. The package requires Node.js 18+ for installation, builds, and development, but its export APIs depend on the DOM and cannot be called directly in a plain Node.js environment.\r\n\r\n### CDN\r\n\r\n```html\r\n<script src=\"https://cdn.jsdelivr.net/npm/dompdf.js@latest/dist/dompdf.min.js\"></script>\r\n```\r\n\r\nWhen loaded through a `<script>` tag, the API is exposed globally as `dompdf`.\r\n\r\n## Quick Start\r\n\r\n### Get a PDF Blob\r\n\r\nThe default export returns a `Promise<Blob>`:\r\n\r\n```ts\r\nimport dompdf from 'dompdf.js';\r\n\r\nconst element = document.querySelector<HTMLElement>('#capture');\r\nif (!element) throw new Error('Could not find #capture');\r\n\r\nconst blob = await dompdf(element, {\r\n  format: 'a4',\r\n  pagination: true,\r\n  backgroundColor: '#ffffff',\r\n});\r\n\r\nconst url = URL.createObjectURL(blob);\r\nwindow.open(url, '_blank');\r\n\r\n// Revoke the URL after the preview has had time to load.\r\nsetTimeout(() => URL.revokeObjectURL(url), 30_000);\r\n```\r\n\r\n### Download Directly\r\n\r\n```ts\r\nimport { downloadPDF } from 'dompdf.js';\r\n\r\nconst element = document.querySelector<HTMLElement>('#capture');\r\nif (element) {\r\n  await downloadPDF(element, {\r\n    format: 'a4',\r\n    pagination: true,\r\n    compress: true,\r\n  }, 'report.pdf');\r\n}\r\n```\r\n\r\n### CDN Usage\r\n\r\n```html\r\n<button id=\"export\">Export PDF</button>\r\n<section id=\"capture\">Content to export</section>\r\n\r\n<script src=\"https://cdn.jsdelivr.net/npm/dompdf.js@latest/dist/dompdf.min.js\"></script>\r\n<script>\r\n  document.querySelector('#export').addEventListener('click', async () => {\r\n    await dompdf.downloadPDF(\r\n      document.querySelector('#capture'),\r\n      { format: 'a4', pagination: true },\r\n      'example.pdf',\r\n    );\r\n  });\r\n</script>\r\n```\r\n\r\n## API\r\n\r\n### `dompdf(root, options?)`\r\n\r\nThe default export and simplest entry point. It behaves the same as `exportPDF`.\r\n\r\n```ts\r\nfunction dompdf(\r\n  root: HTMLElement,\r\n  options?: ExportOptions,\r\n): Promise<Blob>;\r\n```\r\n\r\n### `exportPDF(root, options?)`\r\n\r\nCollects the DOM, generates the PDF, and returns a `Blob` with the MIME type `application/pdf`. Use it for previews, uploads, or a custom download flow.\r\n\r\n```ts\r\nimport { exportPDF } from 'dompdf.js';\r\n\r\nconst blob = await exportPDF(element, options);\r\n```\r\n\r\n### `renderToBytes(root, options?)`\r\n\r\nReturns the raw PDF bytes. Use it with the File System API, an upload endpoint, or another binary-processing pipeline.\r\n\r\n```ts\r\nimport { renderToBytes } from 'dompdf.js';\r\n\r\nconst bytes: Uint8Array = await renderToBytes(element, options);\r\n```\r\n\r\n### `downloadPDF(root, options?, filename?)`\r\n\r\nGenerates the PDF and triggers a browser download. The default filename is `export.pdf`.\r\n\r\n```ts\r\nimport { downloadPDF } from 'dompdf.js';\r\n\r\nawait downloadPDF(element, options, 'invoice.pdf');\r\n```\r\n\r\n### `inspect(root, options?)`\r\n\r\nReturns a WASM-side snapshot summary containing node, image, font, and page counts. It is intended for diagnostics and does not create a downloadable PDF.\r\n\r\n```ts\r\nimport { inspect } from 'dompdf.js';\r\n\r\nconsole.log(await inspect(element, { pagination: true }));\r\n```\r\n\r\n### Advanced Snapshot APIs\r\n\r\nThe package also exports these lower-level functions:\r\n\r\n- `collectSnapshot(root, options?) -> Promise<Uint8Array>`: collect and encode a DOM snapshot\r\n- `collectSnapshotData(root, options?)`: return the intermediate data before encoding\r\n- `encodeSnapshot(data, perPageHF, perPageWatermark?) -> Uint8Array`: encode intermediate data\r\n- `computePageBreaks(root, options?) -> number[]`: calculate page-break Y coordinates relative to the root element\r\n- `pageConfigNeedsPerPageResolution` and `watermarkNeedsPerPageResolution`: determine whether a configuration needs per-page resolution\r\n- `resolvePerPageHF` and `resolveStaticPageConfigHF`: resolve per-page headers and footers\r\n- `resolvePerPageWatermark` and `resolveStaticWatermarkPages`: resolve per-page watermarks\r\n\r\nThese APIs are intended for diagnostics, pagination overlays, and custom pipelines. The snapshot binary format is an internal protocol; normal application code should prefer `dompdf`, `exportPDF`, `renderToBytes`, or `downloadPDF`.\r\n\r\nCommon methods are also attached to the default export, so these forms are equivalent:\r\n\r\n```ts\r\nimport dompdf, { renderToBytes } from 'dompdf.js';\r\n\r\nconst bytesA = await dompdf.renderToBytes(element);\r\nconst bytesB = await renderToBytes(element);\r\n```\r\n\r\n## Export Options\r\n\r\nThe following options have implemented behavior:\r\n\r\n| Option | Type | Default | Description |\r\n| --- | --- | --- | --- |\r\n| `format` | `string \\| [number, number]` | `'a4'` | Page-size name or `[width, height]` in pt |\r\n| `pageWidthPt` | `number` | From `format` | Override page width directly |\r\n| `pageHeightPt` | `number` | From `format` | Override page height directly |\r\n| `marginPt` | `number \\| [top, right, bottom, left]` | `0` | PDF margins in pt |\r\n| `pagination` | `boolean` | `false` | Paginate using the configured page height |\r\n| `backgroundColor` | `string \\| null` | `null` | Page background; `null` means transparent |\r\n| `precision` | `number` | `2` | Decimal places retained for PDF coordinates |\r\n| `compress` | `boolean` | `false` | Compress PDF streams with DEFLATE |\r\n| `jpegQuality` | `number` | `0.85` | JPEG quality used when converting images |\r\n| `useCORS` | `boolean` | `false` | Load cross-origin images with anonymous CORS |\r\n| `ignoreElements` | `(element) => boolean` | None | Skip an element and its content when it returns `true` |\r\n| `fontConfig` | `FontConfig \\| FontConfig[]` | None | Register custom fonts |\r\n| `langFontConfig` | `FontConfig[]` | None | Configure Unicode-range font fallback |\r\n| `pageConfig` | Object or per-page function | See below | Header and footer configuration |\r\n| `watermark` | Object or per-page function | None | Text or image watermark |\r\n| `form` | `boolean \\| FormOptions` | Static mode | Form-control export behavior |\r\n| `encryption` | `PdfEncryptionOptions` | None | PDF passwords and permissions |\r\n| `onProgress` | `(progress) => void` | None | Export progress callback |\r\n\r\nSee [`src/snapshot.ts`](./src/snapshot.ts) and the published package's `dist/types` directory for the complete TypeScript definitions.\r\n\r\n## Pagination and Page Sizes\r\n\r\n### Continuous and Paginated Modes\r\n\r\n- `pagination: false`: create one content-driven continuous page, useful for receipts, screenshot replacement, and continuous documents\r\n- `pagination: true`: create a multi-page PDF using the available area left by the page size, margins, header, and footer\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  format: 'a4',\r\n  pagination: true,\r\n  marginPt: [36, 36, 36, 36],\r\n});\r\n```\r\n\r\nFor stable pagination, keep the export container's CSS width close to the target page's content width. A4 is approximately `794px x 1123px` at 96 DPI; configured margins must be subtracted from that width.\r\n\r\nSee [page_sizes.md](./page_sizes.md) for common dimensions. Supported names include:\r\n\r\n- `a0` through `a10`\r\n- `b0` through `b10`\r\n- `c0` through `c10`\r\n- `letter` and `government-letter`\r\n- `legal`, `junior-legal`, and `government-legal`\r\n- `tabloid` and `ledger`\r\n\r\nFor landscape A4, swap the dimensions explicitly:\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  format: [842.25, 595.5],\r\n  pagination: true,\r\n});\r\n```\r\n\r\nYou can also override `format` with `pageWidthPt` and `pageHeightPt`. The `orientation` option is currently retained only for legacy compatibility and does not swap the page dimensions automatically.\r\n\r\n### Forced Breaks and Avoiding Splits\r\n\r\nAdd a `pageBreak` attribute to request a page break before an element:\r\n\r\n```html\r\n<section>First-page content</section>\r\n<section pageBreak>Start on a new page</section>\r\n```\r\n\r\nAdd a `divisionDisable` attribute to keep an element on one page where possible:\r\n\r\n```html\r\n<article divisionDisable>\r\n  This block will be kept together when possible.\r\n</article>\r\n```\r\n\r\nAn element taller than the entire available page area may still be split so that the content remains placeable.\r\n\r\n## Headers and Footers\r\n\r\n### Static Configuration\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  pagination: true,\r\n  pageConfig: {\r\n    excludePages: [1],\r\n    header: {\r\n      content: 'Quarterly Operations Report',\r\n      height: 48,\r\n      contentColor: '#334155',\r\n      contentFontSize: 11,\r\n      contentPosition: 'centerLeft',\r\n      padding: [0, 24, 0, 24],\r\n    },\r\n    footer: {\r\n      content: 'Page ${currentPage} / ${totalPages}',\r\n      height: 48,\r\n      contentColor: '#64748b',\r\n      contentFontSize: 10,\r\n      contentPosition: 'center',\r\n      padding: [0, 24, 0, 24],\r\n    },\r\n  },\r\n});\r\n```\r\n\r\n`content` supports these placeholders:\r\n\r\n- `${currentPage}`: current page number, starting at 1\r\n- `${totalPages}`: total number of pages\r\n\r\n`contentPosition` supports:\r\n\r\n- `center`, `centerLeft`, and `centerRight`\r\n- `centerTop` and `centerBottom`\r\n- `leftTop` and `leftBottom`\r\n- `rightTop` and `rightBottom`\r\n- `[x, y]` for custom coordinates\r\n\r\n`padding` uses the order `[top, right, bottom, left]`. `excludePage` accepts one page number or an array, while `excludePages` accepts an array of page numbers.\r\n\r\nWhen pagination is enabled without an explicit `pageConfig`, the current version reserves an empty `50px` header band and renders `${currentPage}/${totalPages}` in a `50px` footer. Pass `pageConfig` explicitly when you need full control.\r\n\r\n### Per-Page Configuration\r\n\r\nThe function form is called for every page after the total page count is known. Return `null` to disable the header and footer for a page:\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  pagination: true,\r\n  pageConfig(pageNum, totalPages) {\r\n    if (pageNum === 1) return null;\r\n\r\n    return {\r\n      header: {\r\n        content: 'Internal Use Only',\r\n        height: 40,\r\n        contentPosition: 'rightTop',\r\n      },\r\n      footer: {\r\n        content: `${pageNum} / ${totalPages}`,\r\n        height: 40,\r\n        contentPosition: 'center',\r\n      },\r\n    };\r\n  },\r\n});\r\n```\r\n\r\nThe function signature accepted by `PageRegionConfig.content` is a legacy compatibility entry point and does not receive an operable PDF renderer. For dynamic content, use `pageConfig(pageNum, totalPages)` and return string content.\r\n\r\n## Watermarks\r\n\r\n### Text Watermarks\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  pagination: true,\r\n  watermark: {\r\n    text: 'INTERNAL ${currentPage}/${totalPages}',\r\n    color: 'rgba(185, 28, 28, 0.14)',\r\n    fontFamily: 'Helvetica',\r\n    fontSize: 28,\r\n    fontWeight: 700,\r\n    angle: -35,\r\n    spacing: [180, 130],\r\n    offset: [40, 40],\r\n    layer: 'under',\r\n    excludePages: [1],\r\n  },\r\n});\r\n```\r\n\r\nText-watermark defaults include angle `35`, font size `28px`, color `rgba(0, 0, 0, 0.12)`, spacing `[160, 120]`, offset `[36, 36]`, and layer `under`.\r\n\r\n### Image Watermarks\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  pagination: true,\r\n  useCORS: true,\r\n  watermark: {\r\n    imageUrl: '/assets/company-mark.png',\r\n    imageWidth: 120,\r\n    opacity: 0.1,\r\n    angle: -30,\r\n    spacing: [220, 160],\r\n    layer: 'over',\r\n  },\r\n});\r\n```\r\n\r\nImage watermarks support `imageWidth`, `imageHeight`, and `opacity`. If only width or height is supplied, the other dimension is calculated from the source aspect ratio.\r\n\r\n### Per-Page Watermarks\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  pagination: true,\r\n  watermark(pageNum) {\r\n    if (pageNum === 1) return null;\r\n    return {\r\n      text: pageNum % 2 === 0 ? 'EVEN PAGE' : 'ODD PAGE',\r\n      color: 'rgba(30, 64, 175, 0.12)',\r\n      layer: 'under',\r\n    };\r\n  },\r\n});\r\n```\r\n\r\n## Fonts and Multilingual Text\r\n\r\nFor non-Latin text, explicitly embed a TTF font. The most reliable approach is to load the font first and pass it through `fontBytes`:\r\n\r\n```ts\r\nimport dompdf from 'dompdf.js';\r\n\r\nconst fontBuffer = await fetch('/fonts/SourceHanSansSC-Regular.ttf').then((response) => {\r\n  if (!response.ok) throw new Error(`Font request failed: ${response.status}`);\r\n  return response.arrayBuffer();\r\n});\r\n\r\nawait dompdf(element, {\r\n  fontConfig: {\r\n    fontFamily: 'SourceHanSansSC-Regular',\r\n    fontBytes: new Uint8Array(fontBuffer),\r\n    fontStyle: 'normal',\r\n    fontWeight: 400,\r\n  },\r\n});\r\n```\r\n\r\n`fontConfig` accepts one font or an array. Its main fields are:\r\n\r\n| Field | Description |\r\n| --- | --- |\r\n| `fontFamily` | Required; should match the exported element's CSS `font-family` |\r\n| `fontBytes` | Decoded TTF bytes; recommended |\r\n| `fontBase64` | Base64-encoded TTF data |\r\n| `fontStyle` | `normal` or `italic` |\r\n| `fontWeight` | A weight such as `400` or `700` |\r\n| `iconFont` | Whether to treat the font as an icon font |\r\n\r\nThe type definition retains `fontUrl`, but the current collector does not fetch it. Load URL-based fonts yourself and pass them as a `Uint8Array`.\r\n\r\n### Language-Based Font Fallback\r\n\r\n`langFontConfig` selects fonts by Unicode range and can define a default fallback:\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  langFontConfig: [\r\n    {\r\n      fontFamily: 'SourceHanSansSC-Regular',\r\n      fontBytes: chineseFontBytes,\r\n      charRange: [[0x3400, 0x9fff]],\r\n    },\r\n    {\r\n      fontFamily: 'NotoSans-Regular',\r\n      fontBytes: fallbackFontBytes,\r\n      isDefault: true,\r\n    },\r\n  ],\r\n});\r\n```\r\n\r\nThe repository includes [`examples/SourceHanSansSC-Regular.ttf`](./examples/SourceHanSansSC-Regular.ttf) for local demos and verification. In production, verify the font's license and avoid registering duplicate copies of large complete fonts.\r\n\r\n## Form Export\r\n\r\nForm values are captured from the DOM state at the start of the export, rather than from the initial HTML attributes.\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  pagination: true,\r\n  form: {\r\n    mode: 'hybrid',\r\n    include: [\r\n      'text',\r\n      'textarea',\r\n      'select',\r\n      'checkbox',\r\n      'radio',\r\n      'date-time',\r\n      'range',\r\n      'color',\r\n      'file',\r\n      'progress',\r\n      'meter',\r\n    ],\r\n  },\r\n});\r\n```\r\n\r\nModes:\r\n\r\n- `static`: the default; preserve only the control's current visual appearance\r\n- `interactive`: create AcroForm fields for controls with a natural PDF mapping\r\n- `hybrid`: preserve the static appearance and add interactive fields\r\n\r\nCurrent interactive-field mappings:\r\n\r\n- Text-like `input` elements and `textarea`\r\n- `select`\r\n- `checkbox`\r\n- `radio`\r\n\r\nThe following types retain a static appearance but do not produce equivalent interactive fields:\r\n\r\n- `date`, `time`, `month`, `week`, and `datetime-local`\r\n- `range`, `color`, and `file`\r\n- `progress` and `meter`\r\n\r\n`form: true` still uses the default static mode. To generate interactive fields, explicitly set `mode: 'interactive'` or `mode: 'hybrid'`.\r\n\r\n## PDF Encryption\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  encryption: {\r\n    userPassword: 'reader-password',\r\n    ownerPassword: 'owner-password',\r\n    userPermissions: ['print', 'copy'],\r\n  },\r\n});\r\n```\r\n\r\nAvailable permissions:\r\n\r\n- `print`: allow printing\r\n- `modify`: allow modifications\r\n- `copy`: allow copying content\r\n- `annot-forms`: allow annotations and form filling\r\n\r\nUnknown permission names cause an error. Whether PDF permissions are strictly enforced ultimately depends on the reader; permission flags are not a substitute for access control over sensitive data.\r\n\r\n## Images and Cross-Origin Resources\r\n\r\nSame-origin images, data URLs, Canvas content, and readable SVGs can participate directly in an export. Cross-origin images require correct CORS response headers from the resource server:\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  useCORS: true,\r\n  jpegQuality: 0.9,\r\n});\r\n```\r\n\r\nNotes:\r\n\r\n- `useCORS: true` only requests images with anonymous CORS; it cannot bypass server policy\r\n- The image server will normally need to return `Access-Control-Allow-Origin`\r\n- Wait for images and fonts to finish loading before exporting\r\n- Unreadable images may be skipped or degraded\r\n- Legacy html2canvas options such as `proxy`, `allowTaint`, and `imageTimeout` do not provide their original behavior\r\n\r\nYou can wait for document fonts and images before exporting:\r\n\r\n```ts\r\nawait document.fonts.ready;\r\n\r\nawait Promise.all(\r\n  Array.from(element.querySelectorAll('img')).map((image) => {\r\n    if (image.complete) return Promise.resolve();\r\n    return new Promise<void>((resolve) => {\r\n      image.addEventListener('load', () => resolve(), { once: true });\r\n      image.addEventListener('error', () => resolve(), { once: true });\r\n    });\r\n  }),\r\n);\r\n```\r\n\r\n## Progress Reporting\r\n\r\n`onProgress` reports these stages:\r\n\r\n- `collecting`: collecting the DOM and resources\r\n- `countingPages`: determining the total page count for per-page headers, footers, or watermarks\r\n- `rendering`: generating the PDF in WASM\r\n- `done`: export completed\r\n\r\n```ts\r\nawait dompdf(element, {\r\n  pagination: true,\r\n  onProgress(progress) {\r\n    switch (progress.stage) {\r\n      case 'collecting':\r\n        console.log('Collecting the document');\r\n        break;\r\n      case 'countingPages':\r\n        console.log(`Counting pages: ${progress.totalPages ?? '...'}`);\r\n        break;\r\n      case 'rendering':\r\n        console.log(\r\n          `Rendering: ${progress.currentPage ?? 0}/${progress.totalPages ?? '?'}`,\r\n        );\r\n        break;\r\n      case 'done':\r\n        console.log(`Export complete: ${progress.totalPages ?? 1} pages`);\r\n        break;\r\n    }\r\n  },\r\n});\r\n```\r\n\r\nNot every export emits a `countingPages` stage. It is used only when a configuration needs the total page count in advance.\r\n\r\n## Compatibility and Limitations\r\n\r\n### Browser Compatibility\r\n\r\nThe runtime depends on:\r\n\r\n- DOM and CSSOM\r\n- Web Workers\r\n- WebAssembly\r\n- `Blob` and `URL.createObjectURL`\r\n- `TextEncoder` and `TextDecoder`\r\n\r\nUse a recent Chromium, Firefox, or Safari release. The library cannot collect a page directly in Node.js, during server-side rendering, or inside a Worker without a DOM. Next.js, Nuxt, and other SSR applications should call the export APIs only on the client.\r\n\r\n### Legacy Compatibility Options\r\n\r\nThe project has migrated from `html2canvas + jsPDF` to `DOM snapshot + Worker + WASM`. The following options are accepted by the types and runtime, but do not currently provide equivalent legacy behavior. Some emit a warning:\r\n\r\n- `onJspdfReady` and `onJspdfFinish`\r\n- `foreignObjectRendering`, `allowTaint`, `proxy`, and `imageTimeout`\r\n- `logging` and `cache`\r\n- `windowWidth`, `windowHeight`, `scrollX`, and `scrollY`\r\n- `x`, `y`, `width`, `height`, and `scale`\r\n- `canvas`, `removeContainer`, and `onclone`\r\n- `pdfFileName`, `floatPrecision`, `orientation`, and `putOnlyUsedFonts`\r\n\r\n`ignoreElements` does have implemented behavior and can replace some legacy clone-stage filtering. See the [migration notes](./docs/migration-compat.md) for the full migration path.\r\n\r\n### Known Boundaries\r\n\r\n- Animations, video, iframes, and browser-plugin content cannot be exported with their full dynamic behavior\r\n- Some complex filters, blend modes, masks, and advanced CSS are degraded or rasterized\r\n- Very high-resolution images and complete CJK fonts increase collection time, memory use, and PDF size\r\n- `fontUrl` and `putOnlyUsedFonts` currently have compatibility signatures only; callers must load font URLs themselves\r\n- The renderer callback accepted by `PageRegionConfig.content` is a compatibility signature and does not expose an operable jsPDF instance\r\n- Code that depends on jsPDF plugins or modifies a live jsPDF instance after export must be migrated\r\n\r\n## FAQ\r\n\r\n### Why is Chinese text blank or rendered as boxes?\r\n\r\nBrowser fonts are not embedded into the PDF automatically. Register a TTF containing the required characters through `fontConfig.fontBytes`, and ensure the element's CSS `font-family` matches `fontFamily`.\r\n\r\n### Why do page breaks differ from the browser preview?\r\n\r\nKeep the export container width close to the target page's content width, and wait for fonts and images to load before exporting. Margins, headers, and footers all reduce the usable area on each page.\r\n\r\n### How do I export a landscape page?\r\n\r\nUse a custom `[width, height]` pair or `pageWidthPt/pageHeightPt`. Do not rely on the currently compatibility-only `orientation` option.\r\n\r\n### Why is a cross-origin image missing from the PDF?\r\n\r\nSet `useCORS: true` and verify that the image server permits cross-origin reads. A frontend CORS option alone cannot bypass missing server response headers.\r\n\r\n### How can I reduce PDF size?\r\n\r\nEnable `compress: true`, avoid images far larger than their displayed dimensions, reduce `jpegQuality` where appropriate, and register only the fonts and weights the document needs.\r\n\r\n## How It Works\r\n\r\n1. The main thread walks the target element and reads browser-computed layout, styles, text, images, and form state.\r\n2. TypeScript encodes the collected result into a compact binary snapshot.\r\n3. The snapshot is transferred to a Web Worker.\r\n4. Rust/WASM performs pagination, font subsetting, drawing, and PDF object generation.\r\n5. The main thread receives the PDF bytes and returns a `Uint8Array`, a `Blob`, or starts a download, depending on the API used.\r\n\r\nThis architecture avoids drawing the entire document into one Canvas and keeps the main PDF-generation work off the main thread.\r\n\r\n## Examples\r\n\r\n- [`examples/index.html`](./examples/index.html): comprehensive feature demo\r\n- [`examples/comparison.html`](./examples/comparison.html): comparison with other frontend PDF approaches\r\n- [`examples/markdown-editor.html`](./examples/markdown-editor.html): Markdown editing and live export\r\n- [`userscript/dompdf-page-exporter.user.js`](./userscript/dompdf-page-exporter.user.js): userscript for full-page, single-node, and exclusion-based exports; see [`userscript/README.md`](./userscript/README.md) for installation\r\n\r\nRun `npm run serve` from the repository root before opening an example. Do not open examples directly through `file://`, because browser security policies may block modules, fonts, and cross-origin resources.\r\n\r\n## Local Development\r\n\r\n### Requirements\r\n\r\n- Node.js 18+\r\n- Rust toolchain\r\n- `wasm32-unknown-unknown` target\r\n\r\n```bash\r\nrustup target add wasm32-unknown-unknown\r\nnpm install\r\nnpm run build\r\nnpm test\r\nnpm run serve\r\n```\r\n\r\nCommon scripts:\r\n\r\n| Command | Purpose |\r\n| --- | --- |\r\n| `npm run build:wasm` | Compile the Rust/WASM module |\r\n| `npm run build` | Build the published bundles and TypeScript declarations |\r\n| `npm run dev` | Watch the source and rebuild continuously |\r\n| `npm test` | Build WASM and run the PDF smoke verification |\r\n| `npm run verify` | Same as `npm test`; run the verification script |\r\n| `npm run serve` | Start a static server on port `8080` |\r\n\r\n`npm test` currently runs [`scripts/verify.mjs`](./scripts/verify.mjs), which verifies basic pagination, PDF structure, images, Chinese font subsetting, opacity, and composite glyphs.\r\n\r\n## Project Structure\r\n\r\n```text\r\ndompdf.js/\r\n|-- src/                  # TypeScript API, DOM collection, Worker, and WASM bridge\r\n|-- wasm/                 # Rust pagination, fonts, compression, encryption, and PDF writer\r\n|-- dist/                 # Built package artifacts\r\n|-- examples/             # Browser demos and example fonts\r\n|-- docs/                 # Migration notes and PDF-diff documentation\r\n`-- scripts/              # Build, verification, and PDF-diff tooling\r\n```\r\n\r\n## Contributing\r\n\r\nRead [CONTRIBUTING.md](./CONTRIBUTING.md) before submitting a pull request, and run at least:\r\n\r\n```bash\r\nnpm test\r\nnpm run build\r\n```\r\n\r\n## Security\r\n\r\nReport security issues as described in [SECURITY.md](./SECURITY.md). Do not disclose an unpatched vulnerability in a public issue.\r\n\r\n## Changelog\r\n\r\nSee [CHANGELOG.md](./CHANGELOG.md) for recent version changes.\r\n\r\n## License\r\n\r\nThis project is licensed under the [MIT License](./LICENSE).\r\n","readmeFilename":"README.md"}