David PHAM-VAN

Merge branch 'MacDeveloper1-feature/html'

@@ -8,6 +8,7 @@ @@ -8,6 +8,7 @@
8 - Output image sized to cropBox instead of mediaBox (iOS) [garrettApproachableGeek] 8 - Output image sized to cropBox instead of mediaBox (iOS) [garrettApproachableGeek]
9 - Replace Activity with Context for Service Compatibility (Android) [Heinrich] 9 - Replace Activity with Context for Service Compatibility (Android) [Heinrich]
10 - Deprecate support for `convertHtml` 10 - Deprecate support for `convertHtml`
  11 +- Implement alternative location for PDF.js [Aleksei]
11 12
12 ## 5.11.1 13 ## 5.11.1
13 14
@@ -43,7 +43,7 @@ for documentation. @@ -43,7 +43,7 @@ for documentation.
43 <true/> 43 <true/>
44 ``` 44 ```
45 45
46 -5. If you want to manually set the PdfJs library version for the web, a small script 46 +5. If you want to manually set the Pdf.js library version for the web, a small script
47 has to be added to your `web/index.html` file, just before `</head>`. 47 has to be added to your `web/index.html` file, just before `</head>`.
48 Otherwise it is loaded automatically: 48 Otherwise it is loaded automatically:
49 49
@@ -52,6 +52,20 @@ for documentation. @@ -52,6 +52,20 @@ for documentation.
52 var dartPdfJsVersion = "3.2.146"; 52 var dartPdfJsVersion = "3.2.146";
53 </script> 53 </script>
54 ``` 54 ```
  55 + 5.1. If you want to manually set the alternative location for loading Pdf.js library for the web, the following script has to be added to your `web/index.html` file, just before `</head>`.
  56 +
  57 + ```html
  58 + <script>
  59 + var dartPdfJsBaseUrl = "https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.2.146/";
  60 + </script>
  61 + ```
  62 + It is possible to use local directory which will be resolved to the host where the web app is running.
  63 +
  64 + ```html
  65 + <script>
  66 + var dartPdfJsBaseUrl = "assets/js/pdf/3.2.146/";
  67 + </script>
  68 + ```
55 69
56 6. For Windows and Linux, you can force the pdfium version and architecture 70 6. For Windows and Linux, you can force the pdfium version and architecture
57 on your main `CMakeLists.txt` with: 71 on your main `CMakeLists.txt` with:
@@ -33,6 +33,9 @@ import 'src/printer.dart'; @@ -33,6 +33,9 @@ import 'src/printer.dart';
33 import 'src/printing_info.dart'; 33 import 'src/printing_info.dart';
34 import 'src/raster.dart'; 34 import 'src/raster.dart';
35 35
  36 +const _dartPdfJsVersion = 'dartPdfJsVersion';
  37 +const _dartPdfJsBaseUrl = 'dartPdfJsBaseUrl';
  38 +
36 /// Print plugin targeting Flutter on the Web 39 /// Print plugin targeting Flutter on the Web
37 class PrintingPlugin extends PrintingPlatform { 40 class PrintingPlugin extends PrintingPlatform {
38 /// Registers this class as the default instance of [PrintingPlugin]. 41 /// Registers this class as the default instance of [PrintingPlugin].
@@ -51,14 +54,11 @@ class PrintingPlugin extends PrintingPlatform { @@ -51,14 +54,11 @@ class PrintingPlugin extends PrintingPlatform {
51 final _loading = Mutex(); 54 final _loading = Mutex();
52 55
53 bool get _hasPdfJsLib => js.context.callMethod('eval', <String>[ 56 bool get _hasPdfJsLib => js.context.callMethod('eval', <String>[
54 - 'typeof pdfjsLib !== "undefined" && pdfjsLib.GlobalWorkerOptions.workerSrc!="";' 57 + 'typeof pdfjsLib !== "undefined" && pdfjsLib.GlobalWorkerOptions.workerSrc != "";'
55 ]); 58 ]);
56 59
57 - String get _selectPdfJsVersion => js.context.hasProperty('dartPdfJsVersion')  
58 - ? js.context['dartPdfJsVersion']  
59 - : _pdfJsVersion;  
60 -  
61 - String get _pdfJsUrlBase => '$_pdfJsCdnPath@$_selectPdfJsVersion/'; 60 + /// The base URL for loading pdf.js library
  61 + late String _pdfJsUrlBase;
62 62
63 Future<void> _initPlugin() async { 63 Future<void> _initPlugin() async {
64 await _loading.acquire(); 64 await _loading.acquire();
@@ -86,10 +86,21 @@ class PrintingPlugin extends PrintingPlatform { @@ -86,10 +86,21 @@ class PrintingPlugin extends PrintingPlatform {
86 } 86 }
87 js.context['module'] = 0; 87 js.context['module'] = 0;
88 88
  89 + // Check if the source of PDF.js library is overridden via
  90 + // [dartPdfJsBaseUrl] JavaScript variable.
  91 + if (js.context.hasProperty(_dartPdfJsBaseUrl)) {
  92 + _pdfJsUrlBase = js.context[_dartPdfJsBaseUrl] as String;
  93 + } else {
  94 + final pdfJsVersion = js.context.hasProperty(_dartPdfJsVersion)
  95 + ? js.context[_dartPdfJsVersion]
  96 + : _pdfJsVersion;
  97 + _pdfJsUrlBase = '$_pdfJsCdnPath@$pdfJsVersion/build/';
  98 + }
  99 +
89 final script = html.ScriptElement() 100 final script = html.ScriptElement()
90 ..type = 'text/javascript' 101 ..type = 'text/javascript'
91 ..async = true 102 ..async = true
92 - ..src = '$_pdfJsUrlBase/build/pdf.min.js'; 103 + ..src = '${_pdfJsUrlBase}pdf.min.js';
93 assert(html.document.head != null); 104 assert(html.document.head != null);
94 html.document.head!.append(script); 105 html.document.head!.append(script);
95 await script.onLoad.first; 106 await script.onLoad.first;
@@ -100,7 +111,7 @@ class PrintingPlugin extends PrintingPlatform { @@ -100,7 +111,7 @@ class PrintingPlugin extends PrintingPlatform {
100 } 111 }
101 112
102 js.context['pdfjsLib']['GlobalWorkerOptions']['workerSrc'] = 113 js.context['pdfjsLib']['GlobalWorkerOptions']['workerSrc'] =
103 - '$_pdfJsUrlBase/build/pdf.worker.min.js'; 114 + '${_pdfJsUrlBase}pdf.worker.min.js';
104 115
105 // Restore module and exports 116 // Restore module and exports
106 if (module != null) { 117 if (module != null) {