jspdf-utils 0.1.14 → 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 +343 -305
  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
- }, _ = {
13
+ }, q = {
14
14
  a0: 40,
15
15
  a1: 35,
16
16
  a2: 30,
@@ -23,25 +23,25 @@ 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 = _[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
- function B(t, e = 210) {
44
+ function P(t, e = 210) {
45
45
  const a = t.cloneNode(!0);
46
46
  return Object.assign(a.style, {
47
47
  position: "fixed",
@@ -53,174 +53,174 @@ function B(t, e = 210) {
53
53
  pointerEvents: "none"
54
54
  }), document.body.appendChild(a), a;
55
55
  }
56
- function N() {
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 P(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, c = e - r - 2, g = [];
78
- let s = [], h = 0;
79
- for (const f of l) {
80
- const d = f.offsetHeight;
81
- h + d > c && s.length > 0 && (g.push(s), s = [], h = 0), s.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
- s.length > 0 && g.push(s);
84
- for (const f of g) {
85
- const d = a.cloneNode(!1);
86
- n && d.appendChild(n.cloneNode(!0));
87
- for (const u of f) d.appendChild(u.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 F(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), c = document.createElement(i);
99
- c.setAttribute("style", n), Object.assign(c.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
102
+ width: s
103
103
  }), t.appendChild(c);
104
- const g = [];
105
- let s = 0;
106
- for (; s < r.length; ) {
107
- let h = s + 1, f = r.length;
108
- for (; h < f; ) {
109
- const u = Math.ceil((h + f) / 2);
110
- c.textContent = r.slice(s, u).join(" "), c.offsetHeight <= e ? h = u : f = u - 1;
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(s, h).join(" "), g.push(d), s = 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
115
  c.remove();
116
- for (const h of g)
117
- o.parentNode.insertBefore(h, o);
118
- o.remove();
116
+ for (const f of h)
117
+ n.parentNode.insertBefore(f, n);
118
+ n.remove();
119
119
  }
120
120
  }
121
- function U(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;
121
+ function _(t, e, a) {
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
126
  const c = a - r - 2;
127
127
  if (c <= 0) return !1;
128
- let g = 0, s = 0;
129
- for (const d of l) {
130
- if (s + d.offsetHeight > c) break;
131
- s += d.offsetHeight, g++;
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 c = 1, g = o.length;
156
- for (; c < g; ) {
157
- const f = Math.ceil((c + g) / 2);
158
- r.textContent = o.slice(0, f).join(" "), r.offsetHeight <= a ? c = 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(), c >= o.length) return !1;
161
- const s = document.createElement(i);
162
- s.setAttribute("style", n), s.textContent = o.slice(0, c).join(" ");
163
- const h = document.createElement(i);
164
- return h.setAttribute("style", n), h.textContent = o.slice(c).join(" "), e.insertBefore(s, 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 T(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") {
173
- if (U(
174
- o,
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
+ if (_(
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) {
181
+ if (n.offsetHeight <= e) {
182
182
  const c = document.createElement("div");
183
- c.style.height = l - i + 1 + "px", o.parentNode.insertBefore(c, o), a++;
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 = N(), i = B(t, a.pageWidth);
191
- P(i);
192
- const n = E(i, a);
193
- return R(i, n.pageContentPx), F(i, n.pageContentPx), T(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
202
  async function tt(t, e, a = {}) {
203
- const { clone: o, layout: i, options: n, cleanup: l } = Q(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 $(t, a.marginContent, a), t;
221
+ return a.marginContent && await z(t, a.marginContent, a), t;
222
222
  }
223
- function k(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 k(t, e) {
242
242
  };
243
243
  }
244
244
  }
245
- async function L(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 L(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 D = ["top", "right", "bottom", "left"];
264
+ const S = ["top", "right", "bottom", "left"];
265
265
  async function G(t, e, a) {
266
- const o = {};
267
- for (const i of D) {
268
- const n = t[i];
269
- if (n && typeof n != "function") {
270
- const l = k(i, e);
271
- o[i] = await L(
272
- n.cloneNode(!0),
273
- l.width,
274
- l.height,
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 } : {
@@ -287,9 +287,9 @@ function Z(t, e) {
287
287
  };
288
288
  }
289
289
  const K = /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF\u0590-\u05FF]/;
290
- async function O(t, e, a, o, i, n, l, r, c = !1) {
291
- const g = document.createElement("div");
292
- Object.assign(g.style, {
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, {
293
293
  position: "fixed",
294
294
  left: "-99999px",
295
295
  top: "0",
@@ -297,284 +297,282 @@ async function O(t, e, a, o, i, n, l, r, c = !1) {
297
297
  height: `${a}px`,
298
298
  overflow: "hidden",
299
299
  whiteSpace: "nowrap",
300
- fontSize: `${o}px`,
300
+ fontSize: `${n}px`,
301
301
  fontFamily: i,
302
- fontWeight: n,
303
- color: l,
302
+ fontWeight: o,
303
+ color: s,
304
304
  display: "flex",
305
305
  alignItems: "center",
306
306
  gap: `${r}px`,
307
307
  direction: c ? "rtl" : "ltr"
308
308
  });
309
- const s = document.createElement("span");
310
- s.textContent = t, Object.assign(s.style, {
309
+ const l = document.createElement("span");
310
+ l.textContent = t, Object.assign(l.style, {
311
311
  position: "absolute",
312
312
  visibility: "hidden",
313
313
  whiteSpace: "nowrap",
314
- fontSize: `${o}px`,
314
+ fontSize: `${n}px`,
315
315
  fontFamily: i,
316
- fontWeight: n
317
- }), document.body.appendChild(s);
318
- const h = s.offsetWidth;
319
- s.remove();
320
- const f = Math.ceil(e / (h + r)) + 2;
321
- for (let d = 0; d < f; 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
322
  const u = document.createElement("span");
323
- u.textContent = t, u.style.flexShrink = "0", g.appendChild(u);
323
+ u.textContent = t, u.style.flexShrink = "0", h.appendChild(u);
324
324
  }
325
- document.body.appendChild(g);
325
+ document.body.appendChild(h);
326
326
  try {
327
- return await W(g, {
327
+ return await A(h, {
328
328
  scale: 1,
329
329
  backgroundColor: null,
330
330
  width: Math.ceil(e),
331
331
  height: Math.ceil(a)
332
332
  });
333
333
  } finally {
334
- g.remove();
334
+ h.remove();
335
335
  }
336
336
  }
337
- async function V(t, e, a, o, i, n, l) {
337
+ async function $(t, e, a, n, i, o, s) {
338
338
  const {
339
339
  text: r,
340
340
  color: c = "#000000",
341
- fontSize: g = 2.5,
342
- fontFamily: s = "Arial, sans-serif",
343
- fontWeight: h = "normal"
344
- } = e, f = g * a, d = (e.gap ?? g * 0.5) * a, u = f * 0.5, m = Math.ceil(f * 1.5), v = K.test(r);
345
- console.log("isRtl", v);
346
- const w = Math.round(n - u * 2), y = Math.round(l - u * 2), [b, C] = await Promise.all([
347
- O(
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(
348
346
  r,
349
- w,
347
+ p,
350
348
  m,
349
+ d,
350
+ l,
351
351
  f,
352
- s,
353
- h,
354
352
  c,
355
- d,
356
- v
353
+ g,
354
+ b
357
355
  ),
358
- O(
356
+ D(
359
357
  r,
360
358
  y,
361
359
  m,
360
+ d,
361
+ l,
362
362
  f,
363
- s,
364
- h,
365
363
  c,
366
- d,
367
- v
364
+ g,
365
+ b
368
366
  )
369
- ]), p = Math.round(m / 2);
367
+ ]), w = Math.round(m / 2);
370
368
  t.drawImage(
371
- b,
369
+ C,
372
370
  0,
373
371
  0,
374
- w,
372
+ p,
375
373
  m,
376
- o + u,
377
- i - p,
378
- w,
374
+ n + u,
375
+ i - w,
376
+ p,
379
377
  m
380
378
  ), t.drawImage(
381
- b,
379
+ C,
382
380
  0,
383
381
  0,
384
- w,
382
+ p,
385
383
  m,
386
- o + u,
387
- i + l - p,
388
- w,
384
+ n + u,
385
+ i + s - w,
386
+ p,
389
387
  m
390
- ), t.save(), t.translate(o, i + l - u), t.rotate(-Math.PI / 2), t.drawImage(
391
- C,
388
+ ), t.save(), t.translate(n, i + s - u), t.rotate(-Math.PI / 2), t.drawImage(
389
+ v,
392
390
  0,
393
391
  0,
394
392
  y,
395
393
  m,
396
394
  0,
397
- -p,
395
+ -w,
398
396
  y,
399
397
  m
400
- ), t.restore(), t.save(), t.translate(o + n, i + u), t.rotate(Math.PI / 2), t.drawImage(
401
- C,
398
+ ), t.restore(), t.save(), t.translate(n + o, i + u), t.rotate(Math.PI / 2), t.drawImage(
399
+ v,
402
400
  0,
403
401
  0,
404
402
  y,
405
403
  m,
406
404
  0,
407
- -p,
405
+ -w,
408
406
  y,
409
407
  m
410
408
  ), t.restore();
411
409
  }
412
- function j(t, e) {
410
+ function B(t, e) {
413
411
  return Z(t.margin, e);
414
412
  }
415
- async function z(t, e, a, o, i, n, l, r) {
416
- for (const c of D) {
417
- const g = e[c];
418
- if (!g) continue;
419
- const s = k(c, o);
420
- let h;
421
- typeof g == "function" ? h = await L(
422
- g(n, l),
423
- s.width,
424
- s.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,
425
423
  r
426
- ) : h = a[c], t.drawImage(
427
- h,
424
+ ) : f = a[c], t.drawImage(
425
+ f,
428
426
  0,
429
427
  0,
430
- h.width,
431
- h.height,
432
- Math.round(s.x * i),
433
- Math.round(s.y * i),
434
- Math.round(s.width * i),
435
- Math.round(s.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)
436
434
  );
437
435
  }
438
436
  if (e.contentBorder) {
439
- const { color: c = "#000000", width: g = 0.3 } = e.contentBorder, s = j(e.contentBorder, o);
440
- t.strokeStyle = c, t.lineWidth = g * i, t.strokeRect(
441
- Math.round(s.left * i),
442
- Math.round(s.top * i),
443
- Math.round((o.pageWidth - s.left - s.right) * i),
444
- Math.round((o.pageHeight - s.top - s.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)
445
443
  );
446
444
  }
447
445
  if (e.textBorder) {
448
- const c = j(e.textBorder, o);
449
- await V(
446
+ const c = B(e.textBorder, n);
447
+ await $(
450
448
  t,
451
449
  e.textBorder,
452
450
  i,
453
451
  Math.round(c.left * i),
454
452
  Math.round(c.top * i),
455
- Math.round((o.pageWidth - c.left - c.right) * i),
456
- Math.round((o.pageHeight - c.top - c.bottom) * i)
453
+ Math.round((n.pageWidth - c.left - c.right) * i),
454
+ Math.round((n.pageHeight - c.top - c.bottom) * i)
457
455
  );
458
456
  }
459
457
  }
460
458
  async function et(t, e = {}) {
461
- const { imageFormat: a = "JPEG", imageQuality: o = 1, scale: i = 2 } = e, n = M(e), l = N(), r = B(t, n.pageWidth);
462
- r.style.opacity = "1", r.style.left = "-99999px", P(r);
463
- const c = E(r, n);
464
- R(r, c.pageContentPx), F(r, c.pageContentPx), T(r, c.pageContentPx);
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);
465
463
  try {
466
- const g = await W(r, {
464
+ const h = await A(r, {
467
465
  scale: i,
468
466
  backgroundColor: "#ffffff"
469
- }), { jsPDF: s } = await import("jspdf"), h = n.pageWidth - n.margin.left - n.margin.right, f = n.pageHeight - n.margin.top - n.margin.bottom, d = g.width, u = f / h * d, m = Math.ceil(g.height / u), v = n.pageWidth > n.pageHeight ? "l" : "p", w = new s({
470
- 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,
471
469
  unit: "mm",
472
- format: [n.pageWidth, n.pageHeight]
470
+ format: [o.pageWidth, o.pageHeight]
473
471
  });
474
472
  for (let y = 0; y < m; y++) {
475
- const b = Math.min(
473
+ const C = Math.min(
476
474
  u,
477
- g.height - y * u
478
- ), C = document.createElement("canvas");
479
- C.width = d, C.height = b;
480
- const p = C.getContext("2d");
481
- if (!p) throw new Error("Could not get canvas context");
482
- p.fillStyle = "#ffffff", p.fillRect(0, 0, d, b), p.drawImage(
483
- g,
475
+ h.height - y * u
476
+ ), v = document.createElement("canvas");
477
+ v.width = g, v.height = C;
478
+ const w = v.getContext("2d");
479
+ if (!w) throw new Error("Could not get canvas context");
480
+ w.fillStyle = "#ffffff", w.fillRect(0, 0, g, C), w.drawImage(
481
+ h,
484
482
  0,
485
483
  y * u,
486
- d,
487
- b,
484
+ g,
485
+ C,
488
486
  0,
489
487
  0,
490
- d,
491
- b
488
+ g,
489
+ C
492
490
  );
493
- const A = C.toDataURL(
491
+ const E = v.toDataURL(
494
492
  `image/${a.toLowerCase()}`,
495
- o
493
+ n
496
494
  );
497
- y > 0 && w.addPage([n.pageWidth, n.pageHeight], v);
498
- const H = b / d * h;
499
- w.addImage(
500
- A,
495
+ y > 0 && p.addPage([o.pageWidth, o.pageHeight], b);
496
+ const x = C / g * f;
497
+ p.addImage(
498
+ E,
501
499
  a,
502
- n.margin.left,
503
- n.margin.top,
504
- h,
505
- H,
500
+ o.margin.left,
501
+ o.margin.top,
502
+ f,
503
+ x,
506
504
  void 0,
507
- "FAST"
505
+ "SLOW"
508
506
  );
509
507
  }
510
- return e.marginContent && await $(w, e.marginContent, e), w;
508
+ return e.marginContent && await z(p, e.marginContent, e), p;
511
509
  } finally {
512
- r.remove(), l();
510
+ r.remove(), s();
513
511
  }
514
512
  }
515
513
  async function Y(t, e = {}) {
516
- const { imageFormat: a = "PNG", imageQuality: o = 1, scale: i = 2 } = e, n = M(e), l = N(), r = B(t, n.pageWidth);
517
- r.style.opacity = "1", r.style.left = "-99999px", P(r);
518
- const c = E(r, n);
519
- R(r, c.pageContentPx), F(r, c.pageContentPx), T(r, c.pageContentPx);
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);
520
518
  try {
521
- const g = await W(r, {
519
+ const h = await A(r, {
522
520
  scale: i,
523
521
  backgroundColor: "#ffffff"
524
- }), s = n.pageWidth - n.margin.left - n.margin.right, h = n.pageHeight - n.margin.top - n.margin.bottom, f = g.width, d = h / s * f, u = f / s, m = Math.round(n.pageWidth * u), v = Math.round(n.pageHeight * u), w = Math.round(n.margin.top * u), y = Math.round(n.margin.left * u), b = Math.ceil(g.height / d), C = [], { marginContent: p } = e, A = p ? await G(p, n, i) : {};
525
- for (let H = 0; H < b; H++) {
526
- const I = Math.min(
527
- d,
528
- g.height - H * d
529
- ), S = document.createElement("canvas");
530
- S.width = m, S.height = v;
531
- const x = S.getContext("2d");
532
- if (!x) throw new Error("Could not get canvas context");
533
- x.fillStyle = "#ffffff", x.fillRect(0, 0, m, 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(
534
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,
535
533
  0,
536
- H * d,
537
- f,
538
- I,
534
+ x * g,
535
+ d,
536
+ k,
539
537
  y,
540
- w,
541
- f,
542
- I
543
- ), p && await z(
544
- x,
545
538
  p,
546
- A,
547
- n,
539
+ d,
540
+ k
541
+ ), w && await V(
542
+ H,
543
+ w,
544
+ E,
545
+ o,
548
546
  u,
549
- H + 1,
550
- b,
547
+ x + 1,
548
+ C,
551
549
  i
552
- ), C.push(
553
- S.toDataURL(
550
+ ), v.push(
551
+ W.toDataURL(
554
552
  `image/${a.toLowerCase()}`,
555
- o
553
+ n
556
554
  )
557
555
  );
558
556
  }
559
- return C;
557
+ return v;
560
558
  } finally {
561
- r.remove(), l();
559
+ r.remove(), s();
562
560
  }
563
561
  }
564
562
  async function nt(t, e, a = {}) {
565
- const o = M(a), i = await Y(t, a);
563
+ const n = M(a), i = await Y(t, a);
566
564
  e.innerHTML = "", Object.assign(e.style, {
567
565
  direction: "ltr",
568
566
  width: "fit-content",
569
- height: o.pageHeight + "mm",
567
+ height: n.pageHeight + "mm",
570
568
  maxHeight: "100vh",
571
569
  overflowY: "auto",
572
570
  background: "#e0e0e0"
573
571
  });
574
- for (let n = 0; n < i.length; n++) {
575
- const l = document.createElement("img");
576
- l.src = i[n], l.alt = `Page ${n + 1}`, Object.assign(l.style, {
577
- 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",
578
576
  maxWidth: "100%",
579
577
  height: "auto",
580
578
  boxSizing: "border-box",
@@ -582,49 +580,89 @@ async function nt(t, e, a = {}) {
582
580
  border: "1px solid #bbb",
583
581
  boxShadow: "0 2px 8px rgba(0,0,0,0.2)",
584
582
  marginBottom: "16px"
585
- }), e.appendChild(l);
583
+ }), e.appendChild(s);
586
584
  }
587
585
  }
588
- async function $(t, e, a = {}) {
589
- const o = M(a), i = t.getNumberOfPages(), n = 2, l = n * (96 / 25.4), r = Math.round(o.pageWidth * l), c = Math.round(o.pageHeight * l), g = await G(e, o, n);
590
- for (let s = 1; s <= i; s++) {
591
- t.setPage(s);
592
- const h = document.createElement("canvas");
593
- h.width = r, h.height = c;
594
- const f = h.getContext("2d");
595
- f && (await z(
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(
596
641
  f,
597
- e,
598
- g,
599
- o,
600
- l,
601
- s,
602
- i,
603
- n
604
- ), t.addImage(
605
- h.toDataURL("image/png"),
606
642
  "PNG",
607
643
  0,
608
644
  0,
609
- o.pageWidth,
610
- o.pageHeight
611
- ));
645
+ n.pageWidth,
646
+ n.pageHeight,
647
+ "text-border",
648
+ "SLOW"
649
+ );
612
650
  }
613
651
  return t;
614
652
  }
615
653
  export {
616
- _ as PAGE_MARGINS,
617
- q as PAGE_SIZES,
618
- $ as addMarginContent,
619
- E as computeLayout,
620
- B as createPrintClone,
621
- T as insertPageBreakSpacers,
622
- P as normalizeTableAttributes,
654
+ q as PAGE_MARGINS,
655
+ U as PAGE_SIZES,
656
+ z as addMarginContent,
657
+ N as computeLayout,
658
+ P as createPrintClone,
659
+ L as insertPageBreakSpacers,
660
+ F as normalizeTableAttributes,
623
661
  Q as prepare,
624
662
  nt as previewPageImages,
625
663
  tt as renderHTML,
626
664
  et as renderImagePDF,
627
665
  Y as renderPageImages,
628
- R as splitOversizedTables,
629
- F as splitOversizedText
666
+ O as splitOversizedTables,
667
+ I as splitOversizedText
630
668
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jspdf-utils",
3
- "version": "0.1.14",
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",