From 9706bfe31a57cbd3960893c9dc156e375e82cccd Mon Sep 17 00:00:00 2001 From: zboris12 Date: Mon, 19 Aug 2024 21:33:38 +0900 Subject: [PATCH] Improved to support font subsetting and changed to use pdf-fontkit. --- README.md | 7 +- closure/zb-externs.js | 1 + lib/zganode.d.ts | 3 +- lib/zganode.js | 3 +- lib/zgapdfsigner.js | 28 ++-- package-lock.json | 338 ++---------------------------------------- package.json | 5 +- test.html | 3 +- 8 files changed, 44 insertions(+), 344 deletions(-) diff --git a/README.md b/README.md index 16c76a3..2c9aa8d 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,8 @@ signing with a timestamp from [TSA](https://github.com/zboris12/zgapdfsigner/wik * [pdf-lib](https://pdf-lib.js.org/) * [node-forge](https://github.com/digitalbazaar/forge) * [follow-redirects](https://github.com/follow-redirects/follow-redirects) +* [pako](https://github.com/nodeca/pako) - For drawing text +* [pdf-fontkit](https://github.com/znacloud/pdf-fontkit) - For drawing text ## How to use this tool @@ -53,9 +55,10 @@ Just import the dependencies and this tool. ``` When drawing text for signature, importing fontkit and pako library is necessary. ```html - + ``` +Thanks to [znacloud](https://github.com/znacloud/pdf-fontkit) for fixing the font subsetting issue in [@pdf-lib/fontkit](https://github.com/Hopding/fontkit). ### [Google Apps Script](https://developers.google.com/apps-script) Load the dependencies and this tool. @@ -70,7 +73,7 @@ var window = globalThis; // Load pdf-lib eval(UrlFetchApp.fetch("https://unpkg.com/pdf-lib@1.17.1/dist/pdf-lib.min.js").getContentText()); // It is necessary for drawing text for signature. -eval(UrlFetchApp.fetch("https://unpkg.com/@pdf-lib/fontkit/dist/fontkit.umd.min.js").getContentText()); +eval(UrlFetchApp.fetch("https://unpkg.com/pdf-fontkit@1.8.9/dist/fontkit.umd.min.js").getContentText()); // Load pako, It is necessary for drawing text for signature. eval(UrlFetchApp.fetch("https://unpkg.com/pako@1.0.11/dist/pako_inflate.min.js").getContentText()); // Load node-forge diff --git a/closure/zb-externs.js b/closure/zb-externs.js index ae9cce3..49c123b 100644 --- a/closure/zb-externs.js +++ b/closure/zb-externs.js @@ -36,6 +36,7 @@ var SignAreaInfo; * {{ * text: string, * fontData: (Array|Uint8Array|ArrayBuffer|string|undefined), + * subset: (boolean|undefined), * color: (string|undefined), * opacity: (number|undefined), * blendMode: (string|undefined), diff --git a/lib/zganode.d.ts b/lib/zganode.d.ts index 8f0525e..7e7699f 100644 --- a/lib/zganode.d.ts +++ b/lib/zganode.d.ts @@ -38,6 +38,7 @@ export type SignAreaInfo = { export type SignTextInfo = { text: string, fontData?: Array | Uint8Array | ArrayBuffer | PDFLib.StandardFonts; + subset?: boolean; color?: string; opacity?: number; blendMode?: string; @@ -112,5 +113,5 @@ export declare class TsaFetcher { export declare class PdfFonts { private constructor(); static from(pdfdoc: PDFLib.PDFDocument): Promise; - getEmbeddedFont(fontData?: Array | Uint8Array | ArrayBuffer | PDFLib.StandardFonts): Promise; + getEmbeddedFont(fontData?: Array | Uint8Array | ArrayBuffer | PDFLib.StandardFonts, subset?: boolean): Promise; } diff --git a/lib/zganode.js b/lib/zganode.js index 470b175..8ebd290 100644 --- a/lib/zganode.js +++ b/lib/zganode.js @@ -6,7 +6,8 @@ const m_h = { const z = require("./zgaindex.js"); z.forge = require("node-forge"); z.PDFLib = require("pdf-lib"); -z.fontkit = require("@pdf-lib/fontkit"); +// z.fontkit = require("@pdf-lib/fontkit"); +z.fontkit = require("pdf-fontkit"); z.pako = require("pako"); /** * @param {string} url diff --git a/lib/zgapdfsigner.js b/lib/zgapdfsigner.js index 0b0e37d..909421a 100644 --- a/lib/zgapdfsigner.js +++ b/lib/zgapdfsigner.js @@ -347,7 +347,7 @@ z.PdfSigner = class{ if(_this.opt.drawinf && _this.opt.drawinf.textInfo && !_this.opt.drawinf.font){ _this.fonts = await z.PdfFonts.from(pdfdoc); - _this.opt.drawinf.font = await _this.fonts.getEmbeddedFont(_this.opt.drawinf.textInfo.fontData); + _this.opt.drawinf.font = await _this.fonts.getEmbeddedFont(_this.opt.drawinf.textInfo.fontData, _this.opt.drawinf.textInfo.subset); } /** @type {forge_cert} */ @@ -1910,12 +1910,16 @@ z.PdfFonts = class{ if(fltr == "/FlateDecode"){ fdat = pako.inflate(fdat); } - /** @type {PDFLib.CustomFontEmbedder} */ - var emdr = await PDFLib.CustomFontEmbedder.for(fontkit, fdat); - fonts.push({ - font: PDFLib.PDFFont.of(poe[0], pdfdoc, emdr), - data: fdat, - }); + try{ + /** @type {PDFLib.CustomFontEmbedder} */ + var emdr = await PDFLib.CustomFontEmbedder.for(fontkit, fdat); + fonts.push({ + font: PDFLib.PDFFont.of(poe[0], pdfdoc, emdr), + data: fdat, + }); + }catch(ex){ + z.log(fntnm, ex.message); + } } } } @@ -1929,9 +1933,10 @@ z.PdfFonts = class{ /** * @public * @param {Array|Uint8Array|ArrayBuffer|string|undefined} fontData + * @param {boolean=} subset * @return {Promise} */ - async getEmbeddedFont(fontData){ + async getEmbeddedFont(fontData, subset){ if(!fontData){ if(this.fonts.length){ z.log("Use existing default font.", this.fonts[0].font.name); @@ -1946,7 +1951,7 @@ z.PdfFonts = class{ }else{ /** @type {Uint8Array} */ var u8dat = (fontData instanceof Uint8Array) ? fontData : new Uint8Array(fontData); - return await this.getCustomFont(u8dat); + return await this.getCustomFont(u8dat, subset || false); } } @@ -1972,9 +1977,10 @@ z.PdfFonts = class{ /** * @private * @param {Uint8Array} fontData + * @param {boolean} subset * @return {Promise} */ - async getCustomFont(fontData){ + async getCustomFont(fontData, subset){ /** @type {number} */ var i = 0; while(i < this.fonts.length){ @@ -1987,7 +1993,7 @@ z.PdfFonts = class{ } } this.doc.registerFontkit(fontkit); - return await this.doc.embedFont(fontData); + return await this.doc.embedFont(fontData, {subset}); } /** * @private diff --git a/package-lock.json b/package-lock.json index c9236bf..8409a51 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,31 +1,23 @@ { "name": "zgapdfsigner", - "version": "2.5.2", - "lockfileVersion": 2, + "version": "2.7.2", + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "zgapdfsigner", - "version": "2.5.2", + "version": "2.7.2", "license": "MIT", "dependencies": { - "@pdf-lib/fontkit": "^1.1.1", "follow-redirects": "1.15.6", "node-forge": "1.3.1", + "pdf-fontkit": "1.8.9", "pdf-lib": "1.17.1" }, "devDependencies": { "google-closure-compiler": "^20231112.0.0" } }, - "node_modules/@pdf-lib/fontkit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@pdf-lib/fontkit/-/fontkit-1.1.1.tgz", - "integrity": "sha512-KjMd7grNapIWS/Dm0gvfHEilSyAmeLvrEGVcqLGi0VYebuqqzTbgF29efCx7tvx+IEbG3zQciRSWl3GkUSvjZg==", - "dependencies": { - "pako": "^1.0.6" - } - }, "node_modules/@pdf-lib/standard-fonts": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", @@ -181,35 +173,6 @@ "integrity": "sha512-E45cJD6/xLJlL8pL6HEoxu8nEKp87CnrojUK0UuHiT7ZjCsrJfR4WhZwNNCq2+/6gYD9unGgMsunV4DDtBbvaA==", "dev": true }, - "node_modules/google-closure-compiler-linux": { - "version": "20231112.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20231112.0.0.tgz", - "integrity": "sha512-qi2DbqQ+OuZ4Mcp1EttmL4j3oqvXLPl8XREekkfdV651PXBNenoBG6EnzQIius7ESYVgmpbQE4Pw2wNhPudBBQ==", - "cpu": [ - "x32", - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/google-closure-compiler-osx": { - "version": "20231112.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20231112.0.0.tgz", - "integrity": "sha512-gNnlnVH4rVO5TyDhvqELzRc9Oydaxincj0QLsAQQkM0btBTUEEyFL1ACT00RgJKxrCTb5Lfa83DfU8ICJi5Ptw==", - "cpu": [ - "x32", - "x64", - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, "node_modules/google-closure-compiler-windows": { "version": "20231112.0.0", "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20231112.0.0.tgz", @@ -267,6 +230,14 @@ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, + "node_modules/pdf-fontkit": { + "version": "1.8.9", + "resolved": "https://registry.npmjs.org/pdf-fontkit/-/pdf-fontkit-1.8.9.tgz", + "integrity": "sha512-TTq+umfhlFjUuQYOq6dCKT/wLslCrX4zVr5gqrIvrGHfo+vJ3ETapZTb4YLOCErohX7pF+HxlXSZuiToSRhNmA==", + "dependencies": { + "pako": "^1.0.6" + } + }, "node_modules/pdf-lib": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", @@ -387,290 +358,5 @@ "source-map": "^0.5.1" } } - }, - "dependencies": { - "@pdf-lib/fontkit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@pdf-lib/fontkit/-/fontkit-1.1.1.tgz", - "integrity": "sha512-KjMd7grNapIWS/Dm0gvfHEilSyAmeLvrEGVcqLGi0VYebuqqzTbgF29efCx7tvx+IEbG3zQciRSWl3GkUSvjZg==", - "requires": { - "pako": "^1.0.6" - } - }, - "@pdf-lib/standard-fonts": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@pdf-lib/standard-fonts/-/standard-fonts-1.0.0.tgz", - "integrity": "sha512-hU30BK9IUN/su0Mn9VdlVKsWBS6GyhVfqjwl1FjZN4TxP6cCw0jP2w7V3Hf5uX7M0AZJ16vey9yE0ny7Sa59ZA==", - "requires": { - "pako": "^1.0.6" - } - }, - "@pdf-lib/upng": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@pdf-lib/upng/-/upng-1.0.1.tgz", - "integrity": "sha512-dQK2FUMQtowVP00mtIksrlZhdFXQZPC+taih1q4CvPZ5vqdxR/LKBaFg0oAfzd1GlHZXXSPdQfzQnt+ViGvEIQ==", - "requires": { - "pako": "^1.0.10" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", - "dev": true - }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", - "dev": true - }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true - }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==" - }, - "google-closure-compiler": { - "version": "20231112.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20231112.0.0.tgz", - "integrity": "sha512-C/MPRThIxRAFomGhpEwXyVcWRIVnmqGraJ5BTJ+EQcfAiPNBvl+Q5nKU2J/lICPcx+YQ+3c+FJ/gBJsTXPjcwg==", - "dev": true, - "requires": { - "chalk": "4.x", - "google-closure-compiler-java": "^20231112.0.0", - "google-closure-compiler-linux": "^20231112.0.0", - "google-closure-compiler-osx": "^20231112.0.0", - "google-closure-compiler-windows": "^20231112.0.0", - "minimist": "1.x", - "vinyl": "2.x", - "vinyl-sourcemaps-apply": "^0.2.0" - } - }, - "google-closure-compiler-java": { - "version": "20231112.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-java/-/google-closure-compiler-java-20231112.0.0.tgz", - "integrity": "sha512-E45cJD6/xLJlL8pL6HEoxu8nEKp87CnrojUK0UuHiT7ZjCsrJfR4WhZwNNCq2+/6gYD9unGgMsunV4DDtBbvaA==", - "dev": true - }, - "google-closure-compiler-linux": { - "version": "20231112.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-linux/-/google-closure-compiler-linux-20231112.0.0.tgz", - "integrity": "sha512-qi2DbqQ+OuZ4Mcp1EttmL4j3oqvXLPl8XREekkfdV651PXBNenoBG6EnzQIius7ESYVgmpbQE4Pw2wNhPudBBQ==", - "dev": true, - "optional": true - }, - "google-closure-compiler-osx": { - "version": "20231112.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-osx/-/google-closure-compiler-osx-20231112.0.0.tgz", - "integrity": "sha512-gNnlnVH4rVO5TyDhvqELzRc9Oydaxincj0QLsAQQkM0btBTUEEyFL1ACT00RgJKxrCTb5Lfa83DfU8ICJi5Ptw==", - "dev": true, - "optional": true - }, - "google-closure-compiler-windows": { - "version": "20231112.0.0", - "resolved": "https://registry.npmjs.org/google-closure-compiler-windows/-/google-closure-compiler-windows-20231112.0.0.tgz", - "integrity": "sha512-wbN5EOCGz53HVENVtOEO1brn/G3ZmCV1ULiJljNuASQc62vQ36QHA6XnAZOAGTEpAoMnYRv3dtXtBKd07wBdsA==", - "dev": true, - "optional": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" - }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "pdf-lib": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/pdf-lib/-/pdf-lib-1.17.1.tgz", - "integrity": "sha512-V/mpyJAoTsN4cnP31vc0wfNA1+p20evqqnap0KLoRUN0Yk/p3wN52DOEsL4oBFcLdb76hlpKPtzJIgo67j/XLw==", - "requires": { - "@pdf-lib/standard-fonts": "^1.0.0", - "@pdf-lib/upng": "^1.0.1", - "pako": "^1.0.11", - "tslib": "^1.11.1" - } - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-sourcemaps-apply": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", - "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", - "dev": true, - "requires": { - "source-map": "^0.5.1" - } - } } } diff --git a/package.json b/package.json index c68fc17..d1e5b60 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "zgapdfsigner", - "version": "2.7.1", + "version": "2.7.2", "author": "zboris12", "description": "A javascript tool to sign a pdf or set protection to a pdf in web browser, Google Apps Script and nodejs.", "homepage": "https://github.com/zboris12/zgapdfsigner", @@ -14,6 +14,7 @@ }, "license": "MIT", "main": "lib/zganode.js", + "unpkg": "dist/zgapdfsigner.min.js", "files": [ "dist/*.min.js", "lib/*.d.ts", @@ -34,9 +35,9 @@ "test": "node test4node.js ${pfxpwd}" }, "dependencies": { - "@pdf-lib/fontkit": "^1.1.1", "follow-redirects": "1.15.6", "node-forge": "1.3.1", + "pdf-fontkit": "1.8.9", "pdf-lib": "1.17.1" }, "devDependencies": { diff --git a/test.html b/test.html index 237933a..8350174 100644 --- a/test.html +++ b/test.html @@ -5,7 +5,7 @@ Test for ZgaPdfSigner - + @@ -103,6 +103,7 @@ textInfo: txt ? { text: txt, fontData: font, + subset: true, color: "f00", size: 16, align: 2,