@iqx-limited/quick-pdf 1.2.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +12 -3
- package/dist/.puppeteerrc.cjs +11 -0
- package/dist/index.cjs +456 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs +451 -0
- package/dist/index.mjs.map +1 -0
- package/dist/types/browsers.d.ts +5 -0
- package/dist/{index.d.ts → types/index.d.ts} +1 -0
- package/package.json +32 -16
- package/dist/browsers.d.ts +0 -5
- package/dist/browsers.js +0 -56
- package/dist/browsers.js.map +0 -1
- package/dist/index.js +0 -12
- package/dist/index.js.map +0 -1
- package/dist/modules/html2pdf.js +0 -103
- package/dist/modules/html2pdf.js.map +0 -1
- package/dist/modules/img2pdf.js +0 -64
- package/dist/modules/img2pdf.js.map +0 -1
- package/dist/modules/pdf2img.js +0 -169
- package/dist/modules/pdf2img.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/utilies.js +0 -37
- package/dist/utilies.js.map +0 -1
- /package/dist/{modules → types/modules}/html2pdf.d.ts +0 -0
- /package/dist/{modules → types/modules}/img2pdf.d.ts +0 -0
- /package/dist/{modules → types/modules}/pdf2img.d.ts +0 -0
- /package/dist/{utilies.d.ts → types/utilies.d.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# QuickPDF
|
|
1
|
+
# QuickPDF
|
|
2
2
|
|
|
3
3
|
Handling PDFs in NodeJS (📃 to 🖼️)
|
|
4
4
|
|
|
@@ -13,8 +13,7 @@ This project provides a set of utilities for converting various file formats wit
|
|
|
13
13
|
|
|
14
14
|
## Requirements
|
|
15
15
|
|
|
16
|
-
- **Node.js**: This project is built with Node.js and uses ES modules. NodeJS >
|
|
17
|
-
- Firefox is a dependency of this project, used via Puppeteer. To install browsers via cli run `npx puppeteer browsers install firefox`.
|
|
16
|
+
- **Node.js**: This project is built with Node.js and uses ES modules. NodeJS > v20 required.
|
|
18
17
|
|
|
19
18
|
# Operations Available in the Package
|
|
20
19
|
|
|
@@ -107,3 +106,13 @@ pdf2img(input: Buffer | string | URL, options: Options = {})
|
|
|
107
106
|
| `quality` | `number` | Quality for rendering the PDF pages, not applicable for PNG. Default is 100. |
|
|
108
107
|
| `password`| `string` | Optional password for decrypting password-protected PDFs. |
|
|
109
108
|
| `type` | `string` | The mime type to output - "png" | "jpeg" | "webp". Default is "png". |
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
# 4. `closeBrowsers`
|
|
112
|
+
|
|
113
|
+
### Function Signature:
|
|
114
|
+
```typescript
|
|
115
|
+
closeBrowsers()
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Call to close all instances in a given script.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** @type {import('puppeteer').Configuration} */
|
|
2
|
+
module.exports = {
|
|
3
|
+
// Download Chrome (default `skipDownload: false`).
|
|
4
|
+
chrome: {
|
|
5
|
+
skipDownload: false
|
|
6
|
+
},
|
|
7
|
+
// Download Firefox (default `skipDownload: true`).
|
|
8
|
+
firefox: {
|
|
9
|
+
skipDownload: false
|
|
10
|
+
}
|
|
11
|
+
};
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var semver = require('semver');
|
|
4
|
+
var node_url = require('node:url');
|
|
5
|
+
var node_path = require('node:path');
|
|
6
|
+
var promises = require('node:fs/promises');
|
|
7
|
+
var puppeteer = require('puppeteer');
|
|
8
|
+
var imageSize = require('image-size');
|
|
9
|
+
var PDFDocument = require('pdfkit');
|
|
10
|
+
var node_fs = require('node:fs');
|
|
11
|
+
var node = require('html-validate/node');
|
|
12
|
+
|
|
13
|
+
let chrome = null;
|
|
14
|
+
let firefox = null;
|
|
15
|
+
async function getChromium() {
|
|
16
|
+
if (chrome)
|
|
17
|
+
return chrome;
|
|
18
|
+
try {
|
|
19
|
+
chrome = await puppeteer.launch({
|
|
20
|
+
args: ["--no-sandbox", "--disable-setuid-sandbox"],
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
catch (err) {
|
|
24
|
+
console.error("Error launching Chromium browser in @iqx-limited/quick-form:", err);
|
|
25
|
+
}
|
|
26
|
+
return chrome;
|
|
27
|
+
}
|
|
28
|
+
async function getFirefox() {
|
|
29
|
+
if (firefox)
|
|
30
|
+
return firefox;
|
|
31
|
+
try {
|
|
32
|
+
firefox = await puppeteer.launch({
|
|
33
|
+
browser: "firefox",
|
|
34
|
+
headless: true,
|
|
35
|
+
args: ["--no-sandbox", "--disable-setuid-sandbox"],
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
console.error("Error launching Firefox browser in @iqx-limited/quick-form:", err);
|
|
40
|
+
}
|
|
41
|
+
return firefox;
|
|
42
|
+
}
|
|
43
|
+
async function closeBrowsers() {
|
|
44
|
+
try {
|
|
45
|
+
if (chrome) {
|
|
46
|
+
await chrome.close();
|
|
47
|
+
chrome = null;
|
|
48
|
+
console.log("Chromium Browser Closed");
|
|
49
|
+
}
|
|
50
|
+
if (firefox) {
|
|
51
|
+
await firefox.close();
|
|
52
|
+
firefox = null;
|
|
53
|
+
console.log("Firefox Browser Closed");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
console.error("Error closing browsers in @iqx-limited/quick-form:", err);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
process.on("exit", async () => {
|
|
61
|
+
await closeBrowsers();
|
|
62
|
+
});
|
|
63
|
+
process.on("SIGINT", async () => {
|
|
64
|
+
console.log("SIGINT received. Closing browsers...");
|
|
65
|
+
await closeBrowsers();
|
|
66
|
+
});
|
|
67
|
+
process.on("SIGTERM", async () => {
|
|
68
|
+
console.log("SIGTERM received. Closing browsers...");
|
|
69
|
+
await closeBrowsers();
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const pagePoolSize$1 = 5;
|
|
73
|
+
const RESOURCE_LIMIT$1 = 100;
|
|
74
|
+
let resourceCount$1 = 0;
|
|
75
|
+
let pagePool$1 = [];
|
|
76
|
+
let browser$1 = null;
|
|
77
|
+
async function launchPages$1() {
|
|
78
|
+
if (pagePool$1.length > 0) {
|
|
79
|
+
return pagePool$1;
|
|
80
|
+
}
|
|
81
|
+
pagePool$1 = await Promise.all(Array.from({ length: pagePoolSize$1 }, async () => {
|
|
82
|
+
if (browser$1) {
|
|
83
|
+
const page = await browser$1.newPage();
|
|
84
|
+
await page.setRequestInterception(true);
|
|
85
|
+
await page.setDefaultNavigationTimeout(10000);
|
|
86
|
+
await page.goto("about:blank");
|
|
87
|
+
page.on("request", request => {
|
|
88
|
+
resourceCount$1++;
|
|
89
|
+
if (resourceCount$1 > RESOURCE_LIMIT$1) {
|
|
90
|
+
page.reload();
|
|
91
|
+
resourceCount$1 = 0;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
request.continue();
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return page;
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
throw new Error("Browser not available");
|
|
101
|
+
}
|
|
102
|
+
}));
|
|
103
|
+
return pagePool$1;
|
|
104
|
+
}
|
|
105
|
+
const pdf2img = async (input, options = {}) => {
|
|
106
|
+
browser$1 = await getFirefox();
|
|
107
|
+
if (!browser$1) {
|
|
108
|
+
throw new Error("Browser not available");
|
|
109
|
+
}
|
|
110
|
+
const pagePool = await launchPages$1();
|
|
111
|
+
let page = pagePool.pop();
|
|
112
|
+
let tempPage = false;
|
|
113
|
+
if (!page) {
|
|
114
|
+
tempPage = true;
|
|
115
|
+
page = await browser$1.newPage();
|
|
116
|
+
}
|
|
117
|
+
let path = "";
|
|
118
|
+
let address = "";
|
|
119
|
+
let tempFile = false;
|
|
120
|
+
if (Buffer.isBuffer(input)) {
|
|
121
|
+
path = node_path.resolve(process.cwd(), "temp.pdf");
|
|
122
|
+
address = node_url.pathToFileURL(path).toString();
|
|
123
|
+
tempFile = true;
|
|
124
|
+
await promises.writeFile(path, input);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
if (typeof input === "string" && input.startsWith("http")) {
|
|
128
|
+
path = input;
|
|
129
|
+
address = path;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
path = node_path.resolve(input.toString());
|
|
133
|
+
address = node_url.pathToFileURL(path).toString();
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
await page.goto(address);
|
|
138
|
+
if (options.password) {
|
|
139
|
+
try {
|
|
140
|
+
await page.waitForSelector('input[type="password"]', {
|
|
141
|
+
visible: true,
|
|
142
|
+
timeout: 5000
|
|
143
|
+
});
|
|
144
|
+
console.log("Password prompt detected, entering password...");
|
|
145
|
+
await page.type('input[type="password"]', options.password || "");
|
|
146
|
+
await page.keyboard.press("Enter");
|
|
147
|
+
}
|
|
148
|
+
catch { }
|
|
149
|
+
}
|
|
150
|
+
await page.waitForSelector("canvas", { timeout: 5000 });
|
|
151
|
+
await page.waitForSelector(".loadingIcon", {
|
|
152
|
+
timeout: 5000,
|
|
153
|
+
hidden: true
|
|
154
|
+
});
|
|
155
|
+
const imageBuffers = [];
|
|
156
|
+
const pageCount = await page.evaluate(() => {
|
|
157
|
+
if (window.PDFViewerApplication) {
|
|
158
|
+
return window.PDFViewerApplication.pagesCount;
|
|
159
|
+
}
|
|
160
|
+
return 0;
|
|
161
|
+
});
|
|
162
|
+
const metadata = await page.evaluate(() => {
|
|
163
|
+
const app = window.PDFViewerApplication;
|
|
164
|
+
if (app && app.pdfDocument) {
|
|
165
|
+
return app.documentInfo ?? {};
|
|
166
|
+
}
|
|
167
|
+
return {};
|
|
168
|
+
});
|
|
169
|
+
const pdfDimensions = await page.evaluate(() => {
|
|
170
|
+
const canvas = document.querySelector("canvas");
|
|
171
|
+
const { width, height } = canvas.getBoundingClientRect();
|
|
172
|
+
return { width, height };
|
|
173
|
+
});
|
|
174
|
+
await page.setViewport({
|
|
175
|
+
width: pdfDimensions.width,
|
|
176
|
+
height: pdfDimensions.height,
|
|
177
|
+
deviceScaleFactor: 1
|
|
178
|
+
});
|
|
179
|
+
for (let i = 1; i <= pageCount; i++) {
|
|
180
|
+
await page.evaluate((pageNum) => {
|
|
181
|
+
if (window.PDFViewerApplication) {
|
|
182
|
+
window.PDFViewerApplication.page = pageNum;
|
|
183
|
+
}
|
|
184
|
+
}, i);
|
|
185
|
+
const pageBoundingBox = await page.evaluate(() => {
|
|
186
|
+
const pageElement = document.querySelector("canvas");
|
|
187
|
+
const { x, y, width, height } = pageElement.getBoundingClientRect();
|
|
188
|
+
return { x, y, width, height };
|
|
189
|
+
});
|
|
190
|
+
const screenshotOptions = {
|
|
191
|
+
fullPage: false,
|
|
192
|
+
type: options.type ?? "png",
|
|
193
|
+
clip: {
|
|
194
|
+
x: pageBoundingBox.x,
|
|
195
|
+
y: pageBoundingBox.y,
|
|
196
|
+
width: pageBoundingBox.width,
|
|
197
|
+
height: pageBoundingBox.height
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
if (options.type && options.type !== "png") {
|
|
201
|
+
screenshotOptions.quality = options.quality ?? 100;
|
|
202
|
+
}
|
|
203
|
+
const uint8array = await page.screenshot(screenshotOptions);
|
|
204
|
+
imageBuffers.push(Buffer.from(uint8array));
|
|
205
|
+
}
|
|
206
|
+
if (tempFile) {
|
|
207
|
+
await promises.unlink(path);
|
|
208
|
+
}
|
|
209
|
+
if (tempPage) {
|
|
210
|
+
page.close();
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
await page.setViewport({
|
|
214
|
+
width: 800,
|
|
215
|
+
height: 600,
|
|
216
|
+
deviceScaleFactor: 1
|
|
217
|
+
});
|
|
218
|
+
pagePool.push(page);
|
|
219
|
+
}
|
|
220
|
+
return {
|
|
221
|
+
length: pageCount,
|
|
222
|
+
metadata: metadata.info,
|
|
223
|
+
pages: imageBuffers
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
if (tempFile) {
|
|
228
|
+
await promises.unlink(path);
|
|
229
|
+
}
|
|
230
|
+
if (tempPage) {
|
|
231
|
+
page.close();
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
await page.setViewport({
|
|
235
|
+
width: 800,
|
|
236
|
+
height: 600,
|
|
237
|
+
deviceScaleFactor: 1
|
|
238
|
+
});
|
|
239
|
+
pagePool.push(page);
|
|
240
|
+
}
|
|
241
|
+
throw error;
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
async function getBuffer(input) {
|
|
246
|
+
if (input instanceof Buffer) {
|
|
247
|
+
return input;
|
|
248
|
+
}
|
|
249
|
+
return fetch(input.toString())
|
|
250
|
+
.then(res => {
|
|
251
|
+
if (res.ok) {
|
|
252
|
+
return res.arrayBuffer();
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
throw new Error("Failed to Fetch the File");
|
|
256
|
+
}
|
|
257
|
+
})
|
|
258
|
+
.then(array => Buffer.from(array))
|
|
259
|
+
.catch(() => {
|
|
260
|
+
if (node_fs.existsSync(input.toString())) {
|
|
261
|
+
return node_fs.readFileSync(input.toString());
|
|
262
|
+
}
|
|
263
|
+
throw new Error("Failed to Fetch the File");
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
const fetchHtmlFromUrl = async (url) => {
|
|
267
|
+
const response = await fetch(url);
|
|
268
|
+
if (!response.ok) {
|
|
269
|
+
throw new Error(`Failed to fetch content from URL: ${url}`);
|
|
270
|
+
}
|
|
271
|
+
return await response.text();
|
|
272
|
+
};
|
|
273
|
+
const readHtmlFromFilePath = async (filePath) => {
|
|
274
|
+
return node_fs.readFileSync(filePath, "utf-8");
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
const img2pdf = async (input, options = {}) => {
|
|
278
|
+
const { fileTypeFromBuffer } = await import('file-type');
|
|
279
|
+
return new Promise((resolve, reject) => {
|
|
280
|
+
getBuffer(input).then(async (buf) => {
|
|
281
|
+
const type = await fileTypeFromBuffer(buf);
|
|
282
|
+
if (type?.mime !== "image/jpeg" && type?.mime !== "image/png") {
|
|
283
|
+
throw new Error("Provided File is not a JPEG or a PNG.");
|
|
284
|
+
}
|
|
285
|
+
const pdfBuffers = [];
|
|
286
|
+
const imgSize = imageSize.imageSize(buf);
|
|
287
|
+
const landscape = imgSize.width && imgSize.height ? imgSize.width > imgSize.height : false;
|
|
288
|
+
const doc = new PDFDocument({
|
|
289
|
+
size: "a4",
|
|
290
|
+
layout: landscape ? "landscape" : "portrait",
|
|
291
|
+
margins: {
|
|
292
|
+
top: 0,
|
|
293
|
+
bottom: 0,
|
|
294
|
+
left: 0,
|
|
295
|
+
right: 0
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
doc.on("data", (data) => {
|
|
299
|
+
pdfBuffers.push(data);
|
|
300
|
+
});
|
|
301
|
+
doc.on("end", () => {
|
|
302
|
+
resolve(Buffer.concat(pdfBuffers));
|
|
303
|
+
});
|
|
304
|
+
doc.fontSize(options.fontSize ?? 10);
|
|
305
|
+
const topMargin = options.header ? 20 : 0;
|
|
306
|
+
const bottomMargin = options.footer ? 20 : 0;
|
|
307
|
+
const sidePadding = 20;
|
|
308
|
+
const imageHeight = doc.page.height - topMargin - bottomMargin;
|
|
309
|
+
if (options.header) {
|
|
310
|
+
doc.text(options.header, sidePadding, topMargin / 2 - 6, {
|
|
311
|
+
align: "center",
|
|
312
|
+
baseline: "top",
|
|
313
|
+
width: doc.page.width - 2 * sidePadding,
|
|
314
|
+
height: topMargin - 5,
|
|
315
|
+
ellipsis: true
|
|
316
|
+
}).moveDown(0.5);
|
|
317
|
+
}
|
|
318
|
+
doc.image(buf, 0, topMargin, {
|
|
319
|
+
width: doc.page.width,
|
|
320
|
+
height: imageHeight
|
|
321
|
+
});
|
|
322
|
+
if (options.footer) {
|
|
323
|
+
doc.text(options.footer, sidePadding, doc.page.height - bottomMargin / 2 - 6, {
|
|
324
|
+
align: "center",
|
|
325
|
+
width: doc.page.width - 2 * sidePadding,
|
|
326
|
+
height: bottomMargin - 5,
|
|
327
|
+
ellipsis: true
|
|
328
|
+
});
|
|
329
|
+
}
|
|
330
|
+
doc.end();
|
|
331
|
+
}).catch((e) => {
|
|
332
|
+
reject(e);
|
|
333
|
+
});
|
|
334
|
+
});
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
const pagePoolSize = 5;
|
|
338
|
+
const RESOURCE_LIMIT = 100;
|
|
339
|
+
let resourceCount = 0;
|
|
340
|
+
let pagePool = [];
|
|
341
|
+
let browser = null;
|
|
342
|
+
async function launchPages() {
|
|
343
|
+
if (pagePool.length > 0) {
|
|
344
|
+
return pagePool;
|
|
345
|
+
}
|
|
346
|
+
pagePool = await Promise.all(Array.from({ length: pagePoolSize }, async () => {
|
|
347
|
+
if (browser) {
|
|
348
|
+
const page = await browser.newPage();
|
|
349
|
+
await page.setRequestInterception(true);
|
|
350
|
+
await page.setDefaultNavigationTimeout(10000);
|
|
351
|
+
await page.goto("about:blank");
|
|
352
|
+
page.on("request", request => {
|
|
353
|
+
resourceCount++;
|
|
354
|
+
if (resourceCount > RESOURCE_LIMIT) {
|
|
355
|
+
page.reload();
|
|
356
|
+
resourceCount = 0;
|
|
357
|
+
}
|
|
358
|
+
else {
|
|
359
|
+
request.continue();
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
return page;
|
|
363
|
+
}
|
|
364
|
+
else {
|
|
365
|
+
throw new Error("Browser not available");
|
|
366
|
+
}
|
|
367
|
+
}));
|
|
368
|
+
return pagePool;
|
|
369
|
+
}
|
|
370
|
+
const html2pdf = async (input, options = {}) => {
|
|
371
|
+
const validator = new node.HtmlValidate(options.rules ?? {
|
|
372
|
+
extends: ["html-validate:standard"],
|
|
373
|
+
rules: {
|
|
374
|
+
"no-trailing-whitespace": "off"
|
|
375
|
+
}
|
|
376
|
+
});
|
|
377
|
+
let htmlContent = input.toString();
|
|
378
|
+
if (htmlContent.startsWith("http://") || htmlContent.startsWith("https://")) {
|
|
379
|
+
htmlContent = await fetchHtmlFromUrl(htmlContent);
|
|
380
|
+
}
|
|
381
|
+
else if (node_fs.existsSync(input)) {
|
|
382
|
+
htmlContent = await readHtmlFromFilePath(htmlContent);
|
|
383
|
+
}
|
|
384
|
+
browser = await getChromium();
|
|
385
|
+
if (!browser) {
|
|
386
|
+
throw new Error("Browser not available");
|
|
387
|
+
}
|
|
388
|
+
const pagePool = await launchPages();
|
|
389
|
+
let page = pagePool.pop();
|
|
390
|
+
let tempPage = false;
|
|
391
|
+
if (!page) {
|
|
392
|
+
tempPage = true;
|
|
393
|
+
page = await browser.newPage();
|
|
394
|
+
}
|
|
395
|
+
return validator.validateString(htmlContent).then(async (res) => {
|
|
396
|
+
if (res.valid) {
|
|
397
|
+
await page.setContent(htmlContent, { waitUntil: "load" });
|
|
398
|
+
const pdf = await page.pdf({ format: "A4", printBackground: true, scale: options.scale ?? 1 });
|
|
399
|
+
const pdfBuffer = Buffer.from(pdf);
|
|
400
|
+
if (options.base64 ?? false) {
|
|
401
|
+
return pdfBuffer.toString("base64");
|
|
402
|
+
}
|
|
403
|
+
return pdfBuffer;
|
|
404
|
+
}
|
|
405
|
+
else {
|
|
406
|
+
return Promise.reject({
|
|
407
|
+
valid: false,
|
|
408
|
+
count: {
|
|
409
|
+
errors: res.errorCount,
|
|
410
|
+
warnings: res.warningCount
|
|
411
|
+
},
|
|
412
|
+
validation: res.results.map(res => {
|
|
413
|
+
return {
|
|
414
|
+
file: res.filePath,
|
|
415
|
+
count: {
|
|
416
|
+
errors: res.errorCount,
|
|
417
|
+
warnings: res.warningCount
|
|
418
|
+
},
|
|
419
|
+
messages: res.messages.map(msg => {
|
|
420
|
+
return {
|
|
421
|
+
message: msg.message,
|
|
422
|
+
line: msg.line,
|
|
423
|
+
column: msg.column,
|
|
424
|
+
ruleId: msg.ruleId
|
|
425
|
+
};
|
|
426
|
+
})
|
|
427
|
+
};
|
|
428
|
+
})
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
}).finally(async () => {
|
|
432
|
+
if (tempPage) {
|
|
433
|
+
page.close();
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
await page.setViewport({
|
|
437
|
+
width: 800,
|
|
438
|
+
height: 600,
|
|
439
|
+
deviceScaleFactor: 1
|
|
440
|
+
});
|
|
441
|
+
pagePool.push(page);
|
|
442
|
+
}
|
|
443
|
+
});
|
|
444
|
+
};
|
|
445
|
+
|
|
446
|
+
const requiredVersion = ">=20.0.0";
|
|
447
|
+
if (!semver.satisfies(process.version, requiredVersion)) {
|
|
448
|
+
console.error(`\nError: Node.js version ${requiredVersion} is required. You are using ${process.version}.\n`);
|
|
449
|
+
process.exit(1);
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
exports.closeBrowsers = closeBrowsers;
|
|
453
|
+
exports.html2pdf = html2pdf;
|
|
454
|
+
exports.img2pdf = img2pdf;
|
|
455
|
+
exports.pdf2img = pdf2img;
|
|
456
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/browsers.ts","../src/modules/pdf2img.ts","../src/utilies.ts","../src/modules/img2pdf.ts","../src/modules/html2pdf.ts","../src/index.ts"],"sourcesContent":[null,null,null,null,null,null],"names":["pagePoolSize","RESOURCE_LIMIT","resourceCount","pagePool","browser","launchPages","resolve","pathToFileURL","writeFile","unlink","existsSync","readFileSync","imageSize","HtmlValidate","satisfies"],"mappings":"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"}
|