jspdf-utils 0.1.13 → 0.1.15

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.
Files changed (2) hide show
  1. package/dist/html-to-pdf.js +404 -297
  2. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
- import W from "html2canvas";
2
- const q = {
1
+ import A from "html2canvas";
2
+ const U = {
3
3
  a0: [841, 1189],
4
4
  a1: [594, 841],
5
5
  a2: [420, 594],
@@ -10,7 +10,7 @@ const q = {
10
10
  letter: [215.9, 279.4],
11
11
  legal: [215.9, 355.6],
12
12
  tabloid: [279.4, 431.8]
13
- }, U = {
13
+ }, q = {
14
14
  a0: 40,
15
15
  a1: 35,
16
16
  a2: 30,
@@ -23,23 +23,23 @@ const q = {
23
23
  tabloid: 25
24
24
  };
25
25
  function M(t = {}) {
26
- const e = t.format ?? "a4", [a, o] = q[e], i = t.pageWidth ?? a, n = t.pageHeight ?? o, l = U[e], r = {
27
- top: l,
28
- right: l,
29
- bottom: l,
30
- left: l
26
+ const e = t.format ?? "a4", [a, n] = U[e], i = t.pageWidth ?? a, o = t.pageHeight ?? n, s = q[e], r = {
27
+ top: s,
28
+ right: s,
29
+ bottom: s,
30
+ left: s
31
31
  };
32
32
  return {
33
33
  unit: t.unit ?? "mm",
34
34
  format: e,
35
35
  pageWidth: i,
36
- pageHeight: n,
36
+ pageHeight: o,
37
37
  margin: { ...r, ...t.margin }
38
38
  };
39
39
  }
40
- function E(t, e) {
41
- const a = t.offsetWidth, o = e.pageWidth - e.margin.left - e.margin.right, i = o / a, l = (e.pageHeight - e.margin.top - e.margin.bottom) / i;
42
- return { renderedWidth: a, scale: i, contentWidthMm: o, pageContentPx: l };
40
+ function N(t, e) {
41
+ const a = t.offsetWidth, n = e.pageWidth - e.margin.left - e.margin.right, i = n / a, s = (e.pageHeight - e.margin.top - e.margin.bottom) / i;
42
+ return { renderedWidth: a, scale: i, contentWidthMm: n, pageContentPx: s };
43
43
  }
44
44
  function P(t, e = 210) {
45
45
  const a = t.cloneNode(!0);
@@ -53,174 +53,174 @@ function P(t, e = 210) {
53
53
  pointerEvents: "none"
54
54
  }), document.body.appendChild(a), a;
55
55
  }
56
- function B() {
56
+ function R() {
57
57
  const t = document.createElement("style");
58
58
  return t.setAttribute("data-jspdf-utils", ""), t.textContent = "img { display: inline !important; }", document.head.appendChild(t), () => t.remove();
59
59
  }
60
- function N(t) {
60
+ function F(t) {
61
61
  for (const e of t.querySelectorAll("table")) {
62
62
  const a = e.getAttribute("cellpadding");
63
63
  if (a) {
64
- for (const o of e.querySelectorAll("th, td"))
65
- o.style.padding || (o.style.padding = a + "px");
64
+ for (const n of e.querySelectorAll("th, td"))
65
+ n.style.padding || (n.style.padding = a + "px");
66
66
  e.removeAttribute("cellpadding");
67
67
  }
68
68
  }
69
69
  }
70
- function R(t, e) {
70
+ function O(t, e) {
71
71
  for (const a of Array.from(
72
72
  t.querySelectorAll(":scope > table")
73
73
  )) {
74
74
  if (a.offsetHeight <= e) continue;
75
- const o = Array.from(a.rows);
76
- if (o.length === 0) continue;
77
- const i = o[0].querySelector("th") !== null, n = i ? o[0] : null, l = i ? o.slice(1) : o, r = n ? n.offsetHeight : 0, s = e - r - 2, g = [];
78
- let c = [], h = 0;
79
- for (const f of l) {
80
- const d = f.offsetHeight;
81
- h + d > s && c.length > 0 && (g.push(c), c = [], h = 0), c.push(f), h += d;
75
+ const n = Array.from(a.rows);
76
+ if (n.length === 0) continue;
77
+ const i = n[0].querySelector("th") !== null, o = i ? n[0] : null, s = i ? n.slice(1) : n, r = o ? o.offsetHeight : 0, c = e - r - 2, h = [];
78
+ let l = [], f = 0;
79
+ for (const d of s) {
80
+ const g = d.offsetHeight;
81
+ f + g > c && l.length > 0 && (h.push(l), l = [], f = 0), l.push(d), f += g;
82
82
  }
83
- c.length > 0 && g.push(c);
84
- for (const f of g) {
85
- const d = a.cloneNode(!1);
86
- n && d.appendChild(n.cloneNode(!0));
87
- for (const m of f) d.appendChild(m.cloneNode(!0));
88
- a.parentNode.insertBefore(d, a);
83
+ l.length > 0 && h.push(l);
84
+ for (const d of h) {
85
+ const g = a.cloneNode(!1);
86
+ o && g.appendChild(o.cloneNode(!0));
87
+ for (const u of d) g.appendChild(u.cloneNode(!0));
88
+ a.parentNode.insertBefore(g, a);
89
89
  }
90
90
  a.remove();
91
91
  }
92
92
  }
93
- function T(t, e) {
93
+ function I(t, e) {
94
94
  for (const a of Array.from(t.querySelectorAll(":scope > *"))) {
95
- const o = a;
96
- if (o.offsetHeight <= e || o.tagName === "TABLE")
95
+ const n = a;
96
+ if (n.offsetHeight <= e || n.tagName === "TABLE")
97
97
  continue;
98
- const i = o.tagName, n = o.getAttribute("style") || "", l = getComputedStyle(o).width, r = (o.textContent || "").split(/\s+/).filter(Boolean), s = document.createElement(i);
99
- s.setAttribute("style", n), Object.assign(s.style, {
98
+ const i = n.tagName, o = n.getAttribute("style") || "", s = getComputedStyle(n).width, r = (n.textContent || "").split(/\s+/).filter(Boolean), c = document.createElement(i);
99
+ c.setAttribute("style", o), Object.assign(c.style, {
100
100
  position: "absolute",
101
101
  visibility: "hidden",
102
- width: l
103
- }), t.appendChild(s);
104
- const g = [];
105
- let c = 0;
106
- for (; c < r.length; ) {
107
- let h = c + 1, f = r.length;
108
- for (; h < f; ) {
109
- const m = Math.ceil((h + f) / 2);
110
- s.textContent = r.slice(c, m).join(" "), s.offsetHeight <= e ? h = m : f = m - 1;
102
+ width: s
103
+ }), t.appendChild(c);
104
+ const h = [];
105
+ let l = 0;
106
+ for (; l < r.length; ) {
107
+ let f = l + 1, d = r.length;
108
+ for (; f < d; ) {
109
+ const u = Math.ceil((f + d) / 2);
110
+ c.textContent = r.slice(l, u).join(" "), c.offsetHeight <= e ? f = u : d = u - 1;
111
111
  }
112
- const d = document.createElement(i);
113
- d.setAttribute("style", n), d.textContent = r.slice(c, h).join(" "), g.push(d), c = h;
112
+ const g = document.createElement(i);
113
+ g.setAttribute("style", o), g.textContent = r.slice(l, f).join(" "), h.push(g), l = f;
114
114
  }
115
- s.remove();
116
- for (const h of g)
117
- o.parentNode.insertBefore(h, o);
118
- o.remove();
115
+ c.remove();
116
+ for (const f of h)
117
+ n.parentNode.insertBefore(f, n);
118
+ n.remove();
119
119
  }
120
120
  }
121
121
  function _(t, e, a) {
122
- const o = Array.from(t.rows);
123
- if (o.length === 0) return !1;
124
- const i = o[0].querySelector("th") !== null, n = i ? o[0] : null, l = i ? o.slice(1) : o, r = n ? n.offsetHeight : 0;
125
- if (l.length < 2) return !1;
126
- const s = a - r - 2;
127
- if (s <= 0) return !1;
128
- let g = 0, c = 0;
129
- for (const d of l) {
130
- if (c + d.offsetHeight > s) break;
131
- c += d.offsetHeight, g++;
122
+ const n = Array.from(t.rows);
123
+ if (n.length === 0) return !1;
124
+ const i = n[0].querySelector("th") !== null, o = i ? n[0] : null, s = i ? n.slice(1) : n, r = o ? o.offsetHeight : 0;
125
+ if (s.length < 2) return !1;
126
+ const c = a - r - 2;
127
+ if (c <= 0) return !1;
128
+ let h = 0, l = 0;
129
+ for (const g of s) {
130
+ if (l + g.offsetHeight > c) break;
131
+ l += g.offsetHeight, h++;
132
132
  }
133
- if (g === 0 || g === l.length) return !1;
134
- const h = t.cloneNode(!1);
135
- n && h.appendChild(n.cloneNode(!0));
136
- for (let d = 0; d < g; d++)
137
- h.appendChild(l[d].cloneNode(!0));
133
+ if (h === 0 || h === s.length) return !1;
138
134
  const f = t.cloneNode(!1);
139
- n && f.appendChild(n.cloneNode(!0));
140
- for (let d = g; d < l.length; d++)
141
- f.appendChild(l[d].cloneNode(!0));
142
- return e.insertBefore(h, t), e.insertBefore(f, t), t.remove(), !0;
135
+ o && f.appendChild(o.cloneNode(!0));
136
+ for (let g = 0; g < h; g++)
137
+ f.appendChild(s[g].cloneNode(!0));
138
+ const d = t.cloneNode(!1);
139
+ o && d.appendChild(o.cloneNode(!0));
140
+ for (let g = h; g < s.length; g++)
141
+ d.appendChild(s[g].cloneNode(!0));
142
+ return e.insertBefore(f, t), e.insertBefore(d, t), t.remove(), !0;
143
143
  }
144
144
  function J(t, e, a) {
145
145
  if (t.tagName === "TABLE" || t.tagName === "IMG") return !1;
146
- const o = (t.textContent || "").split(/\s+/).filter(Boolean);
147
- if (o.length < 2) return !1;
148
- const i = t.tagName, n = t.getAttribute("style") || "", l = getComputedStyle(t).width, r = document.createElement(i);
149
- if (r.setAttribute("style", n), Object.assign(r.style, {
146
+ const n = (t.textContent || "").split(/\s+/).filter(Boolean);
147
+ if (n.length < 2) return !1;
148
+ const i = t.tagName, o = t.getAttribute("style") || "", s = getComputedStyle(t).width, r = document.createElement(i);
149
+ if (r.setAttribute("style", o), Object.assign(r.style, {
150
150
  position: "absolute",
151
151
  visibility: "hidden",
152
- width: l
153
- }), e.appendChild(r), r.textContent = o[0], r.offsetHeight > a)
152
+ width: s
153
+ }), e.appendChild(r), r.textContent = n[0], r.offsetHeight > a)
154
154
  return r.remove(), !1;
155
- let s = 1, g = o.length;
156
- for (; s < g; ) {
157
- const f = Math.ceil((s + g) / 2);
158
- r.textContent = o.slice(0, f).join(" "), r.offsetHeight <= a ? s = f : g = f - 1;
155
+ let c = 1, h = n.length;
156
+ for (; c < h; ) {
157
+ const d = Math.ceil((c + h) / 2);
158
+ r.textContent = n.slice(0, d).join(" "), r.offsetHeight <= a ? c = d : h = d - 1;
159
159
  }
160
- if (r.remove(), s >= o.length) return !1;
161
- const c = document.createElement(i);
162
- c.setAttribute("style", n), c.textContent = o.slice(0, s).join(" ");
163
- const h = document.createElement(i);
164
- return h.setAttribute("style", n), h.textContent = o.slice(s).join(" "), e.insertBefore(c, t), e.insertBefore(h, t), t.remove(), !0;
160
+ if (r.remove(), c >= n.length) return !1;
161
+ const l = document.createElement(i);
162
+ l.setAttribute("style", o), l.textContent = n.slice(0, c).join(" ");
163
+ const f = document.createElement(i);
164
+ return f.setAttribute("style", o), f.textContent = n.slice(c).join(" "), e.insertBefore(l, t), e.insertBefore(f, t), t.remove(), !0;
165
165
  }
166
- function I(t, e) {
166
+ function L(t, e) {
167
167
  let a = 0;
168
168
  for (; a < t.children.length; ) {
169
- const o = t.children[a], i = o.offsetTop, n = i + o.offsetHeight, l = (Math.floor(i / e) + 1) * e;
170
- if (n > l) {
171
- const r = l - i;
172
- if (o.tagName === "TABLE") {
169
+ const n = t.children[a], i = n.offsetTop, o = i + n.offsetHeight, s = (Math.floor(i / e) + 1) * e;
170
+ if (o > s) {
171
+ const r = s - i;
172
+ if (n.tagName === "TABLE") {
173
173
  if (_(
174
- o,
174
+ n,
175
175
  t,
176
176
  r
177
177
  ))
178
178
  continue;
179
- } else if (J(o, t, r))
179
+ } else if (J(n, t, r))
180
180
  continue;
181
- if (o.offsetHeight <= e) {
182
- const s = document.createElement("div");
183
- s.style.height = l - i + 1 + "px", o.parentNode.insertBefore(s, o), a++;
181
+ if (n.offsetHeight <= e) {
182
+ const c = document.createElement("div");
183
+ c.style.height = s - i + 1 + "px", n.parentNode.insertBefore(c, n), a++;
184
184
  }
185
185
  }
186
186
  a++;
187
187
  }
188
188
  }
189
189
  function Q(t, e = {}) {
190
- const a = M(e), o = B(), i = P(t, a.pageWidth);
191
- N(i);
192
- const n = E(i, a);
193
- return R(i, n.pageContentPx), T(i, n.pageContentPx), I(i, n.pageContentPx), {
190
+ const a = M(e), n = R(), i = P(t, a.pageWidth);
191
+ F(i);
192
+ const o = N(i, a);
193
+ return O(i, o.pageContentPx), I(i, o.pageContentPx), L(i, o.pageContentPx), {
194
194
  clone: i,
195
- layout: n,
195
+ layout: o,
196
196
  options: a,
197
197
  cleanup: () => {
198
- i.remove(), o();
198
+ i.remove(), n();
199
199
  }
200
200
  };
201
201
  }
202
- async function X(t, e, a = {}) {
203
- const { clone: o, layout: i, options: n, cleanup: l } = Q(e, a);
202
+ async function tt(t, e, a = {}) {
203
+ const { clone: n, layout: i, options: o, cleanup: s } = Q(e, a);
204
204
  try {
205
205
  await new Promise((r) => {
206
- t.html(o, {
206
+ t.html(n, {
207
207
  callback: () => r(),
208
208
  width: i.contentWidthMm,
209
209
  windowWidth: i.renderedWidth,
210
210
  margin: [
211
- n.margin.top,
212
- n.margin.right,
213
- n.margin.bottom,
214
- n.margin.left
211
+ o.margin.top,
212
+ o.margin.right,
213
+ o.margin.bottom,
214
+ o.margin.left
215
215
  ]
216
216
  });
217
217
  });
218
218
  } finally {
219
- l();
219
+ s();
220
220
  }
221
- return a.marginContent && await F(t, a.marginContent, a), t;
221
+ return a.marginContent && await z(t, a.marginContent, a), t;
222
222
  }
223
- function L(t, e) {
223
+ function T(t, e) {
224
224
  switch (t) {
225
225
  case "top":
226
226
  return { x: 0, y: 0, width: e.pageWidth, height: e.margin.top };
@@ -242,7 +242,7 @@ function L(t, e) {
242
242
  };
243
243
  }
244
244
  }
245
- async function G(t, e, a, o) {
245
+ async function j(t, e, a, n) {
246
246
  const i = document.createElement("div");
247
247
  Object.assign(i.style, {
248
248
  position: "fixed",
@@ -253,30 +253,30 @@ async function G(t, e, a, o) {
253
253
  overflow: "hidden"
254
254
  }), i.appendChild(t), document.body.appendChild(i);
255
255
  try {
256
- return await W(i, {
257
- scale: o,
256
+ return await A(i, {
257
+ scale: n,
258
258
  backgroundColor: null
259
259
  });
260
260
  } finally {
261
261
  i.remove();
262
262
  }
263
263
  }
264
- const z = ["top", "right", "bottom", "left"];
265
- async function D(t, e, a) {
266
- const o = {};
267
- for (const i of z) {
268
- const n = t[i];
269
- if (n && typeof n != "function") {
270
- const l = L(i, e);
271
- o[i] = await G(
272
- n.cloneNode(!0),
273
- l.width,
274
- l.height,
264
+ const S = ["top", "right", "bottom", "left"];
265
+ async function G(t, e, a) {
266
+ const n = {};
267
+ for (const i of S) {
268
+ const o = t[i];
269
+ if (o && typeof o != "function") {
270
+ const s = T(i, e);
271
+ n[i] = await j(
272
+ o.cloneNode(!0),
273
+ s.width,
274
+ s.height,
275
275
  a
276
276
  );
277
277
  }
278
278
  }
279
- return o;
279
+ return n;
280
280
  }
281
281
  function Z(t, e) {
282
282
  return t == null ? e.margin : typeof t == "number" ? { top: t, right: t, bottom: t, left: t } : {
@@ -286,9 +286,10 @@ function Z(t, e) {
286
286
  left: t.left ?? e.margin.left
287
287
  };
288
288
  }
289
- async function j(t, e, a, o, i, n, l, r) {
290
- const s = document.createElement("div");
291
- Object.assign(s.style, {
289
+ const K = /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF\u0590-\u05FF]/;
290
+ async function D(t, e, a, n, i, o, s, r, c = !1) {
291
+ const h = document.createElement("div");
292
+ Object.assign(h.style, {
292
293
  position: "fixed",
293
294
  left: "-99999px",
294
295
  top: "0",
@@ -296,216 +297,282 @@ async function j(t, e, a, o, i, n, l, r) {
296
297
  height: `${a}px`,
297
298
  overflow: "hidden",
298
299
  whiteSpace: "nowrap",
299
- fontSize: `${o}px`,
300
+ fontSize: `${n}px`,
300
301
  fontFamily: i,
301
- fontWeight: n,
302
- color: l,
302
+ fontWeight: o,
303
+ color: s,
303
304
  display: "flex",
304
305
  alignItems: "center",
305
- gap: `${r}px`
306
+ gap: `${r}px`,
307
+ direction: c ? "rtl" : "ltr"
306
308
  });
307
- const g = document.createElement("span");
308
- g.textContent = t, Object.assign(g.style, {
309
+ const l = document.createElement("span");
310
+ l.textContent = t, Object.assign(l.style, {
309
311
  position: "absolute",
310
312
  visibility: "hidden",
311
313
  whiteSpace: "nowrap",
312
- fontSize: `${o}px`,
314
+ fontSize: `${n}px`,
313
315
  fontFamily: i,
314
- fontWeight: n
315
- }), document.body.appendChild(g);
316
- const c = g.offsetWidth;
317
- g.remove();
318
- const h = Math.ceil(e / (c + r)) + 2;
319
- for (let f = 0; f < h; f++) {
320
- const d = document.createElement("span");
321
- d.textContent = t, d.style.flexShrink = "0", s.appendChild(d);
316
+ fontWeight: o
317
+ }), document.body.appendChild(l);
318
+ const f = l.offsetWidth;
319
+ l.remove();
320
+ const d = Math.ceil(e / (f + r)) + 2;
321
+ for (let g = 0; g < d; g++) {
322
+ const u = document.createElement("span");
323
+ u.textContent = t, u.style.flexShrink = "0", h.appendChild(u);
322
324
  }
323
- document.body.appendChild(s);
325
+ document.body.appendChild(h);
324
326
  try {
325
- return await W(s, { scale: 1, backgroundColor: null });
327
+ return await A(h, {
328
+ scale: 1,
329
+ backgroundColor: null,
330
+ width: Math.ceil(e),
331
+ height: Math.ceil(a)
332
+ });
326
333
  } finally {
327
- s.remove();
334
+ h.remove();
328
335
  }
329
336
  }
330
- async function K(t, e, a, o, i, n, l) {
337
+ async function $(t, e, a, n, i, o, s) {
331
338
  const {
332
339
  text: r,
333
- color: s = "#000000",
334
- fontSize: g = 2.5,
335
- fontFamily: c = "Arial, sans-serif",
336
- fontWeight: h = "normal"
337
- } = e, f = g * a, d = (e.gap ?? g * 0.5) * a, m = f * 0.2, b = Math.ceil(f * 1.5), v = Math.round(n - m * 2), C = Math.round(l - m * 2), [y, p] = await Promise.all([
338
- j(r, v, b, f, c, h, s, d),
339
- j(r, C, b, f, c, h, s, d)
340
- ]), u = Math.round(b / 2);
341
- t.drawImage(y, o + m, i - u), t.drawImage(y, o + m, i + l - u), t.save(), t.translate(o, i + l - m), t.rotate(-Math.PI / 2), t.drawImage(p, 0, -u), t.restore(), t.save(), t.translate(o + n, i + m), t.rotate(Math.PI / 2), t.drawImage(p, 0, -u), t.restore();
340
+ color: c = "#000000",
341
+ fontSize: h = 2.5,
342
+ fontFamily: l = "Arial, sans-serif",
343
+ fontWeight: f = "normal"
344
+ } = e, d = h * a, g = (e.gap ?? h * 0.5) * a, u = d * 0.5, m = Math.ceil(d * 1.5), b = K.test(r), p = Math.round(o - u * 2), y = Math.round(s - u * 2), [C, v] = await Promise.all([
345
+ D(
346
+ r,
347
+ p,
348
+ m,
349
+ d,
350
+ l,
351
+ f,
352
+ c,
353
+ g,
354
+ b
355
+ ),
356
+ D(
357
+ r,
358
+ y,
359
+ m,
360
+ d,
361
+ l,
362
+ f,
363
+ c,
364
+ g,
365
+ b
366
+ )
367
+ ]), w = Math.round(m / 2);
368
+ t.drawImage(
369
+ C,
370
+ 0,
371
+ 0,
372
+ p,
373
+ m,
374
+ n + u,
375
+ i - w,
376
+ p,
377
+ m
378
+ ), t.drawImage(
379
+ C,
380
+ 0,
381
+ 0,
382
+ p,
383
+ m,
384
+ n + u,
385
+ i + s - w,
386
+ p,
387
+ m
388
+ ), t.save(), t.translate(n, i + s - u), t.rotate(-Math.PI / 2), t.drawImage(
389
+ v,
390
+ 0,
391
+ 0,
392
+ y,
393
+ m,
394
+ 0,
395
+ -w,
396
+ y,
397
+ m
398
+ ), t.restore(), t.save(), t.translate(n + o, i + u), t.rotate(Math.PI / 2), t.drawImage(
399
+ v,
400
+ 0,
401
+ 0,
402
+ y,
403
+ m,
404
+ 0,
405
+ -w,
406
+ y,
407
+ m
408
+ ), t.restore();
342
409
  }
343
- function k(t, e) {
410
+ function B(t, e) {
344
411
  return Z(t.margin, e);
345
412
  }
346
- async function $(t, e, a, o, i, n, l, r) {
347
- for (const s of z) {
348
- const g = e[s];
349
- if (!g) continue;
350
- const c = L(s, o);
351
- let h;
352
- typeof g == "function" ? h = await G(
353
- g(n, l),
354
- c.width,
355
- c.height,
413
+ async function V(t, e, a, n, i, o, s, r) {
414
+ for (const c of S) {
415
+ const h = e[c];
416
+ if (!h) continue;
417
+ const l = T(c, n);
418
+ let f;
419
+ typeof h == "function" ? f = await j(
420
+ h(o, s),
421
+ l.width,
422
+ l.height,
356
423
  r
357
- ) : h = a[s], t.drawImage(
358
- h,
424
+ ) : f = a[c], t.drawImage(
425
+ f,
359
426
  0,
360
427
  0,
361
- h.width,
362
- h.height,
363
- Math.round(c.x * i),
364
- Math.round(c.y * i),
365
- Math.round(c.width * i),
366
- Math.round(c.height * i)
428
+ f.width,
429
+ f.height,
430
+ Math.round(l.x * i),
431
+ Math.round(l.y * i),
432
+ Math.round(l.width * i),
433
+ Math.round(l.height * i)
367
434
  );
368
435
  }
369
436
  if (e.contentBorder) {
370
- const { color: s = "#000000", width: g = 0.3 } = e.contentBorder, c = k(e.contentBorder, o);
371
- t.strokeStyle = s, t.lineWidth = g * i, t.strokeRect(
372
- Math.round(c.left * i),
373
- Math.round(c.top * i),
374
- Math.round((o.pageWidth - c.left - c.right) * i),
375
- Math.round((o.pageHeight - c.top - c.bottom) * i)
437
+ const { color: c = "#000000", width: h = 0.3 } = e.contentBorder, l = B(e.contentBorder, n);
438
+ t.strokeStyle = c, t.lineWidth = h * i, t.strokeRect(
439
+ Math.round(l.left * i),
440
+ Math.round(l.top * i),
441
+ Math.round((n.pageWidth - l.left - l.right) * i),
442
+ Math.round((n.pageHeight - l.top - l.bottom) * i)
376
443
  );
377
444
  }
378
445
  if (e.textBorder) {
379
- const s = k(e.textBorder, o);
380
- await K(
446
+ const c = B(e.textBorder, n);
447
+ await $(
381
448
  t,
382
449
  e.textBorder,
383
450
  i,
384
- Math.round(s.left * i),
385
- Math.round(s.top * i),
386
- Math.round((o.pageWidth - s.left - s.right) * i),
387
- Math.round((o.pageHeight - s.top - s.bottom) * i)
451
+ Math.round(c.left * i),
452
+ Math.round(c.top * i),
453
+ Math.round((n.pageWidth - c.left - c.right) * i),
454
+ Math.round((n.pageHeight - c.top - c.bottom) * i)
388
455
  );
389
456
  }
390
457
  }
391
- async function tt(t, e = {}) {
392
- const { imageFormat: a = "JPEG", imageQuality: o = 1, scale: i = 2 } = e, n = M(e), l = B(), r = P(t, n.pageWidth);
393
- r.style.opacity = "1", r.style.left = "-99999px", N(r);
394
- const s = E(r, n);
395
- R(r, s.pageContentPx), T(r, s.pageContentPx), I(r, s.pageContentPx);
458
+ async function et(t, e = {}) {
459
+ const { imageFormat: a = "JPEG", imageQuality: n = 0.7, scale: i = 2 } = e, o = M(e), s = R(), r = P(t, o.pageWidth);
460
+ r.style.opacity = "1", r.style.left = "-99999px", F(r);
461
+ const c = N(r, o);
462
+ O(r, c.pageContentPx), I(r, c.pageContentPx), L(r, c.pageContentPx);
396
463
  try {
397
- const g = await W(r, {
464
+ const h = await A(r, {
398
465
  scale: i,
399
466
  backgroundColor: "#ffffff"
400
- }), { jsPDF: c } = await import("jspdf"), h = n.pageWidth - n.margin.left - n.margin.right, f = n.pageHeight - n.margin.top - n.margin.bottom, d = g.width, m = f / h * d, b = Math.ceil(g.height / m), v = n.pageWidth > n.pageHeight ? "l" : "p", C = new c({
401
- orientation: v,
467
+ }), { jsPDF: l } = await import("jspdf"), f = o.pageWidth - o.margin.left - o.margin.right, d = o.pageHeight - o.margin.top - o.margin.bottom, g = h.width, u = d / f * g, m = Math.ceil(h.height / u), b = o.pageWidth > o.pageHeight ? "l" : "p", p = new l({
468
+ orientation: b,
402
469
  unit: "mm",
403
- format: [n.pageWidth, n.pageHeight]
470
+ format: [o.pageWidth, o.pageHeight]
404
471
  });
405
- for (let y = 0; y < b; y++) {
406
- const p = Math.min(
407
- m,
408
- g.height - y * m
409
- ), u = document.createElement("canvas");
410
- u.width = d, u.height = p;
411
- const w = u.getContext("2d");
472
+ for (let y = 0; y < m; y++) {
473
+ const C = Math.min(
474
+ u,
475
+ h.height - y * u
476
+ ), v = document.createElement("canvas");
477
+ v.width = g, v.height = C;
478
+ const w = v.getContext("2d");
412
479
  if (!w) throw new Error("Could not get canvas context");
413
- w.fillStyle = "#ffffff", w.fillRect(0, 0, d, p), w.drawImage(
414
- g,
480
+ w.fillStyle = "#ffffff", w.fillRect(0, 0, g, C), w.drawImage(
481
+ h,
415
482
  0,
416
- y * m,
417
- d,
418
- p,
483
+ y * u,
484
+ g,
485
+ C,
419
486
  0,
420
487
  0,
421
- d,
422
- p
488
+ g,
489
+ C
423
490
  );
424
- const A = u.toDataURL(
491
+ const E = v.toDataURL(
425
492
  `image/${a.toLowerCase()}`,
426
- o
493
+ n
427
494
  );
428
- y > 0 && C.addPage([n.pageWidth, n.pageHeight], v);
429
- const H = p / d * h;
430
- C.addImage(
431
- A,
495
+ y > 0 && p.addPage([o.pageWidth, o.pageHeight], b);
496
+ const x = C / g * f;
497
+ p.addImage(
498
+ E,
432
499
  a,
433
- n.margin.left,
434
- n.margin.top,
435
- h,
436
- H,
500
+ o.margin.left,
501
+ o.margin.top,
502
+ f,
503
+ x,
437
504
  void 0,
438
- "FAST"
505
+ "SLOW"
439
506
  );
440
507
  }
441
- return e.marginContent && await F(C, e.marginContent, e), C;
508
+ return e.marginContent && await z(p, e.marginContent, e), p;
442
509
  } finally {
443
- r.remove(), l();
510
+ r.remove(), s();
444
511
  }
445
512
  }
446
- async function V(t, e = {}) {
447
- const { imageFormat: a = "PNG", imageQuality: o = 1, scale: i = 2 } = e, n = M(e), l = B(), r = P(t, n.pageWidth);
448
- r.style.opacity = "1", r.style.left = "-99999px", N(r);
449
- const s = E(r, n);
450
- R(r, s.pageContentPx), T(r, s.pageContentPx), I(r, s.pageContentPx);
513
+ async function Y(t, e = {}) {
514
+ const { imageFormat: a = "PNG", imageQuality: n = 0.75, scale: i = 2 } = e, o = M(e), s = R(), r = P(t, o.pageWidth);
515
+ r.style.opacity = "1", r.style.left = "-99999px", F(r);
516
+ const c = N(r, o);
517
+ O(r, c.pageContentPx), I(r, c.pageContentPx), L(r, c.pageContentPx);
451
518
  try {
452
- const g = await W(r, {
519
+ const h = await A(r, {
453
520
  scale: i,
454
521
  backgroundColor: "#ffffff"
455
- }), c = n.pageWidth - n.margin.left - n.margin.right, h = n.pageHeight - n.margin.top - n.margin.bottom, f = g.width, d = h / c * f, m = f / c, b = Math.round(n.pageWidth * m), v = Math.round(n.pageHeight * m), C = Math.round(n.margin.top * m), y = Math.round(n.margin.left * m), p = Math.ceil(g.height / d), u = [], { marginContent: w } = e, A = w ? await D(w, n, i) : {};
456
- for (let H = 0; H < p; H++) {
457
- const O = Math.min(
458
- d,
459
- g.height - H * d
460
- ), S = document.createElement("canvas");
461
- S.width = b, S.height = v;
462
- const x = S.getContext("2d");
463
- if (!x) throw new Error("Could not get canvas context");
464
- x.fillStyle = "#ffffff", x.fillRect(0, 0, b, v), x.drawImage(
522
+ }), l = o.pageWidth - o.margin.left - o.margin.right, f = o.pageHeight - o.margin.top - o.margin.bottom, d = h.width, g = f / l * d, u = d / l, m = Math.round(o.pageWidth * u), b = Math.round(o.pageHeight * u), p = Math.round(o.margin.top * u), y = Math.round(o.margin.left * u), C = Math.ceil(h.height / g), v = [], { marginContent: w } = e, E = w ? await G(w, o, i) : {};
523
+ for (let x = 0; x < C; x++) {
524
+ const k = Math.min(
465
525
  g,
526
+ h.height - x * g
527
+ ), W = document.createElement("canvas");
528
+ W.width = m, W.height = b;
529
+ const H = W.getContext("2d");
530
+ if (!H) throw new Error("Could not get canvas context");
531
+ H.fillStyle = "#ffffff", H.fillRect(0, 0, m, b), H.drawImage(
532
+ h,
466
533
  0,
467
- H * d,
468
- f,
469
- O,
534
+ x * g,
535
+ d,
536
+ k,
470
537
  y,
471
- C,
472
- f,
473
- O
474
- ), w && await $(
475
- x,
476
- w,
477
- A,
478
- n,
479
- m,
480
- H + 1,
481
538
  p,
539
+ d,
540
+ k
541
+ ), w && await V(
542
+ H,
543
+ w,
544
+ E,
545
+ o,
546
+ u,
547
+ x + 1,
548
+ C,
482
549
  i
483
- ), u.push(
484
- S.toDataURL(
550
+ ), v.push(
551
+ W.toDataURL(
485
552
  `image/${a.toLowerCase()}`,
486
- o
553
+ n
487
554
  )
488
555
  );
489
556
  }
490
- return u;
557
+ return v;
491
558
  } finally {
492
- r.remove(), l();
559
+ r.remove(), s();
493
560
  }
494
561
  }
495
- async function et(t, e, a = {}) {
496
- const o = M(a), i = await V(t, a);
562
+ async function nt(t, e, a = {}) {
563
+ const n = M(a), i = await Y(t, a);
497
564
  e.innerHTML = "", Object.assign(e.style, {
498
565
  direction: "ltr",
499
566
  width: "fit-content",
500
- height: o.pageHeight + "mm",
567
+ height: n.pageHeight + "mm",
501
568
  maxHeight: "100vh",
502
569
  overflowY: "auto",
503
570
  background: "#e0e0e0"
504
571
  });
505
- for (let n = 0; n < i.length; n++) {
506
- const l = document.createElement("img");
507
- l.src = i[n], l.alt = `Page ${n + 1}`, Object.assign(l.style, {
508
- width: o.pageWidth + "mm",
572
+ for (let o = 0; o < i.length; o++) {
573
+ const s = document.createElement("img");
574
+ s.src = i[o], s.alt = `Page ${o + 1}`, Object.assign(s.style, {
575
+ width: n.pageWidth + "mm",
509
576
  maxWidth: "100%",
510
577
  height: "auto",
511
578
  boxSizing: "border-box",
@@ -513,49 +580,89 @@ async function et(t, e, a = {}) {
513
580
  border: "1px solid #bbb",
514
581
  boxShadow: "0 2px 8px rgba(0,0,0,0.2)",
515
582
  marginBottom: "16px"
516
- }), e.appendChild(l);
583
+ }), e.appendChild(s);
517
584
  }
518
585
  }
519
- async function F(t, e, a = {}) {
520
- const o = M(a), i = t.getNumberOfPages(), n = 2, l = n * (96 / 25.4), r = Math.round(o.pageWidth * l), s = Math.round(o.pageHeight * l), g = await D(e, o, n);
521
- for (let c = 1; c <= i; c++) {
522
- t.setPage(c);
523
- const h = document.createElement("canvas");
524
- h.width = r, h.height = s;
525
- const f = h.getContext("2d");
526
- f && (await $(
586
+ async function z(t, e, a = {}) {
587
+ const n = M(a), i = t.getNumberOfPages(), o = 2, s = o * (96 / 25.4), r = Math.round(n.pageWidth * s), c = Math.round(n.pageHeight * s), h = await G(e, n, o), l = {};
588
+ for (const d of S)
589
+ h[d] && (l[d] = h[d].toDataURL("image/png"));
590
+ let f;
591
+ if (e.textBorder) {
592
+ const d = document.createElement("canvas");
593
+ d.width = r, d.height = c;
594
+ const g = d.getContext("2d");
595
+ if (g) {
596
+ const u = B(e.textBorder, n);
597
+ await $(
598
+ g,
599
+ e.textBorder,
600
+ s,
601
+ Math.round(u.left * s),
602
+ Math.round(u.top * s),
603
+ Math.round((n.pageWidth - u.left - u.right) * s),
604
+ Math.round((n.pageHeight - u.top - u.bottom) * s)
605
+ ), f = d.toDataURL("image/png");
606
+ }
607
+ }
608
+ for (let d = 1; d <= i; d++) {
609
+ t.setPage(d);
610
+ for (const g of S) {
611
+ const u = e[g];
612
+ if (!u) continue;
613
+ const m = T(g, n);
614
+ let b, p;
615
+ typeof u == "function" ? b = (await j(
616
+ u(d, i),
617
+ m.width,
618
+ m.height,
619
+ o
620
+ )).toDataURL("image/png") : (b = l[g], p = `margin-${g}`), t.addImage(
621
+ b,
622
+ "PNG",
623
+ m.x,
624
+ m.y,
625
+ m.width,
626
+ m.height,
627
+ p,
628
+ "SLOW"
629
+ );
630
+ }
631
+ if (e.contentBorder) {
632
+ const { color: g = "#000000", width: u = 0.3 } = e.contentBorder, m = B(e.contentBorder, n);
633
+ t.setDrawColor(g), t.setLineWidth(u), t.rect(
634
+ m.left,
635
+ m.top,
636
+ n.pageWidth - m.left - m.right,
637
+ n.pageHeight - m.top - m.bottom
638
+ );
639
+ }
640
+ f && t.addImage(
527
641
  f,
528
- e,
529
- g,
530
- o,
531
- l,
532
- c,
533
- i,
534
- n
535
- ), t.addImage(
536
- h.toDataURL("image/png"),
537
642
  "PNG",
538
643
  0,
539
644
  0,
540
- o.pageWidth,
541
- o.pageHeight
542
- ));
645
+ n.pageWidth,
646
+ n.pageHeight,
647
+ "text-border",
648
+ "SLOW"
649
+ );
543
650
  }
544
651
  return t;
545
652
  }
546
653
  export {
547
- U as PAGE_MARGINS,
548
- q as PAGE_SIZES,
549
- F as addMarginContent,
550
- E as computeLayout,
654
+ q as PAGE_MARGINS,
655
+ U as PAGE_SIZES,
656
+ z as addMarginContent,
657
+ N as computeLayout,
551
658
  P as createPrintClone,
552
- I as insertPageBreakSpacers,
553
- N as normalizeTableAttributes,
659
+ L as insertPageBreakSpacers,
660
+ F as normalizeTableAttributes,
554
661
  Q as prepare,
555
- et as previewPageImages,
556
- X as renderHTML,
557
- tt as renderImagePDF,
558
- V as renderPageImages,
559
- R as splitOversizedTables,
560
- T as splitOversizedText
662
+ nt as previewPageImages,
663
+ tt as renderHTML,
664
+ et as renderImagePDF,
665
+ Y as renderPageImages,
666
+ O as splitOversizedTables,
667
+ I as splitOversizedText
561
668
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jspdf-utils",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "Utility helpers for jsPDF's doc.html() renderer with automatic page breaking, table splitting, and RTL support",
5
5
  "type": "module",
6
6
  "main": "dist/html-to-pdf.js",