@@ -46,22 +46,24 @@ class PDFFunctionFactory {
46
46
fnObj,
47
47
} ) ;
48
48
}
49
+ }
49
50
50
- createFromIR ( IR ) {
51
- return PDFFunction . fromIR ( {
52
- xref : this . xref ,
53
- isEvalSupported : this . isEvalSupported ,
54
- IR ,
55
- } ) ;
51
+ function toNumberArray ( arr ) {
52
+ if ( ! Array . isArray ( arr ) ) {
53
+ return null ;
56
54
}
57
-
58
- createIR ( fn ) {
59
- return PDFFunction . getIR ( {
60
- xref : this . xref ,
61
- isEvalSupported : this . isEvalSupported ,
62
- fn,
63
- } ) ;
55
+ const length = arr . length ;
56
+ for ( let i = 0 ; i < length ; i ++ ) {
57
+ if ( typeof arr [ i ] !== 'number' ) {
58
+ // Non-number is found -- convert all items to numbers.
59
+ const result = new Array ( length ) ;
60
+ for ( let i = 0 ; i < length ; i ++ ) {
61
+ result [ i ] = + arr [ i ] ;
62
+ }
63
+ return result ;
64
+ }
64
65
}
66
+ return arr ;
65
67
}
66
68
67
69
var PDFFunction = ( function PDFFunctionClosure ( ) {
@@ -171,8 +173,8 @@ var PDFFunction = (function PDFFunctionClosure() {
171
173
}
172
174
return out ;
173
175
}
174
- var domain = dict . getArray ( 'Domain' ) ;
175
- var range = dict . getArray ( 'Range' ) ;
176
+ var domain = toNumberArray ( dict . getArray ( 'Domain' ) ) ;
177
+ var range = toNumberArray ( dict . getArray ( 'Range' ) ) ;
176
178
177
179
if ( ! domain || ! range ) {
178
180
throw new FormatError ( 'No domain or range' ) ;
@@ -184,7 +186,7 @@ var PDFFunction = (function PDFFunctionClosure() {
184
186
domain = toMultiArray ( domain ) ;
185
187
range = toMultiArray ( range ) ;
186
188
187
- var size = dict . get ( 'Size' ) ;
189
+ var size = toNumberArray ( dict . get ( 'Size' ) ) ;
188
190
var bps = dict . get ( 'BitsPerSample' ) ;
189
191
var order = dict . get ( 'Order' ) || 1 ;
190
192
if ( order !== 1 ) {
@@ -193,17 +195,17 @@ var PDFFunction = (function PDFFunctionClosure() {
193
195
info ( 'No support for cubic spline interpolation: ' + order ) ;
194
196
}
195
197
196
- var encode = dict . getArray ( 'Encode' ) ;
198
+ var encode = toNumberArray ( dict . getArray ( 'Encode' ) ) ;
197
199
if ( ! encode ) {
198
200
encode = [ ] ;
199
201
for ( var i = 0 ; i < inputSize ; ++ i ) {
200
- encode . push ( 0 ) ;
201
- encode . push ( size [ i ] - 1 ) ;
202
+ encode . push ( [ 0 , size [ i ] - 1 ] ) ;
202
203
}
204
+ } else {
205
+ encode = toMultiArray ( encode ) ;
203
206
}
204
- encode = toMultiArray ( encode ) ;
205
207
206
- var decode = dict . getArray ( 'Decode' ) ;
208
+ var decode = toNumberArray ( dict . getArray ( 'Decode' ) ) ;
207
209
if ( ! decode ) {
208
210
decode = range ;
209
211
} else {
@@ -304,15 +306,10 @@ var PDFFunction = (function PDFFunctionClosure() {
304
306
} ,
305
307
306
308
constructInterpolated ( { xref, isEvalSupported, fn, dict, } ) {
307
- var c0 = dict . getArray ( 'C0' ) || [ 0 ] ;
308
- var c1 = dict . getArray ( 'C1' ) || [ 1 ] ;
309
+ var c0 = toNumberArray ( dict . getArray ( 'C0' ) ) || [ 0 ] ;
310
+ var c1 = toNumberArray ( dict . getArray ( 'C1' ) ) || [ 1 ] ;
309
311
var n = dict . get ( 'N' ) ;
310
312
311
- if ( ! Array . isArray ( c0 ) || ! Array . isArray ( c1 ) ) {
312
- throw new FormatError (
313
- 'Illegal dictionary for interpolated function' ) ;
314
- }
315
-
316
313
var length = c0 . length ;
317
314
var diff = [ ] ;
318
315
for ( var i = 0 ; i < length ; ++ i ) {
@@ -340,7 +337,7 @@ var PDFFunction = (function PDFFunctionClosure() {
340
337
} ,
341
338
342
339
constructStiched ( { xref, isEvalSupported, fn, dict, } ) {
343
- var domain = dict . getArray ( 'Domain' ) ;
340
+ var domain = toNumberArray ( dict . getArray ( 'Domain' ) ) ;
344
341
345
342
if ( ! domain ) {
346
343
throw new FormatError ( 'No domain' ) ;
@@ -354,12 +351,12 @@ var PDFFunction = (function PDFFunctionClosure() {
354
351
var fnRefs = dict . get ( 'Functions' ) ;
355
352
var fns = [ ] ;
356
353
for ( var i = 0 , ii = fnRefs . length ; i < ii ; ++ i ) {
357
- fns . push ( this . getIR ( { xref, isEvalSupported,
354
+ fns . push ( this . parse ( { xref, isEvalSupported,
358
355
fn : xref . fetchIfRef ( fnRefs [ i ] ) , } ) ) ;
359
356
}
360
357
361
- var bounds = dict . getArray ( 'Bounds' ) ;
362
- var encode = dict . getArray ( 'Encode' ) ;
358
+ var bounds = toNumberArray ( dict . getArray ( 'Bounds' ) ) ;
359
+ var encode = toNumberArray ( dict . getArray ( 'Encode' ) ) ;
363
360
364
361
return [ CONSTRUCT_STICHED , domain , bounds , encode , fns ] ;
365
362
} ,
@@ -368,14 +365,9 @@ var PDFFunction = (function PDFFunctionClosure() {
368
365
var domain = IR [ 1 ] ;
369
366
var bounds = IR [ 2 ] ;
370
367
var encode = IR [ 3 ] ;
371
- var fnsIR = IR [ 4 ] ;
372
- var fns = [ ] ;
368
+ var fns = IR [ 4 ] ;
373
369
var tmpBuf = new Float32Array ( 1 ) ;
374
370
375
- for ( var i = 0 , ii = fnsIR . length ; i < ii ; i ++ ) {
376
- fns . push ( this . fromIR ( { xref, isEvalSupported, IR : fnsIR [ i ] , } ) ) ;
377
- }
378
-
379
371
return function constructStichedFromIRResult ( src , srcOffset ,
380
372
dest , destOffset ) {
381
373
var clip = function constructStichedFromIRClip ( v , min , max ) {
@@ -420,8 +412,8 @@ var PDFFunction = (function PDFFunctionClosure() {
420
412
} ,
421
413
422
414
constructPostScript ( { xref, isEvalSupported, fn, dict, } ) {
423
- var domain = dict . getArray ( 'Domain' ) ;
424
- var range = dict . getArray ( 'Range' ) ;
415
+ var domain = toNumberArray ( dict . getArray ( 'Domain' ) ) ;
416
+ var range = toNumberArray ( dict . getArray ( 'Range' ) ) ;
425
417
426
418
if ( ! domain ) {
427
419
throw new FormatError ( 'No domain.' ) ;
0 commit comments