@@ -760,15 +760,19 @@ func (xRefTable *XRefTable) DereferenceInteger(o Object) (*Integer, error) {
760760
761761 i , ok := o .(Integer )
762762 if ! ok {
763- return nil , errors .Errorf ("ValidateInteger : wrong type <%v>" , o )
763+ return nil , errors .Errorf ("DereferenceInteger : wrong type <%v>" , o )
764764 }
765765
766766 return & i , nil
767767}
768768
769- // DereferenceNumber resolves a number object, which may be an indirect reference and returns a float64
770- // It is assumed this func is called on a validated xRefTable.
771- func (xRefTable * XRefTable ) DereferenceNumber (o Object ) (f float64 ) {
769+ // DereferenceNumber resolves a number object, which may be an indirect reference and returns a float64.
770+ func (xRefTable * XRefTable ) DereferenceNumber (o Object ) (float64 , error ) {
771+
772+ var (
773+ f float64
774+ err error
775+ )
772776
773777 o , _ = xRefTable .Dereference (o )
774778
@@ -780,11 +784,12 @@ func (xRefTable *XRefTable) DereferenceNumber(o Object) (f float64) {
780784 case Float :
781785 f = o .Value ()
782786
783- // TODO default: error
787+ default :
788+ err = errors .Errorf ("DereferenceNumber: wrong type <%v>" , o )
784789
785790 }
786791
787- return f
792+ return f , err
788793}
789794
790795// DereferenceName resolves and validates a name object, which may be an indirect reference.
@@ -1525,15 +1530,32 @@ type InheritedPageAttrs struct {
15251530 resources Dict
15261531 mediaBox * Rectangle
15271532 cropBox * Rectangle
1528- rotate float64
1533+ rotate int
15291534}
15301535
1531- func rect (xRefTable * XRefTable , a Array ) * Rectangle {
1532- llx := xRefTable .DereferenceNumber (a [0 ])
1533- lly := xRefTable .DereferenceNumber (a [1 ])
1534- urx := xRefTable .DereferenceNumber (a [2 ])
1535- ury := xRefTable .DereferenceNumber (a [3 ])
1536- return Rect (llx , lly , urx , ury )
1536+ func rect (xRefTable * XRefTable , a Array ) (* Rectangle , error ) {
1537+
1538+ llx , err := xRefTable .DereferenceNumber (a [0 ])
1539+ if err != nil {
1540+ return nil , err
1541+ }
1542+
1543+ lly , err := xRefTable .DereferenceNumber (a [1 ])
1544+ if err != nil {
1545+ return nil , err
1546+ }
1547+
1548+ urx , err := xRefTable .DereferenceNumber (a [2 ])
1549+ if err != nil {
1550+ return nil , err
1551+ }
1552+
1553+ ury , err := xRefTable .DereferenceNumber (a [3 ])
1554+ if err != nil {
1555+ return nil , err
1556+ }
1557+
1558+ return Rect (llx , lly , urx , ury ), nil
15371559}
15381560
15391561func (xRefTable * XRefTable ) checkInheritedPageAttrs (pageDict Dict , pAttrs * InheritedPageAttrs ) error {
@@ -1554,7 +1576,10 @@ func (xRefTable *XRefTable) checkInheritedPageAttrs(pageDict Dict, pAttrs *Inher
15541576 if err != nil {
15551577 return err
15561578 }
1557- pAttrs .mediaBox = rect (xRefTable , a )
1579+ pAttrs .mediaBox , err = rect (xRefTable , a )
1580+ if err != nil {
1581+ return err
1582+ }
15581583 }
15591584
15601585 obj , found = pageDict .Find ("CropBox" )
@@ -1563,13 +1588,22 @@ func (xRefTable *XRefTable) checkInheritedPageAttrs(pageDict Dict, pAttrs *Inher
15631588 if err != nil {
15641589 return err
15651590 }
1566- pAttrs .cropBox = rect (xRefTable , a )
1591+ pAttrs .cropBox , err = rect (xRefTable , a )
1592+ if err != nil {
1593+ return err
1594+ }
15671595 }
15681596
15691597 obj , found = pageDict .Find ("Rotate" )
15701598 if found {
15711599 //fmt.Printf("found Rotate: %v %T\n", obj, obj)
1572- pAttrs .rotate = xRefTable .DereferenceNumber (obj )
1600+ i , err := xRefTable .DereferenceInteger (obj )
1601+ if err != nil {
1602+ return err
1603+ }
1604+
1605+ pAttrs .rotate = i .Value ()
1606+
15731607 //fmt.Printf("r=%v %T\n", r, r)
15741608 //pAttrs.rotate = &r
15751609 //fmt.Printf("found rotate(%f) for page %d\n", *rotate, *p)
@@ -1707,6 +1741,21 @@ func (xRefTable *XRefTable) emptyPage(parentIndRef *IndirectRef, mediaBox *Recta
17071741 return xRefTable .IndRefForNewObject (pageDict )
17081742}
17091743
1744+ func (xRefTable * XRefTable ) pageMediaBox (d * Dict ) (* Rectangle , error ) {
1745+
1746+ o , found := d .Find ("MediaBox" )
1747+ if ! found {
1748+ return nil , errors .Errorf ("pageMediaBox: missing mediaBox" )
1749+ }
1750+
1751+ a , err := xRefTable .DereferenceArray (o )
1752+ if err != nil {
1753+ return nil , err
1754+ }
1755+
1756+ return rect (xRefTable , a )
1757+ }
1758+
17101759func (xRefTable * XRefTable ) insertIntoPageTree (root * IndirectRef , pAttrs * InheritedPageAttrs , p * int , selectedPages IntSet ) (int , error ) {
17111760
17121761 d , err := xRefTable .DereferenceDict (* root )
@@ -1763,12 +1812,10 @@ func (xRefTable *XRefTable) insertIntoPageTree(root *IndirectRef, pAttrs *Inheri
17631812 // Insert empty page.
17641813 mediaBox := pAttrs .mediaBox
17651814 if mediaBox == nil {
1766- o1 , _ := pageNodeDict .Find ("MediaBox" )
1767- a1 , err := xRefTable .DereferenceArray (o1 )
1815+ mediaBox , err = xRefTable .pageMediaBox (& pageNodeDict )
17681816 if err != nil {
17691817 return 0 , err
17701818 }
1771- mediaBox = rect (xRefTable , a1 )
17721819 }
17731820
17741821 indRef , err := xRefTable .emptyPage (root , mediaBox )
0 commit comments