@libresign/pdf-elements 0.1.0

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.
@@ -0,0 +1,87 @@
1
+ <!--
2
+ SPDX-FileCopyrightText: 2026 LibreCode coop and contributors
3
+ SPDX-License-Identifier: AGPL-3.0-or-later
4
+ -->
5
+
6
+ <template>
7
+ <canvas ref="canvas" />
8
+ </template>
9
+
10
+ <script>
11
+ export default {
12
+ name: 'PDFPage',
13
+ props: {
14
+ page: {
15
+ type: Promise,
16
+ required: true,
17
+ },
18
+ scale: {
19
+ type: Number,
20
+ default: 1,
21
+ },
22
+ },
23
+ data() {
24
+ return {
25
+ dynamicScale: this.scale,
26
+ isRendering: false,
27
+ boundMeasure: null,
28
+ }
29
+ },
30
+ watch: {
31
+ scale(newScale) {
32
+ this.dynamicScale = newScale
33
+ this.render()
34
+ },
35
+ },
36
+ mounted() {
37
+ this.boundMeasure = this.measure.bind(this)
38
+ window.addEventListener('resize', this.boundMeasure)
39
+ this.render()
40
+ },
41
+ beforeUnmount() {
42
+ if (this.boundMeasure) {
43
+ window.removeEventListener('resize', this.boundMeasure)
44
+ }
45
+ },
46
+ methods: {
47
+ getCanvasMeasurement() {
48
+ return {
49
+ canvasWidth: this.$refs.canvas.width,
50
+ canvasHeight: this.$refs.canvas.height,
51
+ }
52
+ },
53
+ measure() {
54
+ this.$emit('onMeasure', {
55
+ scale: this.dynamicScale,
56
+ })
57
+ },
58
+ async render() {
59
+ if (this.isRendering) return
60
+ this.isRendering = true
61
+ try {
62
+ const _page = await this.page
63
+ const canvas = this.$refs.canvas
64
+ const context = canvas.getContext('2d')
65
+ const viewport = _page.getViewport({
66
+ scale: this.dynamicScale,
67
+ })
68
+ canvas.width = viewport.width
69
+ canvas.height = viewport.height
70
+ await _page.render({
71
+ canvasContext: context,
72
+ viewport,
73
+ }).promise
74
+ this.measure()
75
+ } finally {
76
+ this.isRendering = false
77
+ }
78
+ },
79
+ },
80
+ }
81
+ </script>
82
+
83
+ <style scoped>
84
+ canvas {
85
+ display: block;
86
+ }
87
+ </style>
package/src/index.js ADDED
@@ -0,0 +1,16 @@
1
+ // SPDX-FileCopyrightText: 2026 LibreCode coop and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ import PDFElements from './components/PDFElements.vue'
5
+
6
+ PDFElements.install = function(Vue) {
7
+ if (PDFElements.install.installed) return
8
+ Vue.component(PDFElements.name, PDFElements)
9
+ }
10
+
11
+ if (typeof window !== 'undefined' && window.Vue) {
12
+ PDFElements.install(window.Vue)
13
+ }
14
+
15
+ export default PDFElements
16
+ export { PDFElements }
@@ -0,0 +1,20 @@
1
+ // SPDX-FileCopyrightText: 2026 LibreCode coop and contributors
2
+ // SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ import { getDocument, GlobalWorkerOptions } from 'pdfjs-dist'
5
+ import pdfWorkerCode from 'pdfjs-dist/build/pdf.worker.min.mjs'
6
+
7
+ GlobalWorkerOptions.workerSrc = pdfWorkerCode
8
+
9
+ export function readAsArrayBuffer(file) {
10
+ return new Promise((resolve, reject) => {
11
+ const reader = new FileReader()
12
+ reader.onload = () => resolve(reader.result)
13
+ reader.onerror = reject
14
+ reader.readAsArrayBuffer(file)
15
+ })
16
+ }
17
+
18
+ export function readAsPDF(file) {
19
+ return getDocument(file).promise
20
+ }