@@ -4313,12 +4313,9 @@ class PartialEvaluator {
4313
4313
4314
4314
if ( ! descriptor ) {
4315
4315
if ( isType3Font ) {
4316
- const bbox = lookupNormalRect ( dict . getArray ( "FontBBox" ) , [ 0 , 0 , 0 , 0 ] ) ;
4317
4316
// FontDescriptor is only required for Type3 fonts when the document
4318
- // is a tagged pdf. Create a barbebones one to get by.
4319
- descriptor = new Dict ( null ) ;
4320
- descriptor . set ( "FontName" , Name . get ( type ) ) ;
4321
- descriptor . set ( "FontBBox" , bbox ) ;
4317
+ // is a tagged pdf.
4318
+ descriptor = Dict . empty ;
4322
4319
} else {
4323
4320
// Before PDF 1.5 if the font was one of the base 14 fonts, having a
4324
4321
// FontDescriptor was not required.
@@ -4420,7 +4417,13 @@ class PartialEvaluator {
4420
4417
4421
4418
const fontNameStr = fontName ?. name ;
4422
4419
const baseFontStr = baseFont ?. name ;
4423
- if ( ! isType3Font && fontNameStr !== baseFontStr ) {
4420
+ if ( isType3Font ) {
4421
+ if ( ! fontNameStr ) {
4422
+ // Since the /FontDescriptor is optional in Type3 fonts, ensure that we
4423
+ // always have a "valid" /FontName (fixes issue19954.pdf).
4424
+ fontName = Name . get ( type ) ;
4425
+ }
4426
+ } else if ( fontNameStr !== baseFontStr ) {
4424
4427
info (
4425
4428
`The FontDescriptor's FontName is "${ fontNameStr } " but ` +
4426
4429
`should be the same as the Font's BaseFont "${ baseFontStr } ".`
@@ -4438,8 +4441,8 @@ class PartialEvaluator {
4438
4441
) {
4439
4442
fontName = null ;
4440
4443
}
4444
+ fontName ||= baseFont ;
4441
4445
}
4442
- fontName ||= baseFont ;
4443
4446
4444
4447
if ( ! ( fontName instanceof Name ) ) {
4445
4448
throw new FormatError ( "invalid font name" ) ;
@@ -4517,7 +4520,7 @@ class PartialEvaluator {
4517
4520
) ;
4518
4521
const bbox = lookupNormalRect (
4519
4522
descriptor . getArray ( "FontBBox" ) || dict . getArray ( "FontBBox" ) ,
4520
- undefined
4523
+ isType3Font ? [ 0 , 0 , 0 , 0 ] : undefined
4521
4524
) ;
4522
4525
let ascent = descriptor . get ( "Ascent" ) ;
4523
4526
if ( typeof ascent !== "number" ) {
@@ -4705,9 +4708,9 @@ class TranslatedFont {
4705
4708
const fontResources = this . dict . get ( "Resources" ) || resources ;
4706
4709
const charProcOperatorList = Object . create ( null ) ;
4707
4710
4708
- const fontBBox = Util . normalizeRect ( font . bbox || [ 0 , 0 , 0 , 0 ] ) ,
4709
- width = fontBBox [ 2 ] - fontBBox [ 0 ] ,
4710
- height = fontBBox [ 3 ] - fontBBox [ 1 ] ;
4711
+ const [ x0 , y0 , x1 , y1 ] = font . bbox ,
4712
+ width = x1 - x0 ,
4713
+ height = y1 - y0 ;
4711
4714
const fontBBoxSize = Math . hypot ( width , height ) ;
4712
4715
4713
4716
for ( const key of charProcs . getKeys ( ) ) {
0 commit comments