MCPcopy Create free account
hub / github.com/tdewolff/canvas / readObject

Method readObject

cmd/pdftext/reader.go:458–514  ·  view source on GitHub ↗
(ref pdfRef)

Source from the content-addressed store, hash-verified

456}
457
458func (r *pdfReader) readObject(ref pdfRef) (any, error) {
459 if val, ok := r.cache[ref]; ok {
460 return val, nil
461 }
462 obj, ok := r.objects[ref]
463 if !ok {
464 return nil, fmt.Errorf("unknown object %v", ref)
465 } else if obj.free {
466 return nil, fmt.Errorf("bad object %v is free", ref)
467 } else if obj.compressed {
468 iobjectStream, err := r.readObject(pdfRef{obj.object, 0})
469 if err != nil {
470 return nil, err
471 }
472 objectStream, ok := iobjectStream.(pdfStream)
473 if !ok {
474 return nil, fmt.Errorf("compressed object %v must refer to stream", ref)
475 }
476
477 b, i := objectStream.data, 0
478 object, offset := 0, 0
479 for index := 0; index <= obj.offset; index++ {
480 val, n, err := pdfReadContentVal(b[i:])
481 if err != nil {
482 return nil, fmt.Errorf("invalid stream: %w", err)
483 }
484 object, _ = val.(int)
485 i = moveWhiteSpace(b, i+n)
486
487 val, n, err = pdfReadContentVal(b[i:])
488 if err != nil {
489 return nil, fmt.Errorf("invalid stream: %w", err)
490 }
491 offset, _ = val.(int)
492 i = moveWhiteSpace(b, i+n)
493 }
494 if uint32(object) != ref[0] {
495 return nil, fmt.Errorf("bad object %v: invalid index in compressed object", ref)
496 }
497
498 first, _ := r.GetInt(objectStream.dict["First"])
499 offset += first
500 if len(b) <= offset {
501 return nil, fmt.Errorf("bad object %v: invalid offset in compressed object", ref)
502 }
503
504 val, _, err := pdfReadVal(r, ref, b[offset:])
505 if err != nil {
506 return nil, fmt.Errorf("bad object %v: %w", ref, err)
507 }
508 r.cache[ref] = val
509 return val, nil
510 }
511 val, err := r.readObjectAt(ref, obj.offset)
512 r.cache[ref] = val
513 return val, err
514}
515

Callers 2

getMethod · 0.95
CloseMethod · 0.80

Calls 5

GetIntMethod · 0.95
readObjectAtMethod · 0.95
pdfReadContentValFunction · 0.85
moveWhiteSpaceFunction · 0.85
pdfReadValFunction · 0.85

Tested by

no test coverage detected