Committed by
David PHAM-VAN
Wrapped cleanup of page and destory of document in try/finally blocks
Showing
1 changed file
with
51 additions
and
45 deletions
| @@ -290,52 +290,58 @@ class PrintingPlugin extends PrintingPlatform { | @@ -290,52 +290,58 @@ class PrintingPlugin extends PrintingPlatform { | ||
| 290 | await _initPlugin(); | 290 | await _initPlugin(); |
| 291 | 291 | ||
| 292 | final t = PdfJs.getDocument(Settings()..data = document); | 292 | final t = PdfJs.getDocument(Settings()..data = document); |
| 293 | - | ||
| 294 | - final d = await promiseToFuture<PdfJsDoc>(t.promise); | ||
| 295 | - final numPages = d.numPages; | ||
| 296 | - | ||
| 297 | - final html.CanvasElement canvas = | ||
| 298 | - js.context['document'].createElement('canvas'); | ||
| 299 | - | ||
| 300 | - final context = canvas.getContext('2d') as html.CanvasRenderingContext2D?; | ||
| 301 | - final _pages = pages ?? Iterable<int>.generate(numPages, (index) => index); | ||
| 302 | - | ||
| 303 | - for (final i in _pages) { | ||
| 304 | - final page = await promiseToFuture<PdfJsPage>(d.getPage(i + 1)); | ||
| 305 | - final viewport = | ||
| 306 | - page.getViewport(Settings()..scale = dpi / PdfPageFormat.inch); | ||
| 307 | - | ||
| 308 | - canvas.height = viewport.height.toInt(); | ||
| 309 | - canvas.width = viewport.width.toInt(); | ||
| 310 | - | ||
| 311 | - final renderContext = Settings() | ||
| 312 | - ..canvasContext = context! | ||
| 313 | - ..viewport = viewport; | ||
| 314 | - | ||
| 315 | - await promiseToFuture<void>(page.render(renderContext).promise); | ||
| 316 | - | ||
| 317 | - // Convert the image to PNG | ||
| 318 | - final completer = Completer<void>(); | ||
| 319 | - final blob = await canvas.toBlob(); | ||
| 320 | - final data = BytesBuilder(); | ||
| 321 | - final r = FileReader(); | ||
| 322 | - r.readAsArrayBuffer(blob); | ||
| 323 | - r.onLoadEnd.listen( | ||
| 324 | - (ProgressEvent e) { | ||
| 325 | - data.add(r.result as List<int>); | ||
| 326 | - completer.complete(); | ||
| 327 | - }, | ||
| 328 | - ); | ||
| 329 | - await completer.future; | ||
| 330 | - | ||
| 331 | - yield _WebPdfRaster( | ||
| 332 | - canvas.width!, | ||
| 333 | - canvas.height!, | ||
| 334 | - data.toBytes(), | ||
| 335 | - ); | ||
| 336 | - page.cleanup(); | 293 | + try { |
| 294 | + final d = await promiseToFuture<PdfJsDoc>(t.promise); | ||
| 295 | + final numPages = d.numPages; | ||
| 296 | + | ||
| 297 | + final html.CanvasElement canvas = | ||
| 298 | + js.context['document'].createElement('canvas'); | ||
| 299 | + | ||
| 300 | + final context = canvas.getContext('2d') as html.CanvasRenderingContext2D?; | ||
| 301 | + final _pages = | ||
| 302 | + pages ?? Iterable<int>.generate(numPages, (index) => index); | ||
| 303 | + | ||
| 304 | + for (final i in _pages) { | ||
| 305 | + final page = await promiseToFuture<PdfJsPage>(d.getPage(i + 1)); | ||
| 306 | + try { | ||
| 307 | + final viewport = | ||
| 308 | + page.getViewport(Settings()..scale = dpi / PdfPageFormat.inch); | ||
| 309 | + | ||
| 310 | + canvas.height = viewport.height.toInt(); | ||
| 311 | + canvas.width = viewport.width.toInt(); | ||
| 312 | + | ||
| 313 | + final renderContext = Settings() | ||
| 314 | + ..canvasContext = context! | ||
| 315 | + ..viewport = viewport; | ||
| 316 | + | ||
| 317 | + await promiseToFuture<void>(page.render(renderContext).promise); | ||
| 318 | + | ||
| 319 | + // Convert the image to PNG | ||
| 320 | + final completer = Completer<void>(); | ||
| 321 | + final blob = await canvas.toBlob(); | ||
| 322 | + final data = BytesBuilder(); | ||
| 323 | + final r = FileReader(); | ||
| 324 | + r.readAsArrayBuffer(blob); | ||
| 325 | + r.onLoadEnd.listen( | ||
| 326 | + (ProgressEvent e) { | ||
| 327 | + data.add(r.result as List<int>); | ||
| 328 | + completer.complete(); | ||
| 329 | + }, | ||
| 330 | + ); | ||
| 331 | + await completer.future; | ||
| 332 | + | ||
| 333 | + yield _WebPdfRaster( | ||
| 334 | + canvas.width!, | ||
| 335 | + canvas.height!, | ||
| 336 | + data.toBytes(), | ||
| 337 | + ); | ||
| 338 | + } finally { | ||
| 339 | + page.cleanup(); | ||
| 340 | + } | ||
| 341 | + } | ||
| 342 | + } finally { | ||
| 343 | + t.destroy(); | ||
| 337 | } | 344 | } |
| 338 | - t.destroy(); | ||
| 339 | } | 345 | } |
| 340 | } | 346 | } |
| 341 | 347 |
-
Please register or login to post a comment