//======================================================================== // // FontInfo.h // // Copyright (C) 2005 Kristian Høgsberg // Copyright (C) 2005-2008, 2010, 2011, 2018, 2019 Albert Astals Cid // Copyright (C) 2005 Brad Hards // Copyright (C) 2009 Pino Toscano // Copyright (C) 2012 Adrian Johnson // Copyright (C) 2013 Thomas Freitag // Copyright (C) 2019 Oliver Sander // Copyright (C) 2019 Adam Reichold // // To see a description of the changes please see the Changelog file that // came with your tarball or type make ChangeLog if you are building from git // //======================================================================== //======================================================================== // // Based on code from pdffonts.cc // // Copyright 2001-2007 Glyph & Cog, LLC // //======================================================================== #ifndef FONT_INFO_H #define FONT_INFO_H #include "Object.h" #include class GfxFont; class PDFDoc; class FontInfo { public: enum Type { unknown, Type1, Type1C, Type1COT, Type3, TrueType, TrueTypeOT, CIDType0, CIDType0C, CIDType0COT, CIDTrueType, CIDTrueTypeOT }; // Constructor. FontInfo(GfxFont *fontA, XRef *xrefA); // Copy constructor FontInfo(const FontInfo &f); // Destructor. ~FontInfo(); FontInfo &operator=(const FontInfo &) = delete; const GooString *getName() const { return name; }; const GooString *getSubstituteName() const { return substituteName; }; const GooString *getFile() const { return file; }; const GooString *getEncoding() const { return encoding; }; Type getType() const { return type; }; bool getEmbedded() const { return emb; }; bool getSubset() const { return subset; }; bool getToUnicode() const { return hasToUnicode; }; Ref getRef() const { return fontRef; }; Ref getEmbRef() const { return embRef; }; private: GooString *name; GooString *substituteName; GooString *file; GooString *encoding; Type type; bool emb; bool subset; bool hasToUnicode; Ref fontRef; Ref embRef; }; class FontInfoScanner { public: // Constructor. FontInfoScanner(PDFDoc *doc, int firstPage = 0); // Destructor. ~FontInfoScanner(); std::vector scan(int nPages); private: PDFDoc *doc; int currentPage; std::unordered_set fonts; std::unordered_set visitedObjects; void scanFonts(XRef *xrefA, Dict *resDict, std::vector *fontsList); }; #endif