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

Method getFontProgram

cmd/pdftext/encoding.go:499–528  ·  view source on GitHub ↗
(fontDescriptor pdfDict)

Source from the content-addressed store, hash-verified

497}
498
499func (r *pdfReader) getFontProgram(fontDescriptor pdfDict) (*font.SFNT, error) {
500 if ifontFile2, ok := fontDescriptor["FontFile2"]; ok {
501 fontFile2, err := r.GetStream(ifontFile2)
502 if err != nil {
503 return nil, err
504 }
505 return font.ParseEmbeddedSFNT(fontFile2.data, 0)
506 } else if ifontFile3, ok := fontDescriptor["FontFile3"]; ok {
507 if fontFile3, err := r.GetStream(ifontFile3); err != nil {
508 return nil, err
509 } else if subtype, err := r.GetName(fontFile3.dict["Subtype"]); err != nil {
510 return nil, err
511 } else if subtype == pdfName("OpenType") || subtype == pdfName("Type1C") || subtype == pdfName("CIDFOntType0C") {
512 fontFile, err := r.GetStream(fontFile3)
513 if err != nil {
514 return nil, err
515 }
516 if subtype == pdfName("OpenType") {
517 return font.ParseEmbeddedSFNT(fontFile.data, 0)
518 }
519 return nil, fmt.Errorf("unsupported CFF font file ")
520 //return font.ParseCFF(fontFile.data) // TODO: support
521 } else {
522 return nil, fmt.Errorf("invalid subtype for FontFile3: %v", subtype)
523 }
524 } else if _, ok := fontDescriptor["FontFile"]; ok {
525 return nil, fmt.Errorf("unsupported FontFile type")
526 }
527 return nil, nil // standard font
528}
529
530func (r *pdfReader) getBuiltinEncoding(fontType pdfName, fontDescriptor pdfDict) (encoding, error) {
531 sfnt, err := r.getFontProgram(fontDescriptor)

Callers 1

getBuiltinEncodingMethod · 0.95

Calls 3

GetStreamMethod · 0.95
GetNameMethod · 0.95
pdfNameTypeAlias · 0.70

Tested by

no test coverage detected