(fontDescriptor pdfDict)
| 497 | } |
| 498 | |
| 499 | func (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 | |
| 530 | func (r *pdfReader) getBuiltinEncoding(fontType pdfName, fontDescriptor pdfDict) (encoding, error) { |
| 531 | sfnt, err := r.getFontProgram(fontDescriptor) |
no test coverage detected