diff --git a/build/pdf-viewer/pdf-viewer.component.js b/build/pdf-viewer/pdf-viewer.component.js index 1d9a70efd..e3d6156cb 100644 --- a/build/pdf-viewer/pdf-viewer.component.js +++ b/build/pdf-viewer/pdf-viewer.component.js @@ -135,7 +135,11 @@ var PdfViewerComponent = (function () { return page.getOperatorList().then(function (opList) { var svgGfx = new PDFJS.SVGGraphics(page.commonObjs, page.objs); return svgGfx.getSVG(opList, viewport).then(function (svg) { - container.appendChild(svg); + var $div = document.createElement('div'); + $div.classList.add('page'); + $div.setAttribute('data-page-number', "" + page.pageNumber); + $div.appendChild(svg); + container.appendChild($div); }); }); }); diff --git a/build/pdf-viewer/pdf-viewer.component.js.map b/build/pdf-viewer/pdf-viewer.component.js.map index 668abf514..233949f6f 100644 --- a/build/pdf-viewer/pdf-viewer.component.js.map +++ b/build/pdf-viewer/pdf-viewer.component.js.map @@ -1 +1 @@ -{"version":3,"sources":["../../src/pdf-viewer/pdf-viewer.component.ts"],"names":[],"mappings":"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","file":"pdf-viewer.component.js","sourceRoot":"","sourcesContent":["/**\n * Created by vadimdez on 21/06/16.\n */\nimport {\n Component, Input, Output, ElementRef, EventEmitter, OnChanges, SimpleChanges\n} from '@angular/core';\nimport 'pdfjs-dist/build/pdf.combined';\n\n\n\nexport class PdfViewerComponent implements OnChanges {\n private _showAll: boolean = false;\n private _renderText: boolean = true;\n private _originalSize: boolean = true;\n private _pdf: PDFDocumentProxy;\n private _page: number = 1;\n private _zoom: number = 1;\n private _rotation: number = 0;\n\n afterLoadComplete = new EventEmitter();\n onError = new EventEmitter();\n\n constructor(private element: ElementRef) {}\n\n \n src: string | Uint8Array | PDFSource;\n\n \n set page(_page) {\n _page = parseInt(_page, 10);\n\n if (this._pdf && !this.isValidPageNumber(_page)) {\n _page = 1;\n }\n\n if (this._page !== _page) {\n this._page = _page;\n this.pageChange.emit(_page);\n }\n }\n\n pageChange: EventEmitter = new EventEmitter(true);\n\n \n set renderText(renderText: boolean) {\n this._renderText = renderText;\n }\n\n \n set originalSize(originalSize: boolean) {\n this._originalSize = originalSize;\n }\n\n \n set showAll(value: boolean) {\n this._showAll = value;\n }\n\n \n set zoom(value: number) {\n if (value <= 0) {\n return;\n }\n\n this._zoom = value;\n }\n\n get zoom() {\n return this._zoom;\n }\n\n \n set rotation(value: number) {\n if (!(typeof value === 'number' && value % 90 === 0)) {\n console.warn('Invalid pages rotation angle.');\n return;\n }\n\n this._rotation = value;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if ('src' in changes) {\n this.loadPDF();\n } else if (this._pdf) {\n this.update();\n }\n }\n\n private loadPDF() {\n if (!this.src) {\n return;\n }\n\n PDFJS.getDocument(this.src)\n .then(pdf => {\n this._pdf = pdf;\n\n this.afterLoadComplete.emit(pdf);\n\n this.update();\n }, (error: any) => {\n this.onError.emit(error);\n });\n }\n\n private update() {\n this.page = this._page;\n\n if (!this._showAll) {\n this.renderPage(this._page);\n } else {\n this.renderMultiplePages();\n }\n }\n\n private renderMultiplePages() {\n let container = this.element.nativeElement.querySelector('div');\n\n this.removeAllChildNodes(container);\n\n // render pages synchronously\n const render = (page: number) => {\n this.renderPage(page).then(() => {\n if (page < this._pdf.numPages) {\n render(page + 1);\n }\n });\n };\n\n render(1);\n }\n\n private isValidPageNumber(page: number) {\n return this._pdf.numPages >= page && page >= 1;\n }\n\n private renderPage(pageNumber: number): PDFPromise {\n return this._pdf.getPage(pageNumber).then( (page: PDFPageProxy) => {\n let viewport = page.getViewport(this._zoom, this._rotation);\n let container = this.element.nativeElement.querySelector('div');\n\n if (!this._originalSize) {\n viewport = page.getViewport(this.element.nativeElement.offsetWidth / viewport.width, this._rotation);\n }\n\n if (!this._showAll) {\n this.removeAllChildNodes(container);\n }\n\n return (page).getOperatorList().then(function (opList) {\n let svgGfx = new (PDFJS).SVGGraphics((page).commonObjs, (page).objs);\n return svgGfx.getSVG(opList, viewport).then(function (svg) {\n container.appendChild(svg);\n });\n });\n });\n }\n\n private removeAllChildNodes(element: HTMLElement) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n selector: 'pdf-viewer',\n template: `
`,\n styles: [`\n.ng2-pdf-viewer--zoom {\n overflow-x: scroll;\n}\n\n:host >>> .ng2-pdf-viewer-container > div {\n position: relative;\n z-index: 0;\n}\n `]\n}, ] },\n];\n/** @nocollapse */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'afterLoadComplete': [{ type: Output, args: ['after-load-complete', ] },],\n'onError': [{ type: Output, args: ['error', ] },],\n'src': [{ type: Input },],\n'page': [{ type: Input },],\n'pageChange': [{ type: Output },],\n'renderText': [{ type: Input, args: ['render-text', ] },],\n'originalSize': [{ type: Input, args: ['original-size', ] },],\n'showAll': [{ type: Input, args: ['show-all', ] },],\n'zoom': [{ type: Input, args: ['zoom', ] },],\n'rotation': [{ type: Input, args: ['rotation', ] },],\n};\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n"]} \ No newline at end of file +{"version":3,"sources":["../../src/pdf-viewer/pdf-viewer.component.ts"],"names":[],"mappings":"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","file":"pdf-viewer.component.js","sourceRoot":"","sourcesContent":["/**\n * Created by vadimdez on 21/06/16.\n */\nimport {\n Component, Input, Output, ElementRef, EventEmitter, OnChanges, SimpleChanges\n} from '@angular/core';\nimport 'pdfjs-dist/build/pdf.combined';\n\n\n\nexport class PdfViewerComponent implements OnChanges {\n private _showAll: boolean = false;\n private _renderText: boolean = true;\n private _originalSize: boolean = true;\n private _pdf: PDFDocumentProxy;\n private _page: number = 1;\n private _zoom: number = 1;\n private _rotation: number = 0;\n\n afterLoadComplete = new EventEmitter();\n onError = new EventEmitter();\n\n constructor(private element: ElementRef) {}\n\n \n src: string | Uint8Array | PDFSource;\n\n \n set page(_page) {\n _page = parseInt(_page, 10);\n\n if (this._pdf && !this.isValidPageNumber(_page)) {\n _page = 1;\n }\n\n if (this._page !== _page) {\n this._page = _page;\n this.pageChange.emit(_page);\n }\n }\n\n pageChange: EventEmitter = new EventEmitter(true);\n\n \n set renderText(renderText: boolean) {\n this._renderText = renderText;\n }\n\n \n set originalSize(originalSize: boolean) {\n this._originalSize = originalSize;\n }\n\n \n set showAll(value: boolean) {\n this._showAll = value;\n }\n\n \n set zoom(value: number) {\n if (value <= 0) {\n return;\n }\n\n this._zoom = value;\n }\n\n get zoom() {\n return this._zoom;\n }\n\n \n set rotation(value: number) {\n if (!(typeof value === 'number' && value % 90 === 0)) {\n console.warn('Invalid pages rotation angle.');\n return;\n }\n\n this._rotation = value;\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if ('src' in changes) {\n this.loadPDF();\n } else if (this._pdf) {\n this.update();\n }\n }\n\n private loadPDF() {\n if (!this.src) {\n return;\n }\n\n PDFJS.getDocument(this.src)\n .then(pdf => {\n this._pdf = pdf;\n\n this.afterLoadComplete.emit(pdf);\n\n this.update();\n }, (error: any) => {\n this.onError.emit(error);\n });\n }\n\n private update() {\n this.page = this._page;\n\n if (!this._showAll) {\n this.renderPage(this._page);\n } else {\n this.renderMultiplePages();\n }\n }\n\n private renderMultiplePages() {\n let container = this.element.nativeElement.querySelector('div');\n\n this.removeAllChildNodes(container);\n\n // render pages synchronously\n const render = (page: number) => {\n this.renderPage(page).then(() => {\n if (page < this._pdf.numPages) {\n render(page + 1);\n }\n });\n };\n\n render(1);\n }\n\n private isValidPageNumber(page: number) {\n return this._pdf.numPages >= page && page >= 1;\n }\n\n private renderPage(pageNumber: number): PDFPromise {\n return this._pdf.getPage(pageNumber).then( (page: PDFPageProxy) => {\n let viewport = page.getViewport(this._zoom, this._rotation);\n let container = this.element.nativeElement.querySelector('div');\n\n if (!this._originalSize) {\n viewport = page.getViewport(this.element.nativeElement.offsetWidth / viewport.width, this._rotation);\n }\n\n if (!this._showAll) {\n this.removeAllChildNodes(container);\n }\n\n return (page).getOperatorList().then(function (opList) {\n let svgGfx = new (PDFJS).SVGGraphics((page).commonObjs, (page).objs);\n\n return svgGfx.getSVG(opList, viewport).then(function (svg) {\n let $div = document.createElement('div');\n\n $div.classList.add('page');\n $div.setAttribute('data-page-number', `${ page.pageNumber }`);\n\n $div.appendChild(svg);\n container.appendChild($div);\n });\n });\n });\n }\n\n private removeAllChildNodes(element: HTMLElement) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n }\nstatic decorators: DecoratorInvocation[] = [\n{ type: Component, args: [{\n selector: 'pdf-viewer',\n template: `
`,\n styles: [`\n.ng2-pdf-viewer--zoom {\n overflow-x: scroll;\n}\n\n:host >>> .ng2-pdf-viewer-container > div {\n position: relative;\n z-index: 0;\n}\n `]\n}, ] },\n];\n/** @nocollapse */\nstatic ctorParameters: () => ({type: any, decorators?: DecoratorInvocation[]}|null)[] = () => [\n{type: ElementRef, },\n];\nstatic propDecorators: {[key: string]: DecoratorInvocation[]} = {\n'afterLoadComplete': [{ type: Output, args: ['after-load-complete', ] },],\n'onError': [{ type: Output, args: ['error', ] },],\n'src': [{ type: Input },],\n'page': [{ type: Input },],\n'pageChange': [{ type: Output },],\n'renderText': [{ type: Input, args: ['render-text', ] },],\n'originalSize': [{ type: Input, args: ['original-size', ] },],\n'showAll': [{ type: Input, args: ['show-all', ] },],\n'zoom': [{ type: Input, args: ['zoom', ] },],\n'rotation': [{ type: Input, args: ['rotation', ] },],\n};\n}\n\ninterface DecoratorInvocation {\n type: Function;\n args?: any[];\n}\n"]} \ No newline at end of file diff --git a/src/pdf-viewer/pdf-viewer.component.ts b/src/pdf-viewer/pdf-viewer.component.ts index 29e13ee74..ccda24b75 100644 --- a/src/pdf-viewer/pdf-viewer.component.ts +++ b/src/pdf-viewer/pdf-viewer.component.ts @@ -163,8 +163,15 @@ export class PdfViewerComponent implements OnChanges { return (page).getOperatorList().then(function (opList) { let svgGfx = new (PDFJS).SVGGraphics((page).commonObjs, (page).objs); + return svgGfx.getSVG(opList, viewport).then(function (svg) { - container.appendChild(svg); + let $div = document.createElement('div'); + + $div.classList.add('page'); + $div.setAttribute('data-page-number', `${ page.pageNumber }`); + + $div.appendChild(svg); + container.appendChild($div); }); }); });