@@ -54,8 +54,14 @@ const EXECUTION_TIME = 15; // ms
5454// Defines the number of steps before checking the execution time.
5555const EXECUTION_STEPS = 10 ;
5656
57- const COMPILE_TYPE3_GLYPHS = true ;
58- const MAX_SIZE_TO_COMPILE = 1000 ;
57+ // To disable Type3 compilation, set the value to `-1`.
58+ const MAX_SIZE_TO_COMPILE =
59+ typeof PDFJSDev !== "undefined" &&
60+ PDFJSDev . test ( "GENERIC" ) &&
61+ isNodeJS &&
62+ typeof Path2D === "undefined"
63+ ? - 1
64+ : 1000 ;
5965
6066const FULL_CHUNK_HEIGHT = 16 ;
6167
@@ -294,11 +300,7 @@ function drawImageAtIntegerCoords(
294300
295301function compileType3Glyph ( imgData ) {
296302 const { width, height } = imgData ;
297- if (
298- ! COMPILE_TYPE3_GLYPHS ||
299- width > MAX_SIZE_TO_COMPILE ||
300- height > MAX_SIZE_TO_COMPILE
301- ) {
303+ if ( width > MAX_SIZE_TO_COMPILE || height > MAX_SIZE_TO_COMPILE ) {
302304 return null ;
303305 }
304306
@@ -404,12 +406,7 @@ function compileType3Glyph(imgData) {
404406
405407 // building outlines
406408 const steps = new Int32Array ( [ 0 , width1 , - 1 , 0 , - width1 , 0 , 0 , 0 , 1 ] ) ;
407- let path , outlines , coords ;
408- if ( ! isNodeJS ) {
409- path = new Path2D ( ) ;
410- } else {
411- outlines = [ ] ;
412- }
409+ const path = new Path2D ( ) ;
413410
414411 for ( i = 0 ; count && i <= height ; i ++ ) {
415412 let p = i * width1 ;
@@ -420,12 +417,7 @@ function compileType3Glyph(imgData) {
420417 if ( p === end ) {
421418 continue ;
422419 }
423-
424- if ( path ) {
425- path . moveTo ( p % width1 , i ) ;
426- } else {
427- coords = [ p % width1 , i ] ;
428- }
420+ path . moveTo ( p % width1 , i ) ;
429421
430422 const p0 = p ;
431423 let type = points [ p ] ;
@@ -448,21 +440,12 @@ function compileType3Glyph(imgData) {
448440 // set new type for "future hit"
449441 points [ p ] &= ( type >> 2 ) | ( type << 2 ) ;
450442 }
451-
452- if ( path ) {
453- path . lineTo ( p % width1 , ( p / width1 ) | 0 ) ;
454- } else {
455- coords . push ( p % width1 , ( p / width1 ) | 0 ) ;
456- }
443+ path . lineTo ( p % width1 , ( p / width1 ) | 0 ) ;
457444
458445 if ( ! points [ p ] ) {
459446 -- count ;
460447 }
461448 } while ( p0 !== p ) ;
462-
463- if ( ! path ) {
464- outlines . push ( coords ) ;
465- }
466449 -- i ;
467450 }
468451
@@ -475,18 +458,7 @@ function compileType3Glyph(imgData) {
475458 // the path shall be painted in [0..1]x[0..1] space
476459 c . scale ( 1 / width , - 1 / height ) ;
477460 c . translate ( 0 , - height ) ;
478- if ( path ) {
479- c . fill ( path ) ;
480- } else {
481- c . beginPath ( ) ;
482- for ( const o of outlines ) {
483- c . moveTo ( o [ 0 ] , o [ 1 ] ) ;
484- for ( let l = 2 , ll = o . length ; l < ll ; l += 2 ) {
485- c . lineTo ( o [ l ] , o [ l + 1 ] ) ;
486- }
487- }
488- c . fill ( ) ;
489- }
461+ c . fill ( path ) ;
490462 c . beginPath ( ) ;
491463 c . restore ( ) ;
492464 } ;
0 commit comments