Esempio n. 1
0
        internal static DocumentFont GetFont(PDFObjects pdf, PdfObject pdfObject)
        {
            var dic  = pdf.GetObject <DictionaryObject>(pdfObject);
            var name = pdf.GetObject <NameObject>(dic.Dictionary["BaseFont"]).Value;

            lock (lck) {
                if (m_lstFont.ContainsKey(name))
                {
                    return(m_lstFont[name]);
                }
                if (IsBaseFont(pdf, dic))
                {
                    var font = new DocumentBaseFont(name);
                    m_lstFont.Add(name, font);
                    return(font);
                }
                else if (IsSubsetFont(dic))
                {
                    var font = pdf.GetDocument <DocumentTtfSubsetFont>(pdfObject);
                    m_lstFont.Add(name, font);
                    return(font);
                }
                else if (IsTrueTypeFont(pdf, dic))
                {
                    var font = pdf.GetDocument <DocumentTtfFont>(pdfObject);
                    m_lstFont.Add(name, font);
                    return(font);
                }
            }

            throw new PdfException(PdfExceptionCodes.INVALID_FONT, $"Not supported font type");
        }
Esempio n. 2
0
        public static DocumentFont GetFont(string name, bool IsBold, bool IsItalic, Embedded embedded)
        {
            string normalizedName = GetName(name, IsBold, IsItalic, embedded);

            // base fonts
            if (baseFontsNames.ContainsKey(SimplifyBaseName(normalizedName)))
            {
                var fontBaseName = baseFontsNames[SimplifyBaseName(normalizedName)];
                lock (lck) {
                    if (m_lstFont.ContainsKey(fontBaseName))
                    {
                        return(m_lstFont[fontBaseName]);
                    }

                    var font = new DocumentBaseFont(fontBaseName);
                    m_lstFont.Add(fontBaseName, font);
                    return(font);
                }
            }

            // unknown, or disk or systemfonts
            DocumentFont ttffont = null;

            lock (lck) {
                if (m_lstFont.ContainsKey(normalizedName))
                {
                    return(m_lstFont[normalizedName]);
                }

                if (embedded == Embedded.No)
                {
                    if (File.Exists(name))
                    {
                        ttffont = new DocumentTtfFont(name);
                    }
                    else
                    {
                        LoadSystemFonts();

                        if (!dctFontRegistered.ContainsKey(name))
                        {
                            throw new PdfException(PdfExceptionCodes.FONT_NOT_FOUND, "Font " + name + " not found");
                        }

                        ttffont = new DocumentTtfFont(dctFontRegistered[name]);
                    }
                }
                else
                {
                    if (File.Exists(name))
                    {
                        ttffont = new DocumentTtfSubsetFont(name);
                    }
                    else
                    {
                        LoadSystemFonts();

                        if (!dctFontRegistered.ContainsKey(name))
                        {
                            throw new PdfException(PdfExceptionCodes.FONT_NOT_FOUND, "Font " + name + " not found");
                        }

                        ttffont = new DocumentTtfSubsetFont(dctFontRegistered[name]);
                    }
                }

                m_lstFont.Add(normalizedName, ttffont);
            }
            return(ttffont);
        }