Koji Wakamiya
Committed by David PHAM-VAN

Add cMapUrl and cMapPacked property

@@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@
6 - Add custom pages builder to PdfPreview widget [Milad akarie] 6 - Add custom pages builder to PdfPreview widget [Milad akarie]
7 - Update Image dependency 7 - Update Image dependency
8 - Fix canChangeOrientation option not appearing bug [Bilal Raja] 8 - Fix canChangeOrientation option not appearing bug [Bilal Raja]
  9 +- Add Support cmaps option on printing web [Koji Wakamiya]
9 10
10 ## 5.9.3 11 ## 5.9.3
11 12
@@ -43,14 +43,13 @@ for documentation. @@ -43,14 +43,13 @@ 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 javascript  
47 - library and a small script has to be added to your `web/index.html` file, just  
48 - before `</head>`. Otherwise it is loaded automatically: 46 +5. If you want to manually set the PdfJs library version for the web, a small script
  47 + has to be added to your `web/index.html` file, just before `</head>`.
  48 + Otherwise it is loaded automatically:
49 49
50 ```html 50 ```html
51 - <script src="//cdnjs.cloudflare.com/ajax/libs/pdf.js/2.8.335/pdf.min.js"></script>  
52 - <script type="text/javascript">  
53 - pdfjsLib.GlobalWorkerOptions.workerSrc = "//cdnjs.cloudflare.com/ajax/libs/pdf.js/2.8.335/pdf.worker.min.js"; 51 + <script>
  52 + var dartPdfJsVersion = "3.2.146";
54 </script> 53 </script>
55 ``` 54 ```
56 55
@@ -45,8 +45,9 @@ class PrintingPlugin extends PrintingPlatform { @@ -45,8 +45,9 @@ class PrintingPlugin extends PrintingPlatform {
45 45
46 static const String _frameId = '__net_nfet_printing__'; 46 static const String _frameId = '__net_nfet_printing__';
47 47
48 - static const _pdfJsVersion =  
49 - 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/2.13.216'; 48 + static const _pdfJsCdnPath = 'https://unpkg.com/pdfjs-dist';
  49 +
  50 + static const _pdfJsVersion = '3.2.146';
50 51
51 final _loading = Mutex(); 52 final _loading = Mutex();
52 53
@@ -54,6 +55,12 @@ class PrintingPlugin extends PrintingPlatform { @@ -54,6 +55,12 @@ class PrintingPlugin extends PrintingPlatform {
54 'typeof pdfjsLib !== "undefined" && pdfjsLib.GlobalWorkerOptions.workerSrc!="";' 55 'typeof pdfjsLib !== "undefined" && pdfjsLib.GlobalWorkerOptions.workerSrc!="";'
55 ]); 56 ]);
56 57
  58 + String get _selectPdfJsVersion => js.context.hasProperty('dartPdfJsVersion')
  59 + ? js.context['dartPdfJsVersion']
  60 + : _pdfJsVersion;
  61 +
  62 + String get _pdfJsUrlBase => '$_pdfJsCdnPath@$_selectPdfJsVersion/';
  63 +
