public override bool AllowText(TextRenderInfo renderInfo)
    {
        DocumentFont  font     = renderInfo.GetFont();
        PdfDictionary fontDict = font.FontDictionary;
        PdfName       subType  = fontDict.GetAsName(PdfName.SUBTYPE);

        if (PdfName.TYPE0.Equals(subType))
        {
            PdfArray      descendantFonts = fontDict.GetAsArray(PdfName.DESCENDANTFONTS);
            PdfDictionary descendantFont  = descendantFonts[0] as PdfDictionary;
            PdfDictionary fontDescriptor  = descendantFont.GetAsDict(PdfName.FONTDESCRIPTOR);
            PdfStream     fontStream      = fontDescriptor.GetAsStream(PdfName.FONTFILE2);
            byte[]        fontData        = PdfReader.GetStreamBytes((PRStream)fontStream);
            MemoryStream  dataStream      = new MemoryStream(fontData);
            dataStream.Position = 0;
            MemoryPackage        memoryPackage = new MemoryPackage();
            Uri                  uri           = memoryPackage.CreatePart(dataStream);
            GlyphTypeface        glyphTypeface = new GlyphTypeface(uri);
            ICollection <string> names         = glyphTypeface.FamilyNames.Values;
            return(names.Where(name => name.Contains("Arial")).Count() > 0);
        }
        else
        {
            // analogous code for other font subtypes
            return(false);
        }
    }
Esempio n. 2
0
        /**
         * Gets the width of a String in text space units
         * @param string    the string that needs measuring
         * @return  the width of a String in text space units
         */
        private float GetStringWidth(String str)
        {
            DocumentFont font = gs.font;

            char[] chars      = str.ToCharArray();
            float  totalWidth = 0;

            for (int i = 0; i < chars.Length; i++)
            {
                float w           = font.GetWidth(chars[i]) / 1000.0f;
                float wordSpacing = chars[i] == 32 ? gs.wordSpacing : 0f;
                totalWidth += (w * gs.fontSize + gs.characterSpacing + wordSpacing) * gs.horizontalScaling;
            }

            return(totalWidth);
        }
        /**
         * Provides detail useful if a listener needs access to the position of each individual glyph in the text render operation
         * @return A list of {@link TextRenderInfo} objects that represent each glyph used in the draw operation. The next effect is if there was a separate Tj opertion for each character in the rendered string
         * @since 5.3.3
         */
        public List <TextRenderInfo> GetCharacterRenderInfos()
        {
            List <TextRenderInfo> rslt = new List <TextRenderInfo>(text.Length);

            DocumentFont font = gs.font;

            char[] chars      = text.ToCharArray();
            float  totalWidth = 0;

            for (int i = 0; i < chars.Length; i++)
            {
                float w           = font.GetWidth(chars[i]) / 1000.0f;
                float wordSpacing = chars[i] == 32 ? gs.wordSpacing : 0f;

                TextRenderInfo subInfo = new TextRenderInfo(this, i, totalWidth);
                rslt.Add(subInfo);

                totalWidth += (w * gs.fontSize + gs.characterSpacing + wordSpacing) * gs.horizontalScaling;
            }

            return(rslt);
        }
Esempio n. 4
0
        private float GetStringWidth(string str, float curFontSize, float pSingleSpaceWidth, DocumentFont pFont)
        {
            char[] chars      = str.ToCharArray();
            float  totalWidth = 0;
            float  w          = 0;

            foreach (char c in chars)
            {
                w           = pFont.GetWidth(c) / 1000f;
                totalWidth += (w * curFontSize + this.UndercontentCharacterSpacing) * this.UndercontentHorizontalScaling / 100;
            }

            return(totalWidth);
        }
Esempio n. 5
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);
        }
