UNPKG

ngx-export-as

Version:

[![npm version](https://badge.fury.io/js/ngx-export-as.svg)](https://badge.fury.io/js/ngx-export-as)

1 lines 22.4 kB
{"version":3,"file":"ngx-export-as.mjs","sources":["../../../projects/ngx-export-as/src/lib/export-as.service.ts","../../../projects/ngx-export-as/src/lib/export-as.module.ts","../../../projects/ngx-export-as/src/public_api.ts","../../../projects/ngx-export-as/src/ngx-export-as.ts"],"sourcesContent":["import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\n\r\nimport { ExportAsConfig } from './export-as-config.model';\r\n\r\nimport html2canvas from 'html2canvas';\r\nimport * as XLSX from 'xlsx';\r\n// import HTMLtoDOCX from 'html-to-docx';\r\nimport html2pdf from 'html2pdf.js';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n@Injectable()\r\nexport class ExportAsService {\r\n\r\n constructor(\r\n @Inject(PLATFORM_ID) private platformId: Object\r\n ) {\r\n if (isPlatformBrowser(this.platformId)) {\r\n window['html2canvas'] = html2canvas;\r\n }\r\n }\r\n\r\n /**\r\n * Main base64 get method, it will return the file as base64 string\r\n * @param config your config\r\n */\r\n get(config: ExportAsConfig): Observable<string | null> {\r\n // structure method name dynamically by type\r\n const func = 'get' + config.type.toUpperCase();\r\n // if type supported execute and return\r\n if (this[func]) {\r\n return this[func](config);\r\n }\r\n\r\n // throw error for unsupported formats\r\n return new Observable((observer) => { observer.error('Export type is not supported.'); });\r\n }\r\n\r\n /**\r\n * Save exported file in old javascript way\r\n * @param config your custom config\r\n * @param fileName Name of the file to be saved as\r\n */\r\n save(config: ExportAsConfig, fileName: string): Observable<string | null> {\r\n // set download\r\n config.download = true;\r\n // get file name with type\r\n config.fileName = fileName + '.' + config.type;\r\n return this.get(config);\r\n }\r\n\r\n /**\r\n * Converts content string to blob object\r\n * @param content string to be converted\r\n */\r\n contentToBlob(content: string): Observable<Blob> {\r\n return new Observable((observer) => {\r\n // get content string and extract mime type\r\n const arr = content.split(','), mime = arr[0].match(/:(.*?);/)[1],\r\n bstr = atob(arr[1]);\r\n let n = bstr.length;\r\n const u8arr = new Uint8Array(n);\r\n while (n--) {\r\n u8arr[n] = bstr.charCodeAt(n);\r\n }\r\n observer.next(new Blob([u8arr], { type: mime }));\r\n observer.complete();\r\n });\r\n }\r\n\r\n /**\r\n * Removes base64 file type from a string like \"data:text/csv;base64,\"\r\n * @param fileContent the base64 string to remove the type from\r\n */\r\n removeFileTypeFromBase64(fileContent: string): string {\r\n const re = /^data:[^]*;base64,/g;\r\n const newContent: string = re[Symbol.replace](fileContent, '');\r\n return newContent;\r\n }\r\n\r\n /**\r\n * Structure the base64 file content with the file type string\r\n * @param fileContent file content\r\n * @param fileMime file mime type \"text/csv\"\r\n */\r\n addFileTypeToBase64(fileContent: string, fileMime: string): string {\r\n return `data:${fileMime};base64,${fileContent}`;\r\n }\r\n\r\n /**\r\n * create downloadable file from dataURL\r\n * @param fileName downloadable file name\r\n * @param dataURL file content as dataURL\r\n */\r\n downloadFromDataURL(fileName: string, dataURL: string): void {\r\n // create blob\r\n this.contentToBlob(dataURL).subscribe(blob => {\r\n // download the blob\r\n this.downloadFromBlob(blob, fileName);\r\n });\r\n }\r\n\r\n /**\r\n * Downloads the blob object as a file\r\n * @param blob file object as blob\r\n * @param fileName downloadable file name\r\n */\r\n downloadFromBlob(blob: Blob, fileName: string) {\r\n // get object url\r\n const url = window.URL.createObjectURL(blob);\r\n // check for microsoft internet explorer\r\n if (window.navigator && window.navigator['msSaveOrOpenBlob']) {\r\n // use IE download or open if the user using IE\r\n window.navigator['msSaveOrOpenBlob'](blob, fileName);\r\n } else {\r\n this.saveFile(fileName, url);\r\n }\r\n }\r\n\r\n private saveFile(fileName: string, url: string) {\r\n // if not using IE then create link element\r\n const element = document.createElement('a');\r\n // set download attr with file name\r\n element.setAttribute('download', fileName);\r\n // set the element as hidden\r\n element.style.display = 'none';\r\n // append the body\r\n document.body.appendChild(element);\r\n // set href attr\r\n element.href = url;\r\n // click on it to start downloading\r\n element.click();\r\n // remove the link from the dom\r\n document.body.removeChild(element);\r\n }\r\n\r\n private getPDF(config: ExportAsConfig): Observable<string | null> {\r\n return new Observable((observer) => {\r\n if (!config.options) {\r\n config.options = {};\r\n }\r\n config.options.filename = config.fileName;\r\n const element: HTMLElement = document.getElementById(config.elementIdOrContent);\r\n const pdf = html2pdf().set(config.options).from(element ? element : config.elementIdOrContent);\r\n\r\n const download = config.download;\r\n const pdfCallbackFn = config.options.pdfCallbackFn;\r\n if (download) {\r\n if (pdfCallbackFn) {\r\n this.applyPdfCallbackFn(pdf, pdfCallbackFn).save();\r\n } else {\r\n pdf.save();\r\n }\r\n observer.next();\r\n observer.complete();\r\n } else {\r\n if (pdfCallbackFn) {\r\n this.applyPdfCallbackFn(pdf, pdfCallbackFn).outputPdf('datauristring').then(data => {\r\n observer.next(data);\r\n observer.complete();\r\n });\r\n } else {\r\n pdf.outputPdf('datauristring').then(data => {\r\n observer.next(data);\r\n observer.complete();\r\n });\r\n }\r\n }\r\n });\r\n }\r\n\r\n private applyPdfCallbackFn(pdf, pdfCallbackFn) {\r\n return pdf.toPdf().get('pdf').then((pdfRef) => {\r\n pdfCallbackFn(pdfRef);\r\n });\r\n }\r\n\r\n private getPNG(config: ExportAsConfig): Observable<string | null> {\r\n return new Observable((observer) => {\r\n const element: HTMLElement = document.getElementById(config.elementIdOrContent);\r\n html2canvas(element, config.options).then((canvas) => {\r\n const imgData = canvas.toDataURL('image/PNG');\r\n if (config.type === 'png' && config.download) {\r\n this.downloadFromDataURL(config.fileName, imgData);\r\n observer.next();\r\n } else {\r\n observer.next(imgData);\r\n }\r\n observer.complete();\r\n }, err => {\r\n observer.error(err);\r\n });\r\n });\r\n }\r\n\r\n private getCSV(config: ExportAsConfig): Observable<string | null> {\r\n return new Observable((observer) => {\r\n const element: HTMLElement = document.getElementById(config.elementIdOrContent);\r\n const csv = [];\r\n const rows: any = element.querySelectorAll('table tr');\r\n for (let index = 0; index < rows.length; index++) {\r\n const rowElement = rows[index];\r\n const row = [];\r\n const cols = rowElement.querySelectorAll('td, th');\r\n for (let colIndex = 0; colIndex < cols.length; colIndex++) {\r\n const col = cols[colIndex];\r\n row.push('\"'+col.innerText+'\"');\r\n }\r\n csv.push(row.join(','));\r\n }\r\n const csvContent = 'data:text/csv;base64,' + this.btoa(csv.join('\\n'));\r\n if (config.download) {\r\n this.downloadFromDataURL(config.fileName, csvContent);\r\n observer.next();\r\n } else {\r\n observer.next(csvContent);\r\n }\r\n observer.complete();\r\n });\r\n }\r\n\r\n private getTXT(config: ExportAsConfig): Observable<string | null> {\r\n const nameFrags = config.fileName.split('.');\r\n config.fileName = `${nameFrags[0]}.txt`;\r\n return this.getCSV(config);\r\n }\r\n\r\n private getXLS(config: ExportAsConfig): Observable<string | null> {\r\n return new Observable((observer) => {\r\n\r\n const element: HTMLElement = document.getElementById(config.elementIdOrContent);\r\n const ws3 = XLSX.utils.table_to_sheet(element, config.options);\r\n const wb = XLSX.utils.book_new();\r\n XLSX.utils.book_append_sheet(wb, ws3, config.fileName);\r\n const out = XLSX.write(wb, { type: 'base64' });\r\n const xlsContent = 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' + out;\r\n if (config.download) {\r\n this.downloadFromDataURL(config.fileName, xlsContent);\r\n observer.next();\r\n } else {\r\n observer.next(xlsContent);\r\n }\r\n observer.complete();\r\n });\r\n }\r\n\r\n private getXLSX(config: ExportAsConfig): Observable<string | null> {\r\n return this.getXLS(config);\r\n }\r\n\r\n // private getDOCX(config: ExportAsConfig): Observable<string | null> {\r\n // return new Observable((observer) => {\r\n // const contentDocument: string = document.getElementById(config.elementIdOrContent).outerHTML;\r\n // const content = '<!DOCTYPE html>' + contentDocument;\r\n // HTMLtoDOCX(content, null, config.options).then(converted => {\r\n // if (config.download) {\r\n // this.downloadFromBlob(converted, config.fileName);\r\n // observer.next();\r\n // observer.complete();\r\n // } else {\r\n // const reader = new FileReader();\r\n // reader.onloadend = () => {\r\n // const base64data = reader.result as string;\r\n // observer.next(base64data);\r\n // observer.complete();\r\n // };\r\n // reader.readAsDataURL(converted);\r\n // }\r\n // });\r\n // });\r\n // }\r\n\r\n // private getDOC(config: ExportAsConfig): Observable<string | null> {\r\n // return this.getDOCX(config);\r\n // }\r\n\r\n private getJSON(config: ExportAsConfig): Observable<any[] | null> {\r\n return new Observable((observer) => {\r\n const data = []; // first row needs to be headers\r\n const headers = [];\r\n const table = <HTMLTableElement>document.getElementById(config.elementIdOrContent);\r\n for (let index = 0; index < table.rows[0].cells.length; index++) {\r\n headers[index] = table.rows[0].cells[index].innerHTML.toLowerCase().replace(/ /gi, '');\r\n }\r\n // go through cells\r\n for (let i = 1; i < table.rows.length; i++) {\r\n const tableRow = table.rows[i]; const rowData = {};\r\n for (let j = 0; j < tableRow.cells.length; j++) {\r\n rowData[headers[j]] = tableRow.cells[j].innerHTML;\r\n }\r\n data.push(rowData);\r\n }\r\n const jsonString = JSON.stringify(data);\r\n const jsonBase64 = this.btoa(jsonString);\r\n const dataStr = 'data:text/json;base64,' + jsonBase64;\r\n if (config.download) {\r\n this.downloadFromDataURL(config.fileName, dataStr);\r\n observer.next();\r\n } else {\r\n observer.next(data);\r\n }\r\n observer.complete();\r\n });\r\n }\r\n\r\n private getXML(config: ExportAsConfig): Observable<string | null> {\r\n return new Observable((observer) => {\r\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root><Classes>';\r\n const tritem = document.getElementById(config.elementIdOrContent).getElementsByTagName('tr');\r\n for (let i = 0; i < tritem.length; i++) {\r\n const celldata = tritem[i];\r\n if (celldata.cells.length > 0) {\r\n xml += '<Class name=\"' + celldata.cells[0].textContent + '\">\\n';\r\n for (let m = 1; m < celldata.cells.length; ++m) {\r\n xml += '\\t<data>' + celldata.cells[m].textContent + '</data>\\n';\r\n }\r\n xml += '</Class>\\n';\r\n }\r\n }\r\n xml += '</Classes></Root>';\r\n const base64 = 'data:text/xml;base64,' + this.btoa(xml);\r\n if (config.download) {\r\n this.downloadFromDataURL(config.fileName, base64);\r\n observer.next();\r\n } else {\r\n observer.next(base64);\r\n }\r\n observer.complete();\r\n });\r\n }\r\n\r\n private btoa(content: string) {\r\n return btoa(unescape(encodeURIComponent(content)));\r\n }\r\n\r\n}\r\n","/**\n * angular imports\n */\nimport { NgModule } from '@angular/core';\n\n/**\n * my imports\n */\nimport { ExportAsService } from './export-as.service';\n\n@NgModule({\n providers: [ExportAsService],\n})\nexport class ExportAsModule { }\n\n\n","/*\n * Public API Surface of ngx-export-as\n */\n\nexport * from './lib/export-as.service';\nexport * from './lib/export-as-config.model';\nexport * from './lib/export-as.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}