57 Future<void> _initPlugin() async { 64 Future<void> _initPlugin() async {
58 await _loading.acquire(); 65 await _loading.acquire();
59 66
@@ -61,7 +68,7 @@ class PrintingPlugin extends PrintingPlatform { @@ -61,7 +68,7 @@ class PrintingPlugin extends PrintingPlatform {
61 final script = ScriptElement() 68 final script = ScriptElement()
62 ..type = 'text/javascript' 69 ..type = 'text/javascript'
63 ..async = true 70 ..async = true
64 - ..src = '$_pdfJsVersion/pdf.min.js'; 71 + ..src = '$_pdfJsUrlBase/build/pdf.min.js';
65 assert(document.head != null); 72 assert(document.head != null);
66 document.head!.append(script); 73 document.head!.append(script);
67 await script.onLoad.first; 74 await script.onLoad.first;
@@ -72,8 +79,9 @@ class PrintingPlugin extends PrintingPlatform { @@ -72,8 +79,9 @@ class PrintingPlugin extends PrintingPlatform {
72 require.callMethod('config', <dynamic>[ 79 require.callMethod('config', <dynamic>[
73 js.JsObject.jsify({ 80 js.JsObject.jsify({
74 'paths': { 81 'paths': {
75 - 'pdfjs-dist/build/pdf': '$_pdfJsVersion/pdf.min',  
76 - 'pdfjs-dist/build/pdf.worker': '$_pdfJsVersion/pdf.worker.min', 82 + 'pdfjs-dist/build/pdf': '$_pdfJsUrlBase/build/pdf.min',
  83 + 'pdfjs-dist/build/pdf.worker':
  84 + '$_pdfJsUrlBase/build/pdf.worker.min',
77 } 85 }
78 }) 86 })
79 ]); 87 ]);
@@ -82,7 +90,11 @@ class PrintingPlugin extends PrintingPlatform { @@ -82,7 +90,11 @@ class PrintingPlugin extends PrintingPlatform {
82 90
83 js.context.callMethod('require', <dynamic>[ 91 js.context.callMethod('require', <dynamic>[
84 js.JsObject.jsify( 92 js.JsObject.jsify(
85 - ['pdfjs-dist/build/pdf', 'pdfjs-dist/build/pdf.worker']), 93 + [
  94 + 'pdfjs-dist/build/pdf',
  95 + 'pdfjs-dist/build/pdf.worker',
  96 + ],
  97 + ),
86 (dynamic app) { 98 (dynamic app) {
87 js.context['pdfjsLib'] = app; 99 js.context['pdfjsLib'] = app;
88 completer.complete(); 100 completer.complete();
@@ -93,7 +105,7 @@ class PrintingPlugin extends PrintingPlatform { @@ -93,7 +105,7 @@ class PrintingPlugin extends PrintingPlatform {
93 } 105 }
94 106
95 js.context['pdfjsLib']['GlobalWorkerOptions']['workerSrc'] = 107 js.context['pdfjsLib']['GlobalWorkerOptions']['workerSrc'] =
96 - '$_pdfJsVersion/pdf.worker.min.js'; 108 + '$_pdfJsUrlBase/build/pdf.worker.min.js';
97 } 109 }
98 110
99 _loading.release(); 111 _loading.release();
@@ -288,10 +300,18 @@ class PrintingPlugin extends PrintingPlatform { @@ -288,10 +300,18 @@ class PrintingPlugin extends PrintingPlatform {
288 ) async* { 300 ) async* {
289 await _initPlugin(); 301 await _initPlugin();
290 302
291 - final t = PdfJs.getDocument(Settings()..data = document); 303 + final settings = Settings()..data = document;
  304 +
  305 + if (!_hasPdfJsLib) {
  306 + settings
  307 + ..cMapUrl = '$_pdfJsUrlBase/cmaps/'
  308 + ..cMapPacked = true;
  309 + }
  310 +
  311 + final jsDoc = PdfJs.getDocument(settings);
292 try { 312 try {
293 - final d = await promiseToFuture<PdfJsDoc>(t.promise);  
294 - final numPages = d.numPages; 313 + final doc = await promiseToFuture<PdfJsDoc>(jsDoc.promise);
  314 + final numPages = doc.numPages;
295 315
296 final html.CanvasElement canvas = 316 final html.CanvasElement canvas =
297 js.context['document'].createElement('canvas'); 317 js.context['document'].createElement('canvas');
@@ -300,8 +320,9 @@ class PrintingPlugin extends PrintingPlatform { @@ -300,8 +320,9 @@ class PrintingPlugin extends PrintingPlatform {
300 final _pages = 320 final _pages =
301 pages ?? Iterable<int>.generate(numPages, (index) => index); 321 pages ?? Iterable<int>.generate(numPages, (index) => index);
302 322
303 - for (final i in _pages) {  
304 - final page = await promiseToFuture<PdfJsPage>(d.getPage(i + 1)); 323 + for (final pageIndex in _pages) {
  324 + final page =
  325 + await promiseToFuture<PdfJsPage>(doc.getPage(pageIndex + 1));
305 try { 326 try {
306 final viewport = 327 final viewport =
307 page.getViewport(Settings()..scale = dpi / PdfPageFormat.inch); 328 page.getViewport(Settings()..scale = dpi / PdfPageFormat.inch);
@@ -339,7 +360,7 @@ class PrintingPlugin extends PrintingPlatform { @@ -339,7 +360,7 @@ class PrintingPlugin extends PrintingPlatform {
339 } 360 }
340 } 361 }
341 } finally { 362 } finally {
342 - t.destroy(); 363 + jsDoc.destroy();
343 } 364 }
344 } 365 }
345 } 366 }
@@ -37,6 +37,8 @@ class Settings { @@ -37,6 +37,8 @@ class Settings {
37 external set scale(double value); 37 external set scale(double value);
38 external set canvasContext(CanvasRenderingContext2D value); 38 external set canvasContext(CanvasRenderingContext2D value);
39 external set viewport(PdfJsViewport value); 39 external set viewport(PdfJsViewport value);
  40 + external set cMapUrl(String value);
  41 + external set cMapPacked(bool value);
40 } 42 }
41 43
42 @anonymous 44 @anonymous