@react-pdf-kit/viewer 2.0.1-rc.2 → 2.0.1-rc.4
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
CHANGED
|
@@ -36,10 +36,6 @@
|
|
|
36
36
|
|
|
37
37
|
As developers ourselves, we faced many issues such as browser incompatibility and customizability while trying to render a PDF document or working with PDF libraries. Having faced issues using PDF libraries, we want the solution to be flexible for React.js developers and teams. More importantly, the technical document must be easy to use!
|
|
38
38
|
|
|
39
|
-
# 📜 Background
|
|
40
|
-
|
|
41
|
-
As developers ourselves, we faced many issues such as browser incompatibility and customizability while trying to render a PDF document or working with PDF libraries. Having faced issues using PDF libraries, we want the solution to be flexible for React.js developers and teams. More importantly, the technical document must be easy to use!
|
|
42
|
-
|
|
43
39
|
# :sparkles: Features
|
|
44
40
|
|
|
45
41
|
- 🎯 **Interactive & Immersive Viewing Experience** with features like rotation, zoom, and keyboard navigation.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState as E, useCallback as h, useEffect as A } from "react";
|
|
2
2
|
import { appConsole as l } from "../appConsole.js";
|
|
3
|
-
const b = /* @__PURE__ */ new Date("2026-02-
|
|
3
|
+
const b = /* @__PURE__ */ new Date("2026-02-26T06:29:55.254Z"), d = "Please visit https://www.react-pdf.dev/manage-license/ to generate a new license key.", s = {
|
|
4
4
|
invalidLicense: `You are currently using without a valid license. ${d}`,
|
|
5
5
|
mismatchedDomain: `Your license key is not valid for the current domain / IP. ${d}`,
|
|
6
6
|
expired: `Your license key has expired. ${d}`,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
import { useDocumentContext as
|
|
3
|
-
import { PixelsPerInch as
|
|
1
|
+
import { useState as g, useRef as k, useEffect as D, useCallback as P } from "react";
|
|
2
|
+
import { useDocumentContext as q } from "../../contexts/RPDocumentContext.js";
|
|
3
|
+
import { PixelsPerInch as V, AnnotationMode as O, RenderingCancelledException as U } from "pdfjs-dist";
|
|
4
4
|
import "react/jsx-runtime";
|
|
5
5
|
import "./useLoadPdf.js";
|
|
6
6
|
import "../types.js";
|
|
@@ -13,82 +13,82 @@ import "./usePdfProperties.js";
|
|
|
13
13
|
import "../convertPdfDate.js";
|
|
14
14
|
import "../formatFileSize.js";
|
|
15
15
|
const re = () => {
|
|
16
|
-
const { pdf:
|
|
16
|
+
const { pdf: l, pages: f } = q(), [R, E] = g({
|
|
17
17
|
loadedPages: 0,
|
|
18
18
|
totalPages: 0,
|
|
19
19
|
percentage: 0
|
|
20
|
-
}), [T, y] =
|
|
20
|
+
}), [T, y] = g(!1), [A, b] = g(!1), [Z, C] = g(null), [M, w] = g(void 0), i = k(!1);
|
|
21
21
|
D(() => {
|
|
22
|
-
|
|
23
|
-
}, [
|
|
24
|
-
const S =
|
|
22
|
+
i.current;
|
|
23
|
+
}, [i]);
|
|
24
|
+
const S = P(() => {
|
|
25
25
|
document.documentElement.classList.remove("rp-print-html-printing"), document.body.classList.remove("rp-print-body-printing");
|
|
26
26
|
const e = document.querySelector(".rp-print-zone");
|
|
27
27
|
e && e.remove();
|
|
28
|
-
}, []),
|
|
29
|
-
|
|
28
|
+
}, []), s = P(() => {
|
|
29
|
+
i.current = !1, y(!1), b(!1), C(null), w(void 0), E({
|
|
30
30
|
loadedPages: 0,
|
|
31
31
|
totalPages: 0,
|
|
32
32
|
percentage: 0
|
|
33
33
|
});
|
|
34
34
|
}, []), F = () => {
|
|
35
|
-
|
|
35
|
+
i.current = !0;
|
|
36
36
|
}, I = async ({
|
|
37
37
|
scratchCanvas: e,
|
|
38
38
|
pdfDocument: n,
|
|
39
39
|
pageNumber: t,
|
|
40
40
|
viewerPdfPage: r,
|
|
41
|
-
printResolution:
|
|
42
|
-
optionalContentConfigPromise:
|
|
43
|
-
printAnnotationStoragePromise:
|
|
41
|
+
printResolution: o,
|
|
42
|
+
optionalContentConfigPromise: c,
|
|
43
|
+
printAnnotationStoragePromise: u
|
|
44
44
|
}) => {
|
|
45
|
-
if (
|
|
46
|
-
|
|
45
|
+
if (i.current) {
|
|
46
|
+
s();
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
-
const a =
|
|
49
|
+
const a = o / V.PDF;
|
|
50
50
|
e.width = Math.floor(r.width * a), e.height = Math.floor(r.height * a);
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
const [
|
|
51
|
+
const p = e.getContext("2d");
|
|
52
|
+
p.save(), p.fillStyle = "rgb(255, 255, 255)", p.fillRect(0, 0, e.width, e.height), p.restore();
|
|
53
|
+
const [m, h] = await Promise.all([
|
|
54
54
|
n.getPage(t),
|
|
55
|
-
|
|
55
|
+
u
|
|
56
56
|
]);
|
|
57
|
-
if (
|
|
58
|
-
|
|
57
|
+
if (i.current) {
|
|
58
|
+
s();
|
|
59
59
|
return;
|
|
60
60
|
}
|
|
61
61
|
const v = {
|
|
62
62
|
canvas: e,
|
|
63
|
-
canvasContext:
|
|
63
|
+
canvasContext: p,
|
|
64
64
|
transform: [a, 0, 0, a, 0, 0],
|
|
65
|
-
viewport:
|
|
65
|
+
viewport: m.getViewport({ scale: 1, rotation: r.rotation }),
|
|
66
66
|
intent: "print",
|
|
67
67
|
annotationMode: O.ENABLE_STORAGE,
|
|
68
|
-
optionalContentConfigPromise:
|
|
68
|
+
optionalContentConfigPromise: c,
|
|
69
69
|
printAnnotationStorage: h
|
|
70
70
|
};
|
|
71
71
|
try {
|
|
72
|
-
return
|
|
72
|
+
return m.render(v).promise;
|
|
73
73
|
} catch (d) {
|
|
74
74
|
throw d instanceof U || console.error(d), d;
|
|
75
75
|
}
|
|
76
|
-
}, L =
|
|
76
|
+
}, L = P(() => {
|
|
77
77
|
const e = window.print;
|
|
78
78
|
return new Promise((n) => {
|
|
79
|
-
const t = (
|
|
79
|
+
const t = (c) => {
|
|
80
80
|
setTimeout(() => {
|
|
81
|
-
e.call(window), setTimeout(() =>
|
|
81
|
+
e.call(window), setTimeout(() => c(), 20);
|
|
82
82
|
}, 0);
|
|
83
83
|
};
|
|
84
84
|
if (document.querySelector(".rp-print-zone")) {
|
|
85
85
|
t(n);
|
|
86
86
|
return;
|
|
87
87
|
}
|
|
88
|
-
const
|
|
89
|
-
document.querySelector(".rp-print-zone") && (t(n),
|
|
88
|
+
const o = new MutationObserver(() => {
|
|
89
|
+
document.querySelector(".rp-print-zone") && (t(n), o.disconnect());
|
|
90
90
|
});
|
|
91
|
-
|
|
91
|
+
o.observe(document.body, { childList: !0, subtree: !0 });
|
|
92
92
|
});
|
|
93
93
|
}, []), z = (e) => {
|
|
94
94
|
const n = document.createElement("img"), t = document.createElement("div");
|
|
@@ -96,70 +96,74 @@ const re = () => {
|
|
|
96
96
|
}, x = (e, n) => {
|
|
97
97
|
const t = document.createElement("div");
|
|
98
98
|
t.classList.add("rp-print-zone");
|
|
99
|
-
const r = document.createElement("style");
|
|
100
|
-
|
|
101
|
-
|
|
99
|
+
const r = document.createElement("style"), o = n.get(1);
|
|
100
|
+
if (o) {
|
|
101
|
+
const c = o.page.getViewport({ scale: 1 }), { width: u, height: a } = c;
|
|
102
|
+
r.innerHTML = `@page { size: ${u}pt ${a}pt; margin: 0; }`;
|
|
103
|
+
}
|
|
104
|
+
return t.appendChild(r), t.append(...e), t;
|
|
105
|
+
}, N = P(
|
|
102
106
|
async (e) => {
|
|
103
|
-
if (!
|
|
107
|
+
if (!l)
|
|
104
108
|
return;
|
|
105
|
-
|
|
109
|
+
s();
|
|
106
110
|
const n = e && "visibleDefaultProgress" in e ? e : void 0;
|
|
107
|
-
(n == null ? void 0 : n.visibleDefaultProgress) !== void 0 ?
|
|
111
|
+
(n == null ? void 0 : n.visibleDefaultProgress) !== void 0 ? w(n.visibleDefaultProgress) : w(!0);
|
|
108
112
|
const t = document.createElement("canvas"), r = [];
|
|
109
113
|
try {
|
|
110
|
-
|
|
111
|
-
const
|
|
112
|
-
|
|
114
|
+
l.isPureXfa && console.warn("[rp] XFA Form is not supported at the moment.");
|
|
115
|
+
const c = l.getOptionalContentConfig({ intent: "print" }), u = Promise.resolve(
|
|
116
|
+
l.annotationStorage.print ?? void 0
|
|
113
117
|
), a = f.size;
|
|
114
|
-
for (const [
|
|
115
|
-
if (
|
|
116
|
-
|
|
118
|
+
for (const [m, h] of f) {
|
|
119
|
+
if (i.current) {
|
|
120
|
+
s();
|
|
117
121
|
return;
|
|
118
122
|
}
|
|
119
123
|
const v = h.page.getViewport({ scale: 1 });
|
|
120
124
|
if (await I({
|
|
121
125
|
scratchCanvas: t,
|
|
122
|
-
pdfDocument:
|
|
123
|
-
pageNumber:
|
|
126
|
+
pdfDocument: l,
|
|
127
|
+
pageNumber: m,
|
|
124
128
|
viewerPdfPage: v,
|
|
125
129
|
printResolution: 150,
|
|
126
|
-
optionalContentConfigPromise:
|
|
127
|
-
printAnnotationStoragePromise:
|
|
128
|
-
}),
|
|
129
|
-
|
|
130
|
+
optionalContentConfigPromise: c,
|
|
131
|
+
printAnnotationStoragePromise: u
|
|
132
|
+
}), i.current) {
|
|
133
|
+
s();
|
|
130
134
|
return;
|
|
131
135
|
}
|
|
132
136
|
const d = z(t);
|
|
133
137
|
r.push(d);
|
|
134
|
-
const
|
|
138
|
+
const X = parseFloat((r.length / a * 100).toFixed(2));
|
|
135
139
|
E({
|
|
136
|
-
loadedPages:
|
|
140
|
+
loadedPages: m,
|
|
137
141
|
totalPages: a,
|
|
138
|
-
percentage:
|
|
142
|
+
percentage: X
|
|
139
143
|
});
|
|
140
144
|
}
|
|
141
|
-
if (
|
|
142
|
-
|
|
145
|
+
if (i.current) {
|
|
146
|
+
s();
|
|
143
147
|
return;
|
|
144
148
|
}
|
|
145
|
-
const
|
|
146
|
-
document.body.appendChild(
|
|
147
|
-
} catch (
|
|
148
|
-
b(!0),
|
|
149
|
+
const p = x(r, f);
|
|
150
|
+
document.body.appendChild(p), document.documentElement.classList.add("rp-print-html-printing"), document.body.classList.add("rp-print-body-printing"), y(!0), await L();
|
|
151
|
+
} catch (o) {
|
|
152
|
+
b(!0), o instanceof Error && C(o);
|
|
149
153
|
} finally {
|
|
150
154
|
t.height = 0, t.width = 0;
|
|
151
155
|
}
|
|
152
156
|
},
|
|
153
|
-
[
|
|
157
|
+
[l, f, i, s, x, L]
|
|
154
158
|
);
|
|
155
159
|
return D(() => {
|
|
156
160
|
const e = () => {
|
|
157
|
-
|
|
161
|
+
s(), S();
|
|
158
162
|
};
|
|
159
163
|
return window.addEventListener("afterprint", e, !0), () => {
|
|
160
164
|
window.removeEventListener("afterprint", e, !0);
|
|
161
165
|
};
|
|
162
|
-
}, [S,
|
|
166
|
+
}, [S, s]), {
|
|
163
167
|
print: N,
|
|
164
168
|
cancel: F,
|
|
165
169
|
progress: R,
|
|
@@ -12,7 +12,7 @@ function e() {
|
|
|
12
12
|
.rp-print-zone { display: block; height: 100%; }
|
|
13
13
|
.rp-print-page { display: flex; align-items: center; flex-direction: column; justify-content: center; height: 100%; width: 100%; page-break-after: always; page-break-inside: avoid; }
|
|
14
14
|
.rp-print-page:last-child { page-break-after: auto; }
|
|
15
|
-
.rp-print-page img, .rp-print-page canvas { display: block;
|
|
15
|
+
.rp-print-page img, .rp-print-page canvas { display: block; max-width: 100%; max-height: 100%; direction: ltr; }
|
|
16
16
|
}
|
|
17
17
|
`, document.head.appendChild(t);
|
|
18
18
|
}
|