pdfmake-script.service.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { Injectable } from "@angular/core";
  2. interface Scripts {
  3. name: string;
  4. src: string;
  5. }
  6. export const ScriptStore: Scripts[] = [
  7. {
  8. name: "pdfMake",
  9. src: "https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.59/pdfmake.min.js"
  10. },
  11. {
  12. name: "vfsFonts",
  13. src: "https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.59/vfs_fonts.js"
  14. }
  15. ];
  16. @Injectable({
  17. providedIn: "root"
  18. })
  19. export class PdfmakeScriptService {
  20. private scripts: any = {};
  21. constructor() {
  22. ScriptStore.forEach((script: any) => {
  23. this.scripts[script.name] = {
  24. loaded: false,
  25. src: script.src
  26. };
  27. });
  28. }
  29. load(...scripts: string[]) {
  30. const promises: any[] = [];
  31. scripts.forEach(script => promises.push(this.loadScript(script)));
  32. return Promise.all(promises);
  33. }
  34. loadScript(name: string) {
  35. return new Promise((resolve, reject) => {
  36. // resolve if already loaded
  37. if (this.scripts[name].loaded) {
  38. resolve({ script: name, loaded: true, status: "Already Loaded" });
  39. } else {
  40. // load script
  41. const script = document.createElement("script");
  42. script.type = "text/javascript";
  43. script.src = this.scripts[name].src;
  44. script.onload = () => {
  45. this.scripts[name].loaded = true;
  46. console.log(`${name} Loaded.`);
  47. resolve({ script: name, loaded: true, status: "Loaded" });
  48. };
  49. script.onerror = (error: any) =>
  50. resolve({ script: name, loaded: false, status: "Loaded" });
  51. document.getElementsByTagName("head")[0].appendChild(script);
  52. }
  53. });
  54. }
  55. }