diff --git a/examples/App.vue b/examples/App.vue index cce84eb..c27db7e 100644 --- a/examples/App.vue +++ b/examples/App.vue @@ -11,6 +11,7 @@ :show-customize-editor-add-draw="true" :show-line-size-select = 'true' :show-font-size-select= 'true' + :show-pagination="true" :show-font-select="true" :show-rename="true" :show-save-btn="true" @@ -24,6 +25,13 @@ :seal-image-hidden-on-save="false" @onSave2Upload="save2Upload" > + diff --git a/src/Components/PDFPage.vue b/src/Components/PDFPage.vue index 307a847..4aeb379 100644 --- a/src/Components/PDFPage.vue +++ b/src/Components/PDFPage.vue @@ -24,6 +24,9 @@ export default { } }, watch: { + page(){ + this.render() + }, scale(newScale) { this.dynamicScale = newScale // Monitor changes in the scale attribute and update dynamic scaling this.render() @@ -46,6 +49,9 @@ export default { }, async render() { const _page = await this.page + + if(typeof _page ==='undefined') return + const canvas = this.$refs.canvas const context = canvas.getContext('2d') const viewport = _page.getViewport({ diff --git a/src/Components/Pagination.vue b/src/Components/Pagination.vue new file mode 100644 index 0000000..f8207a7 --- /dev/null +++ b/src/Components/Pagination.vue @@ -0,0 +1,47 @@ + + + \ No newline at end of file diff --git a/src/VuePdfEditor.vue b/src/VuePdfEditor.vue index 70d9cde..57e92ad 100644 --- a/src/VuePdfEditor.vue +++ b/src/VuePdfEditor.vue @@ -12,6 +12,7 @@ type="file" name="pdf" class="hidden" + accept="application/pdf" @change="onUploadPDF"> {{ saving ? 'saving' : 'keep' }} + + + + +
-
+
+ style="text-align: center">
- + + :data-key="currentPage" + :page="pages[currentPage]" + @onMeasure="onMeasure($event, currentPage)" />
-
+ :style="{transform: `scale(${pagesScale[currentPage]})`}"> +
@@ -140,7 +143,7 @@ :height="object.height" :origin-width="object.originWidth" :origin-height="object.originHeight" - :page-scale="pagesScale[pIndex]" + :page-scale="pagesScale[currentPage]" @onUpdate="updateObject(object.id, $event)" @onDelete="deleteObject(object.id)" />
@@ -156,7 +159,7 @@ :line-height="object.lineHeight" :font-family="object.fontFamily" :current-page="object.currentPage" - :page-scale="pagesScale[pIndex]" + :page-scale="pagesScale[currentPage]" @onUpdate="updateObject(object.id, $event)" @onDelete="deleteObject(object.id)" @onSelectFont="selectFontFamily" /> @@ -168,7 +171,7 @@ :width="object.width" :origin-width="object.originWidth" :origin-height="object.originHeight" - :page-scale="pagesScale[pIndex]" + :page-scale="pagesScale[currentPage]" @onUpdate="updateObject(object.id, $event)" @onDelete="deleteObject(object.id)" />
@@ -193,6 +196,7 @@ import { fetchFont } from './utils/prepareAssets.js' import PDFPage from './Components/PDFPage.vue' +import Pagination from './Components/Pagination.vue' import ImageItem from './Components/Image.vue' import TextItem from './Components/TextItem.vue' import Drawing from './Components/Drawing.vue' @@ -216,6 +220,7 @@ export default { TextIcon, GestureIcon, PencilIcon, + Pagination, }, props: { msg: String, @@ -227,6 +232,10 @@ export default { type: String, default: '100%', }, + showPagination:{ + type: Boolean, + default: false + }, showChooseFileBtn: { type: Boolean, default: false, @@ -323,6 +332,7 @@ export default { numPages: null, pdfDocument: null, pages: [], + currentPage: 0, pagesScale: [], allObjects: [], currentFont: 'Courier', @@ -375,7 +385,7 @@ export default { } try { await this.addPDF(this.initFileSrc) - this.selectedPageIndex = 0 + this.currentPage = 0 fetchFont(this.currentFont) this.narrowEnlargeShow = true this.initTextField() @@ -390,17 +400,17 @@ export default { } }, initTextField() { - if (this.selectedPageIndex < 0 || this.initTextFields === null || this.initTextFields.length === 0) { + if (this.currentPage < 0 || this.initTextFields === null || this.initTextFields.length === 0) { return } for (let i = 0; i < this.pages.length; i++) { - this.selectedPageIndex = i + this.currentPage = i for (let j = 0; j < this.initTextFields.length; j++) { const text = this.initTextFields[j] - this.addTextField(text, 0, j * 60, this.selectedPageIndex) + this.addTextField(text, 0, j * 60, this.currentPage) } } - this.selectedPageIndex = 0 + this.currentPage = 0 const checker = setInterval(() => { if (this.$refs.textItem.length === this.initTextFields.length * this.pages.length) { document.getElementById('pdfBody').dispatchEvent(new MouseEvent('mousedown', { @@ -414,11 +424,11 @@ export default { }, async initImages() { - if (this.selectedPageIndex < 0) { + if (this.currentPage < 0) { return } for (let i = 0; i < this.pages.length; i++) { - this.selectedPageIndex = i + this.currentPage = i let y = 0 if (this.initImageUrls !== null && this.initImageUrls.length !== 0) { // Need to initialize pictures @@ -437,7 +447,7 @@ export default { await this.addImage(await res.blob(), 0, (y + 1) * 100, 0.4, true) } } - this.selectedPageIndex = 0 + this.currentPage = 0 }, onFinishDrawingCanvas(e) { @@ -462,11 +472,11 @@ export default { const files = e.target.files || (e.dataTransfer && e.dataTransfer.files) const file = files[0] if (!file || file.type !== 'application/pdf') return - this.selectedPageIndex = -1 + this.currentPage = -1 try { await this.addPDF(file) this.narrowEnlargeShow = true - this.selectedPageIndex = 0 + this.currentPage = 0 } catch (e) { console.log(e) } @@ -516,7 +526,7 @@ export default { }, async onUploadImage(e) { const file = e.target.files[0] - if (file && this.selectedPageIndex >= 0) { + if (file && this.currentPage >= 0) { await this.addImage(file) } e.target.value = null @@ -536,7 +546,7 @@ export default { const { canvasWidth, canvasHeight } = this.$refs[ - `page${this.selectedPageIndex}` + `page${this.currentPage}` ][0].getCanvasMeasurement() const object = { @@ -560,12 +570,12 @@ export default { } }, onAddTextField() { - if (this.selectedPageIndex >= 0) { + if (this.currentPage >= 0) { this.addTextField() } }, - addTextField(text = 'Please enter here', x = 0, y = 0, currentPage = this.selectedPageIndex) { + addTextField(text = 'Please enter here', x = 0, y = 0, currentPage = this.currentPage) { const id = this.genID() fetchFont(this.currentFont) const object = { @@ -584,7 +594,7 @@ export default { }, onAddDrawing() { - if (this.selectedPageIndex >= 0) { + if (this.currentPage >= 0) { this.addingDrawing = true } }, @@ -607,7 +617,7 @@ export default { addObject(object) { this.allObjects = this.allObjects.map((objects, pIndex) => - pIndex === this.selectedPageIndex ? [...objects, object] : objects, + pIndex === this.currentPage ? [...objects, object] : objects, ) }, @@ -617,13 +627,9 @@ export default { this.currentFont = name }, - selectPage(index) { - this.selectedPageIndex = index - }, - updateObject(objectId, payload) { this.allObjects = this.allObjects.map((objects, pIndex) => - pIndex === (payload.currentPage !== undefined ? payload.currentPage : this.selectedPageIndex) + pIndex === (payload.currentPage !== undefined ? payload.currentPage : this.currentPage) ? objects.map(object => object.id === objectId ? { ...object, ...payload } : object, ) @@ -633,7 +639,7 @@ export default { deleteObject(objectId) { this.allObjects = this.allObjects.map((objects, pIndex) => - pIndex === this.selectedPageIndex + pIndex === this.currentPage ? objects.filter(object => object.id !== objectId) : objects, ) @@ -680,7 +686,10 @@ export default { this.saving = false } }, - }, + onPageChange(page){ + this.currentPage = page + } + } }