@progress/kendo-pdfviewer-common 0.2.11 → 0.3.0-dev.202409251137

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.
@@ -1,4 +1,5 @@
1
1
  import Draggable from '@progress/kendo-draggable';
2
+ import { renderPage, currentPage } from './utils';
2
3
  const throttle = function (func, wait, options = {}) {
3
4
  let timeout, context, args, result;
4
5
  let previous = 0;
@@ -81,6 +82,21 @@ export class Scroller {
81
82
  this.state.trackNextElementScroll = true;
82
83
  }
83
84
  };
85
+ this.onDemandScroll = () => {
86
+ const pages = this.options.pages, currentPageIndex = currentPage(this.element.parentElement), page = pages[currentPageIndex], nextPage = pages[currentPageIndex + 1], previousPage = pages[currentPageIndex - 1], pageInfo = page === null || page === void 0 ? void 0 : page._pageInfo, nextPageInfo = nextPage === null || nextPage === void 0 ? void 0 : nextPage._pageInfo, previousPageInfo = previousPage === null || previousPage === void 0 ? void 0 : previousPage._pageInfo, error = (e) => {
87
+ throw new Error(e);
88
+ };
89
+ // Render the current and surrounding pages if they have not been rendered already.
90
+ if (page && !pageInfo.rendered && !pageInfo.renderInProgress) {
91
+ renderPage(page, pageInfo.emptyPage, error);
92
+ }
93
+ if (nextPage && !nextPageInfo.rendered && !nextPageInfo.renderInProgress) {
94
+ renderPage(nextPage, nextPageInfo.emptyPage, error);
95
+ }
96
+ if (previousPage && !previousPageInfo.rendered && !previousPageInfo.renderInProgress) {
97
+ renderPage(previousPage, previousPageInfo.emptyPage, error);
98
+ }
99
+ };
84
100
  this.onDragStart = (e) => {
85
101
  this.state.dragStarted = false;
86
102
  if (!this.shouldTrackPanEvents()) {
@@ -175,6 +191,9 @@ export class Scroller {
175
191
  this.throttledOnElementScroll = this.onElementScroll;
176
192
  }
177
193
  this.element.addEventListener(SCROLL, this.throttledOnElementScroll);
194
+ if (this.options.loadOnDemand) {
195
+ this.element.addEventListener(SCROLL, this.onDemandScroll);
196
+ }
178
197
  }
179
198
  unbindEvents() {
180
199
  this.unbindElementScroll();
@@ -189,6 +208,9 @@ export class Scroller {
189
208
  this.throttledOnElementScroll.cancel();
190
209
  this.throttledOnElementScroll = null;
191
210
  }
211
+ if (this.options.loadOnDemand) {
212
+ this.element.removeEventListener(SCROLL, this.onDemandScroll);
213
+ }
192
214
  this.element.removeEventListener(SCROLL, this.throttledOnElementScroll);
193
215
  }
194
216
  setState(newState) {
package/dist/es/utils.js CHANGED
@@ -84,6 +84,7 @@ export const download = (options, fileName = 'Document', saveOptions = {}, onDow
84
84
  export const loadPDF = (options) => {
85
85
  const params = getDocumentParameters(options);
86
86
  const { dom, zoom, done, error } = options;
87
+ const loadOnDemandPageSize = options.loadOnDemandPageSize || 2;
87
88
  getDocument(params)
88
89
  .promise.then((pdfDoc) => {
89
90
  const pages = [];
@@ -94,7 +95,18 @@ export const loadPDF = (options) => {
94
95
  }).then(({ pages, pdfDoc }) => {
95
96
  Promise.all(pages)
96
97
  .then((all) => all.map((page, i) => {
97
- appendPage(dom, renderPage(page, zoom, error), i);
98
+ const emptyPage = createEmptyPage(page, zoom);
99
+ appendPage(dom, emptyPage.pageElement, i);
100
+ if (options.loadOnDemand) {
101
+ // If LOD is enabled, render the first two(default) or X pages initially.
102
+ if (i < loadOnDemandPageSize) {
103
+ renderPage(page, emptyPage, error);
104
+ }
105
+ }
106
+ else {
107
+ renderPage(page, emptyPage, error);
108
+ }
109
+ page._pageInfo.emptyPage = emptyPage;
98
110
  return page;
99
111
  })).then((pdfPages) => {
100
112
  // required by new PDFJS version
@@ -122,17 +134,39 @@ export const loadPDF = (options) => {
122
134
  * @hidden
123
135
  */
124
136
  export const reloadDocument = (params) => {
125
- const { pdfDoc, zoom, dom, done, error } = params;
137
+ const { pdfDoc, zoom, dom, done, error, loadOnDemand, rootElement } = params;
126
138
  const pages = [];
139
+ let currentPageIndex = 0;
140
+ // Save the index of the current page in view before we reload the document.
141
+ if (loadOnDemand && rootElement) {
142
+ currentPageIndex = currentPage(rootElement);
143
+ }
127
144
  for (let i = 1; i <= pdfDoc.numPages; i++) {
128
145
  pages.push(pdfDoc.getPage(i));
129
146
  }
130
147
  Promise.all(pages)
131
148
  .then((all) => all.map((page, i) => {
132
- appendPage(dom, renderPage(page, zoom, error), i);
149
+ // Set 'rendered' back to false so that the pages can be re-rendered when scrolling.
150
+ page._pageInfo.rendered = false;
151
+ const emptyPage = createEmptyPage(page, zoom);
152
+ appendPage(dom, emptyPage.pageElement, i);
153
+ // If on demand is not enabled, proceed as usual.
154
+ if (!loadOnDemand) {
155
+ renderPage(page, emptyPage, error);
156
+ }
157
+ page._pageInfo.emptyPage = emptyPage;
133
158
  return page;
134
159
  }))
135
- .then(done)
160
+ .then((pdfPages) => {
161
+ /* If on demand is enabled, render the page that was previously in view.
162
+ Then scroll to that page. */
163
+ if (loadOnDemand) {
164
+ const page = pdfPages[currentPageIndex];
165
+ renderPage(page, page._pageInfo.emptyPage, error);
166
+ scrollToPage(rootElement, currentPageIndex);
167
+ }
168
+ done(pdfPages);
169
+ })
136
170
  .catch(error);
137
171
  };
138
172
  /**
@@ -177,6 +211,15 @@ const openPrintDialog = (dom, width, height, done, onError) => {
177
211
  printDialog.addEventListener('afterprint', onAfterPrint);
178
212
  }
179
213
  };
214
+ const createEmptyPage = (page, zoom) => {
215
+ const { canvasContext, viewport, pageElement, styles } = createCanvas(page, zoom, 'k-page');
216
+ return {
217
+ canvasContext,
218
+ viewport,
219
+ pageElement,
220
+ styles
221
+ };
222
+ };
180
223
  const renderCanvas = (page, done, error) => {
181
224
  const { canvasContext, viewport, scaleNum, canvas, pageElement } = createCanvas(page);
182
225
  page.render({ canvasContext, viewport })
@@ -206,8 +249,9 @@ const transforms = {
206
249
  '180': 'rotate(180deg) translate(-100%, -100%)',
207
250
  '270': 'rotate(270deg) translateX(-100%)'
208
251
  };
209
- const renderPage = (page, zoom, error) => {
210
- const { canvasContext, viewport, pageElement, styles } = createCanvas(page, zoom, 'k-page');
252
+ export const renderPage = (page, emptyPage, error) => {
253
+ const { canvasContext, viewport, pageElement, styles } = emptyPage;
254
+ page._pageInfo.renderInProgress = true;
211
255
  page.render({ canvasContext, viewport })
212
256
  .promise.then(() => {
213
257
  page.getTextContent().then((textContent) => {
@@ -232,6 +276,10 @@ const renderPage = (page, zoom, error) => {
232
276
  pageElement.appendChild(textLayer);
233
277
  }).catch(error);
234
278
  });
279
+ })
280
+ .then(() => {
281
+ page._pageInfo.rendered = true;
282
+ page._pageInfo.renderInProgress = false;
235
283
  })
236
284
  .catch(error);
237
285
  return pageElement;
@@ -1,4 +1,5 @@
1
1
  import Draggable from '@progress/kendo-draggable';
2
+ import { renderPage, currentPage } from './utils';
2
3
  const throttle = function (func, wait, options = {}) {
3
4
  let timeout, context, args, result;
4
5
  let previous = 0;
@@ -81,6 +82,21 @@ export class Scroller {
81
82
  this.state.trackNextElementScroll = true;
82
83
  }
83
84
  };
85
+ this.onDemandScroll = () => {
86
+ const pages = this.options.pages, currentPageIndex = currentPage(this.element.parentElement), page = pages[currentPageIndex], nextPage = pages[currentPageIndex + 1], previousPage = pages[currentPageIndex - 1], pageInfo = page === null || page === void 0 ? void 0 : page._pageInfo, nextPageInfo = nextPage === null || nextPage === void 0 ? void 0 : nextPage._pageInfo, previousPageInfo = previousPage === null || previousPage === void 0 ? void 0 : previousPage._pageInfo, error = (e) => {
87
+ throw new Error(e);
88
+ };
89
+ // Render the current and surrounding pages if they have not been rendered already.
90
+ if (page && !pageInfo.rendered && !pageInfo.renderInProgress) {
91
+ renderPage(page, pageInfo.emptyPage, error);
92
+ }
93
+ if (nextPage && !nextPageInfo.rendered && !nextPageInfo.renderInProgress) {
94
+ renderPage(nextPage, nextPageInfo.emptyPage, error);
95
+ }
96
+ if (previousPage && !previousPageInfo.rendered && !previousPageInfo.renderInProgress) {
97
+ renderPage(previousPage, previousPageInfo.emptyPage, error);
98
+ }
99
+ };
84
100
  this.onDragStart = (e) => {
85
101
  this.state.dragStarted = false;
86
102
  if (!this.shouldTrackPanEvents()) {
@@ -175,6 +191,9 @@ export class Scroller {
175
191
  this.throttledOnElementScroll = this.onElementScroll;
176
192
  }
177
193
  this.element.addEventListener(SCROLL, this.throttledOnElementScroll);
194
+ if (this.options.loadOnDemand) {
195
+ this.element.addEventListener(SCROLL, this.onDemandScroll);
196
+ }
178
197
  }
179
198
  unbindEvents() {
180
199
  this.unbindElementScroll();
@@ -189,6 +208,9 @@ export class Scroller {
189
208
  this.throttledOnElementScroll.cancel();
190
209
  this.throttledOnElementScroll = null;
191
210
  }
211
+ if (this.options.loadOnDemand) {
212
+ this.element.removeEventListener(SCROLL, this.onDemandScroll);
213
+ }
192
214
  this.element.removeEventListener(SCROLL, this.throttledOnElementScroll);
193
215
  }
194
216
  setState(newState) {
@@ -84,6 +84,7 @@ export const download = (options, fileName = 'Document', saveOptions = {}, onDow
84
84
  export const loadPDF = (options) => {
85
85
  const params = getDocumentParameters(options);
86
86
  const { dom, zoom, done, error } = options;
87
+ const loadOnDemandPageSize = options.loadOnDemandPageSize || 2;
87
88
  getDocument(params)
88
89
  .promise.then((pdfDoc) => {
89
90
  const pages = [];
@@ -94,7 +95,18 @@ export const loadPDF = (options) => {
94
95
  }).then(({ pages, pdfDoc }) => {
95
96
  Promise.all(pages)
96
97
  .then((all) => all.map((page, i) => {
97
- appendPage(dom, renderPage(page, zoom, error), i);
98
+ const emptyPage = createEmptyPage(page, zoom);
99
+ appendPage(dom, emptyPage.pageElement, i);
100
+ if (options.loadOnDemand) {
101
+ // If LOD is enabled, render the first two(default) or X pages initially.
102
+ if (i < loadOnDemandPageSize) {
103
+ renderPage(page, emptyPage, error);
104
+ }
105
+ }
106
+ else {
107
+ renderPage(page, emptyPage, error);
108
+ }
109
+ page._pageInfo.emptyPage = emptyPage;
98
110
  return page;
99
111
  })).then((pdfPages) => {
100
112
  // required by new PDFJS version
@@ -122,17 +134,39 @@ export const loadPDF = (options) => {
122
134
  * @hidden
123
135
  */
124
136
  export const reloadDocument = (params) => {
125
- const { pdfDoc, zoom, dom, done, error } = params;
137
+ const { pdfDoc, zoom, dom, done, error, loadOnDemand, rootElement } = params;
126
138
  const pages = [];
139
+ let currentPageIndex = 0;
140
+ // Save the index of the current page in view before we reload the document.
141
+ if (loadOnDemand && rootElement) {
142
+ currentPageIndex = currentPage(rootElement);
143
+ }
127
144
  for (let i = 1; i <= pdfDoc.numPages; i++) {
128
145
  pages.push(pdfDoc.getPage(i));
129
146
  }
130
147
  Promise.all(pages)
131
148
  .then((all) => all.map((page, i) => {
132
- appendPage(dom, renderPage(page, zoom, error), i);
149
+ // Set 'rendered' back to false so that the pages can be re-rendered when scrolling.
150
+ page._pageInfo.rendered = false;
151
+ const emptyPage = createEmptyPage(page, zoom);
152
+ appendPage(dom, emptyPage.pageElement, i);
153
+ // If on demand is not enabled, proceed as usual.
154
+ if (!loadOnDemand) {
155
+ renderPage(page, emptyPage, error);
156
+ }
157
+ page._pageInfo.emptyPage = emptyPage;
133
158
  return page;
134
159
  }))
135
- .then(done)
160
+ .then((pdfPages) => {
161
+ /* If on demand is enabled, render the page that was previously in view.
162
+ Then scroll to that page. */
163
+ if (loadOnDemand) {
164
+ const page = pdfPages[currentPageIndex];
165
+ renderPage(page, page._pageInfo.emptyPage, error);
166
+ scrollToPage(rootElement, currentPageIndex);
167
+ }
168
+ done(pdfPages);
169
+ })
136
170
  .catch(error);
137
171
  };
138
172
  /**
@@ -177,6 +211,15 @@ const openPrintDialog = (dom, width, height, done, onError) => {
177
211
  printDialog.addEventListener('afterprint', onAfterPrint);
178
212
  }
179
213
  };
214
+ const createEmptyPage = (page, zoom) => {
215
+ const { canvasContext, viewport, pageElement, styles } = createCanvas(page, zoom, 'k-page');
216
+ return {
217
+ canvasContext,
218
+ viewport,
219
+ pageElement,
220
+ styles
221
+ };
222
+ };
180
223
  const renderCanvas = (page, done, error) => {
181
224
  const { canvasContext, viewport, scaleNum, canvas, pageElement } = createCanvas(page);
182
225
  page.render({ canvasContext, viewport })
@@ -206,8 +249,9 @@ const transforms = {
206
249
  '180': 'rotate(180deg) translate(-100%, -100%)',
207
250
  '270': 'rotate(270deg) translateX(-100%)'
208
251
  };
209
- const renderPage = (page, zoom, error) => {
210
- const { canvasContext, viewport, pageElement, styles } = createCanvas(page, zoom, 'k-page');
252
+ export const renderPage = (page, emptyPage, error) => {
253
+ const { canvasContext, viewport, pageElement, styles } = emptyPage;
254
+ page._pageInfo.renderInProgress = true;
211
255
  page.render({ canvasContext, viewport })
212
256
  .promise.then(() => {
213
257
  page.getTextContent().then((textContent) => {
@@ -232,6 +276,10 @@ const renderPage = (page, zoom, error) => {
232
276
  pageElement.appendChild(textLayer);
233
277
  }).catch(error);
234
278
  });
279
+ })
280
+ .then(() => {
281
+ page._pageInfo.rendered = true;
282
+ page._pageInfo.renderInProgress = false;
235
283
  })
236
284
  .catch(error);
237
285
  return pageElement;
@@ -24,6 +24,7 @@ export declare class Scroller {
24
24
  disablePanEventsTracking(): void;
25
25
  shouldTrackPanEvents(): boolean;
26
26
  onElementScroll: () => void;
27
+ onDemandScroll: () => void;
27
28
  onDragStart: (e: any) => void;
28
29
  onDrag: (e: any) => void;
29
30
  onDragEnd: () => void;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Scroller = void 0;
4
4
  const kendo_draggable_1 = require("@progress/kendo-draggable");
5
+ const utils_1 = require("./utils");
5
6
  const throttle = function (func, wait, options = {}) {
6
7
  let timeout, context, args, result;
7
8
  let previous = 0;
@@ -84,6 +85,21 @@ class Scroller {
84
85
  this.state.trackNextElementScroll = true;
85
86
  }
86
87
  };
88
+ this.onDemandScroll = () => {
89
+ const pages = this.options.pages, currentPageIndex = (0, utils_1.currentPage)(this.element.parentElement), page = pages[currentPageIndex], nextPage = pages[currentPageIndex + 1], previousPage = pages[currentPageIndex - 1], pageInfo = page === null || page === void 0 ? void 0 : page._pageInfo, nextPageInfo = nextPage === null || nextPage === void 0 ? void 0 : nextPage._pageInfo, previousPageInfo = previousPage === null || previousPage === void 0 ? void 0 : previousPage._pageInfo, error = (e) => {
90
+ throw new Error(e);
91
+ };
92
+ // Render the current and surrounding pages if they have not been rendered already.
93
+ if (page && !pageInfo.rendered && !pageInfo.renderInProgress) {
94
+ (0, utils_1.renderPage)(page, pageInfo.emptyPage, error);
95
+ }
96
+ if (nextPage && !nextPageInfo.rendered && !nextPageInfo.renderInProgress) {
97
+ (0, utils_1.renderPage)(nextPage, nextPageInfo.emptyPage, error);
98
+ }
99
+ if (previousPage && !previousPageInfo.rendered && !previousPageInfo.renderInProgress) {
100
+ (0, utils_1.renderPage)(previousPage, previousPageInfo.emptyPage, error);
101
+ }
102
+ };
87
103
  this.onDragStart = (e) => {
88
104
  this.state.dragStarted = false;
89
105
  if (!this.shouldTrackPanEvents()) {
@@ -178,6 +194,9 @@ class Scroller {
178
194
  this.throttledOnElementScroll = this.onElementScroll;
179
195
  }
180
196
  this.element.addEventListener(SCROLL, this.throttledOnElementScroll);
197
+ if (this.options.loadOnDemand) {
198
+ this.element.addEventListener(SCROLL, this.onDemandScroll);
199
+ }
181
200
  }
182
201
  unbindEvents() {
183
202
  this.unbindElementScroll();
@@ -192,6 +211,9 @@ class Scroller {
192
211
  this.throttledOnElementScroll.cancel();
193
212
  this.throttledOnElementScroll = null;
194
213
  }
214
+ if (this.options.loadOnDemand) {
215
+ this.element.removeEventListener(SCROLL, this.onDemandScroll);
216
+ }
195
217
  this.element.removeEventListener(SCROLL, this.throttledOnElementScroll);
196
218
  }
197
219
  setState(newState) {
@@ -21,6 +21,8 @@ export interface PDFReadParameters {
21
21
  data?: string;
22
22
  arrayBuffer?: ArrayBuffer;
23
23
  typedArray?: TypedArray;
24
+ loadOnDemand?: boolean;
25
+ loadOnDemandPageSize?: number;
24
26
  error: ErrorFn;
25
27
  }
26
28
  /**
@@ -38,6 +40,8 @@ export interface PDFReloadParameters {
38
40
  pdfDoc: PDFDocumentProxy;
39
41
  zoom: number;
40
42
  dom: HTMLElement;
43
+ rootElement?: HTMLElement;
44
+ loadOnDemand?: boolean;
41
45
  done: (pdfPages: PDFPageProxy[]) => void;
42
46
  error: ErrorFn;
43
47
  }
@@ -68,6 +72,7 @@ export declare const reloadDocument: (params: PDFReloadParameters) => void;
68
72
  * @hidden
69
73
  */
70
74
  export declare const print: (pages: PDFPageProxy[], done: () => void, error: ErrorFn) => void;
75
+ export declare const renderPage: (page: PDFPageProxy, emptyPage: any, error: ErrorFn) => any;
71
76
  /**
72
77
  * @hidden
73
78
  */
package/dist/npm/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.currentPage = exports.scrollToPage = exports.calculateZoomLevel = exports.goToPreviousSearchMatch = exports.goToNextSearchMatch = exports.print = exports.reloadDocument = exports.loadPDF = exports.download = exports.removeChildren = exports.DEFAULT_ZOOM_LEVEL = void 0;
3
+ exports.currentPage = exports.scrollToPage = exports.calculateZoomLevel = exports.goToPreviousSearchMatch = exports.goToNextSearchMatch = exports.renderPage = exports.print = exports.reloadDocument = exports.loadPDF = exports.download = exports.removeChildren = exports.DEFAULT_ZOOM_LEVEL = void 0;
4
4
  const kendo_file_saver_1 = require("@progress/kendo-file-saver");
5
5
  const kendo_common_1 = require("@progress/kendo-common");
6
6
  const pdf_mjs_1 = require("pdfjs-dist/legacy/build/pdf.mjs");
@@ -89,6 +89,7 @@ exports.download = download;
89
89
  const loadPDF = (options) => {
90
90
  const params = getDocumentParameters(options);
91
91
  const { dom, zoom, done, error } = options;
92
+ const loadOnDemandPageSize = options.loadOnDemandPageSize || 2;
92
93
  (0, pdf_mjs_1.getDocument)(params)
93
94
  .promise.then((pdfDoc) => {
94
95
  const pages = [];
@@ -99,7 +100,18 @@ const loadPDF = (options) => {
99
100
  }).then(({ pages, pdfDoc }) => {
100
101
  Promise.all(pages)
101
102
  .then((all) => all.map((page, i) => {
102
- appendPage(dom, renderPage(page, zoom, error), i);
103
+ const emptyPage = createEmptyPage(page, zoom);
104
+ appendPage(dom, emptyPage.pageElement, i);
105
+ if (options.loadOnDemand) {
106
+ // If LOD is enabled, render the first two(default) or X pages initially.
107
+ if (i < loadOnDemandPageSize) {
108
+ (0, exports.renderPage)(page, emptyPage, error);
109
+ }
110
+ }
111
+ else {
112
+ (0, exports.renderPage)(page, emptyPage, error);
113
+ }
114
+ page._pageInfo.emptyPage = emptyPage;
103
115
  return page;
104
116
  })).then((pdfPages) => {
105
117
  // required by new PDFJS version
@@ -128,17 +140,39 @@ exports.loadPDF = loadPDF;
128
140
  * @hidden
129
141
  */
130
142
  const reloadDocument = (params) => {
131
- const { pdfDoc, zoom, dom, done, error } = params;
143
+ const { pdfDoc, zoom, dom, done, error, loadOnDemand, rootElement } = params;
132
144
  const pages = [];
145
+ let currentPageIndex = 0;
146
+ // Save the index of the current page in view before we reload the document.
147
+ if (loadOnDemand && rootElement) {
148
+ currentPageIndex = (0, exports.currentPage)(rootElement);
149
+ }
133
150
  for (let i = 1; i <= pdfDoc.numPages; i++) {
134
151
  pages.push(pdfDoc.getPage(i));
135
152
  }
136
153
  Promise.all(pages)
137
154
  .then((all) => all.map((page, i) => {
138
- appendPage(dom, renderPage(page, zoom, error), i);
155
+ // Set 'rendered' back to false so that the pages can be re-rendered when scrolling.
156
+ page._pageInfo.rendered = false;
157
+ const emptyPage = createEmptyPage(page, zoom);
158
+ appendPage(dom, emptyPage.pageElement, i);
159
+ // If on demand is not enabled, proceed as usual.
160
+ if (!loadOnDemand) {
161
+ (0, exports.renderPage)(page, emptyPage, error);
162
+ }
163
+ page._pageInfo.emptyPage = emptyPage;
139
164
  return page;
140
165
  }))
141
- .then(done)
166
+ .then((pdfPages) => {
167
+ /* If on demand is enabled, render the page that was previously in view.
168
+ Then scroll to that page. */
169
+ if (loadOnDemand) {
170
+ const page = pdfPages[currentPageIndex];
171
+ (0, exports.renderPage)(page, page._pageInfo.emptyPage, error);
172
+ (0, exports.scrollToPage)(rootElement, currentPageIndex);
173
+ }
174
+ done(pdfPages);
175
+ })
142
176
  .catch(error);
143
177
  };
144
178
  exports.reloadDocument = reloadDocument;
@@ -185,6 +219,15 @@ const openPrintDialog = (dom, width, height, done, onError) => {
185
219
  printDialog.addEventListener('afterprint', onAfterPrint);
186
220
  }
187
221
  };
222
+ const createEmptyPage = (page, zoom) => {
223
+ const { canvasContext, viewport, pageElement, styles } = createCanvas(page, zoom, 'k-page');
224
+ return {
225
+ canvasContext,
226
+ viewport,
227
+ pageElement,
228
+ styles
229
+ };
230
+ };
188
231
  const renderCanvas = (page, done, error) => {
189
232
  const { canvasContext, viewport, scaleNum, canvas, pageElement } = createCanvas(page);
190
233
  page.render({ canvasContext, viewport })
@@ -214,8 +257,9 @@ const transforms = {
214
257
  '180': 'rotate(180deg) translate(-100%, -100%)',
215
258
  '270': 'rotate(270deg) translateX(-100%)'
216
259
  };
217
- const renderPage = (page, zoom, error) => {
218
- const { canvasContext, viewport, pageElement, styles } = createCanvas(page, zoom, 'k-page');
260
+ const renderPage = (page, emptyPage, error) => {
261
+ const { canvasContext, viewport, pageElement, styles } = emptyPage;
262
+ page._pageInfo.renderInProgress = true;
219
263
  page.render({ canvasContext, viewport })
220
264
  .promise.then(() => {
221
265
  page.getTextContent().then((textContent) => {
@@ -240,10 +284,15 @@ const renderPage = (page, zoom, error) => {
240
284
  pageElement.appendChild(textLayer);
241
285
  }).catch(error);
242
286
  });
287
+ })
288
+ .then(() => {
289
+ page._pageInfo.rendered = true;
290
+ page._pageInfo.renderInProgress = false;
243
291
  })
244
292
  .catch(error);
245
293
  return pageElement;
246
294
  };
295
+ exports.renderPage = renderPage;
247
296
  const searchMatchScrollLeftOffset = 0;
248
297
  const searchMatchScrollTopOffset = -64;
249
298
  const scrollToSearchMatch = (matchElement, ref) => {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@progress/kendo-pdfviewer-common",
3
3
  "description": "Kendo UI TypeScript package exporting functions for PDFViewer component",
4
- "version": "0.2.11",
4
+ "version": "0.3.0-dev.202409251137",
5
5
  "keywords": [
6
6
  "Kendo UI"
7
7
  ],