Esempio n. 6
0
        private float GetStringWidth(string currentText, float curFontSize, float pSingleSpaceWidth, DocumentFont pFont)
        {
            char[] chArray = currentText.ToCharArray();
            float  left    = 0f;
            float  num3    = 0f;

            foreach (char theCharacter in chArray)
            {
                num3  = (float)(((double)pFont.GetWidth(Convert.ToString(theCharacter))) / 1000.0);
                left += Convert.ToSingle(num3 * curFontSize);
            }
            return(left);
        }
Esempio n. 7
0
        public override void RenderText(TextRenderInfo renderInfo)
        {
            DocumentFont font = renderInfo.GetFont();

            byte[]        bytes   = font.ConvertToBytes(renderInfo.GetText());
            StringBuilder partStr = new StringBuilder();

            //PdfDictionary dict = font.FontDictionary;
            //PdfDictionary encoding = dict.GetAsDict(PdfName.ENCODING);
            //if (encoding != null)
            {
                string renderTxt = renderInfo.GetText();
                foreach (char c in renderTxt)
                {
                    string name = c.ToString();
                    if (CharMaps.ContainsKey(name))
                    {
                        string chat = CharMaps[name];
                        partStr.Append(chat);
                    }
                    else
                    {
                        /*
                         * String s = name.ToString().Substring(4);
                         * byte[] nameBytes = this.HexStringToBytes(s);
                         * string text = Encoding.BigEndianUnicode.GetString(nameBytes);
                         * partStr.Append(text);
                         */
                        partStr.Append(name);
                    }
                }

                /*
                 * PdfArray diffs = encoding.GetAsArray(PdfName.DIFFERENCES);
                 * StringBuilder builder = new StringBuilder();
                 * foreach (byte b in renderInfo.PdfString.GetBytes())
                 * {
                 *  string name = "";
                 *  try
                 *  {
                 *      name = diffs.GetAsName((char)b).ToString();
                 *  }
                 *  catch (Exception ex)
                 *  {
                 *      //throw ex;
                 *  }
                 *  if (CharMaps.ContainsKey(name))
                 *  {
                 *      string chat = CharMaps[name];
                 *      //partStr.Append(chat);
                 *  }
                 *  else
                 *  {
                 *      //String s = name.ToString().Substring(4);
                 *      //byte[] nameBytes = this.HexStringToBytes(s);
                 *      //string text = Encoding.BigEndianUnicode.GetString(nameBytes);
                 *      //partStr.Append(text);
                 *  }
                 * }
                 */
            }
            //else
            //{
            //    partStr.Append(renderInfo.GetText());
            //}

            if (partStr.ToString().Trim().Length > 0)
            {
                LineSegment segment    = renderInfo.GetAscentLine();
                Vector      startPoint = segment.GetStartPoint();
                if (LastEndPoint != null)
                {
                    int      charCount    = partStr.Length;
                    float    singleWidth  = renderInfo.GetSingleSpaceWidth();// segment.GetEndPoint().Subtract(segment.GetStartPoint()).Length / (float)charCount;
                    string[] pStartStrs   = startPoint.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    string[] pLastEndStrs = LastEndPoint.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
                    float    verticalSpan = Math.Abs(float.Parse(pStartStrs[1]) - float.Parse(pLastEndStrs[1]));
                    if (verticalSpan > renderInfo.GetSingleSpaceWidth())
                    {
                        if (verticalSpan > 4 * renderInfo.GetSingleSpaceWidth())
                        {
                            TextBuilder.Append("\r\n\r\n");
                        }
                        else
                        {
                            TextBuilder.Append("\r\n");
                        }
                    }
                    else
                    {
                        Vector spanVector = startPoint.Subtract(LastEndPoint);
                        float  span       = spanVector.Length;
                        if (span > singleWidth / 2f)
                        {
                            TextBuilder.Append(" ");
                        }
                    }
                }
                TextBuilder.Append(partStr.ToString());
                LastEndPoint = segment.GetEndPoint();
            }

            base.RenderText(renderInfo);
        }