public virtual void WriteTextGlyphLineWithCustomEncodingTest()
        {
            FontEncoding fontEncoding = FontEncoding.CreateEmptyFontEncoding();

            fontEncoding.AddSymbol(E_CUSTOM_CODE, E_CODE);
            PdfSimpleFont <FontProgram> fontToTest = new PdfSimpleFontTest.TestSimpleFont(fontEncoding);
            IList <Glyph> glyphs = new List <Glyph>();

            glyphs.Add(E_GLYPH_FONT_SPECIFIC);
            glyphs.Add(T_GLYPH_FONT_SPECIFIC);
            GlyphLine    glyphLine = new GlyphLine(glyphs, 0, 2);
            MemoryStream bos       = new MemoryStream();

            using (PdfOutputStream pos = new PdfOutputStream(bos)) {
                fontToTest.WriteText(glyphLine, 0, 1, pos);
            }
            NUnit.Framework.Assert.AreEqual(new byte[] { OPEN_BRACKET_CODE, E_CUSTOM_CODE, CLOSE_BRACKET_CODE }, bos.ToArray
                                                ());
        }
 internal PdfType1Font(Type1Font type1Font, String encoding, bool embedded)
     : base()
 {
     SetFontProgram(type1Font);
     this.embedded = embedded && !type1Font.IsBuiltInFont();
     if ((encoding == null || encoding.Length == 0) && type1Font.IsFontSpecific())
     {
         encoding = FontEncoding.FONT_SPECIFIC;
     }
     if (encoding != null && FontEncoding.FONT_SPECIFIC.ToLower(System.Globalization.CultureInfo.InvariantCulture
                                                                ).Equals(encoding.ToLower(System.Globalization.CultureInfo.InvariantCulture)))
     {
         fontEncoding = FontEncoding.CreateFontSpecificEncoding();
     }
     else
     {
         fontEncoding = FontEncoding.CreateFontEncoding(encoding);
     }
 }
Exemple #3
0
        internal static TrueTypeFont CreateFontProgram(PdfDictionary fontDictionary, FontEncoding fontEncoding, CMapToUnicode
                                                       toUnicode)
        {
            iText.Kernel.Font.DocTrueTypeFont fontProgram = new iText.Kernel.Font.DocTrueTypeFont(fontDictionary);
            FillFontDescriptor(fontProgram, fontDictionary.GetAsDictionary(PdfName.FontDescriptor));
            PdfNumber firstCharNumber = fontDictionary.GetAsNumber(PdfName.FirstChar);
            int       firstChar       = firstCharNumber != null?Math.Max(firstCharNumber.IntValue(), 0) : 0;

            int[] widths = FontUtil.ConvertSimpleWidthsArray(fontDictionary.GetAsArray(PdfName.Widths), firstChar, fontProgram
                                                             .GetMissingWidth());
            fontProgram.avgWidth = 0;
            int glyphsWithWidths = 0;

            for (int i = 0; i < 256; i++)
            {
                Glyph glyph = new Glyph(i, widths[i], fontEncoding.GetUnicode(i));
                fontProgram.codeToGlyph.Put(i, glyph);
                //FontEncoding.codeToUnicode table has higher priority
                if (glyph.HasValidUnicode() && fontEncoding.ConvertToByte(glyph.GetUnicode()) == i)
                {
                    fontProgram.unicodeToGlyph.Put(glyph.GetUnicode(), glyph);
                }
                else
                {
                    if (toUnicode != null)
                    {
                        glyph.SetChars(toUnicode.Lookup(i));
                    }
                }
                if (widths[i] > 0)
                {
                    glyphsWithWidths++;
                    fontProgram.avgWidth += widths[i];
                }
            }
            if (glyphsWithWidths != 0)
            {
                fontProgram.avgWidth /= glyphsWithWidths;
            }
            return(fontProgram);
        }
Exemple #4
0
 public static FontEncoding CreateDocFontEncoding(PdfObject encoding, CMapToUnicode toUnicode, bool fillBaseEncoding
                                                  )
 {
     if (encoding != null)
     {
         if (encoding.IsName())
         {
             return(FontEncoding.CreateFontEncoding(((PdfName)encoding).GetValue()));
         }
         else
         {
             if (encoding.IsDictionary())
             {
                 iText.Kernel.Font.DocFontEncoding fontEncoding = new iText.Kernel.Font.DocFontEncoding();
                 fontEncoding.differences = new String[256];
                 if (fillBaseEncoding)
                 {
                     FillBaseEncoding(fontEncoding, ((PdfDictionary)encoding).GetAsName(PdfName.BaseEncoding));
                 }
                 FillDifferences(fontEncoding, ((PdfDictionary)encoding).GetAsArray(PdfName.Differences), toUnicode);
                 return(fontEncoding);
             }
         }
     }
     if (toUnicode != null)
     {
         iText.Kernel.Font.DocFontEncoding fontEncoding = new iText.Kernel.Font.DocFontEncoding();
         fontEncoding.differences = new String[256];
         FillDifferences(fontEncoding, toUnicode);
         return(fontEncoding);
     }
     else
     {
         return(FontEncoding.CreateFontSpecificEncoding());
     }
 }
Exemple #5
0
        //---------------------------------------------------------------------

        public static string GetEncodingDescription(FontEncoding encoding)
        {
            return(new wxString(wxFontMapper_GetEncodingDescription((int)encoding), true));
        }
Exemple #6
0
        //---------------------------------------------------------------------

        public bool GetAltForEncoding(FontEncoding encoding, out FontEncoding alt_encoding)
        {
            return(GetAltForEncoding(encoding, out alt_encoding, "", true));
        }
Exemple #7
0
 public bool GetAltForEncoding(FontEncoding encoding, out FontEncoding alt_encoding, string facename)
 {
     return(GetAltForEncoding(encoding, out alt_encoding, facename, true));
 }
        public virtual void ConvertGlyphLineToBytesWithEmptyEncodingTest()
        {
            PdfSimpleFont <FontProgram> fontToTest = new PdfSimpleFontTest.TestSimpleFont(FontEncoding.CreateEmptyFontEncoding
                                                                                              ());
            IList <Glyph> glyphs = new List <Glyph>();

            glyphs.Add(T_GLYPH_FONT_SPECIFIC);
            glyphs.Add(E_GLYPH_FONT_SPECIFIC);
            GlyphLine glyphLine = new GlyphLine(glyphs, 0, 2);

            byte[] bytes = fontToTest.ConvertToBytes(glyphLine);
            NUnit.Framework.Assert.AreEqual(new byte[0], bytes);
        }
Exemple #9
0
 public bool IsEncodingAvailable(FontEncoding encoding, string facename)
 {
     return(wxFontMapper_IsEncodingAvailable(wxObject, (int)encoding, facename));
 }
Exemple #10
0
        //---------------------------------------------------------------------

        /*public virtual bool EnumerateFacenames()
         * {
         * return EnumerateFacenames((int)FontEncoding.wxFONTENCODING_SYSTEM, false);
         * }
         *
         * public virtual bool EnumerateFacenames(FontEncoding encoding)
         * {
         * return EnumerateFacenames((int)encoding, false);
         * }*/

        public virtual bool EnumerateFacenames(FontEncoding encoding, bool fixedWidthOnly)
        {
            return(wxFontEnumerator_EnumerateFacenames(wxObject, (int)encoding, fixedWidthOnly));
        }
Exemple #11
0
        /// <summary>Returns the Font.</summary>
        /// <returns>the font</returns>
        /// <exception cref="System.IO.IOException"/>
        public virtual FontProgram GetFont()
        {
            if (font != null)
            {
                return(font);
            }
            FontProgram ff2 = FontProgramFactory.CreateRegisteredFont(faceName, ((italic != 0) ? FontConstants.ITALIC :
                                                                                 0) | ((bold != 0) ? FontConstants.BOLD : 0));

            encoding = FontEncoding.CreateFontEncoding(PdfEncodings.WINANSI);
            font     = ff2;
            if (font != null)
            {
                return(font);
            }
            String fontName;

            if (faceName.Contains("courier") || faceName.Contains("terminal") || faceName.Contains("fixedsys"))
            {
                fontName = fontNames[MARKER_COURIER + italic + bold];
            }
            else
            {
                if (faceName.Contains("ms sans serif") || faceName.Contains("arial") || faceName.Contains("system"))
                {
                    fontName = fontNames[MARKER_HELVETICA + italic + bold];
                }
                else
                {
                    if (faceName.Contains("arial black"))
                    {
                        fontName = fontNames[MARKER_HELVETICA + italic + MARKER_BOLD];
                    }
                    else
                    {
                        if (faceName.Contains("times") || faceName.Contains("ms serif") || faceName.Contains("roman"))
                        {
                            fontName = fontNames[MARKER_TIMES + italic + bold];
                        }
                        else
                        {
                            if (faceName.Contains("symbol"))
                            {
                                fontName = fontNames[MARKER_SYMBOL];
                            }
                            else
                            {
                                int pitch  = pitchAndFamily & 3;
                                int family = (pitchAndFamily >> 4) & 7;
                                switch (family)
                                {
                                case FF_MODERN: {
                                    fontName = fontNames[MARKER_COURIER + italic + bold];
                                    break;
                                }

                                case FF_ROMAN: {
                                    fontName = fontNames[MARKER_TIMES + italic + bold];
                                    break;
                                }

                                case FF_SWISS:
                                case FF_SCRIPT:
                                case FF_DECORATIVE: {
                                    fontName = fontNames[MARKER_HELVETICA + italic + bold];
                                    break;
                                }

                                default: {
                                    switch (pitch)
                                    {
                                    case FIXED_PITCH: {
                                        fontName = fontNames[MARKER_COURIER + italic + bold];
                                        break;
                                    }

                                    default: {
                                        fontName = fontNames[MARKER_HELVETICA + italic + bold];
                                        break;
                                    }
                                    }
                                    break;
                                }
                                }
                            }
                        }
                    }
                }
            }
            try {
                font     = FontProgramFactory.CreateFont(fontName);
                encoding = FontEncoding.CreateFontEncoding(PdfEncodings.WINANSI);
            }
            catch (System.IO.IOException e) {
                throw new Exception(e.Message, e);
            }
            return(font);
        }
        public virtual void CreateGlyphLineWithEmptyEncodingTest()
        {
            PdfSimpleFont <FontProgram> fontToTest = new PdfSimpleFontTest.TestSimpleFont(FontEncoding.CreateEmptyFontEncoding
                                                                                              ());
            GlyphLine     glyphLine = fontToTest.CreateGlyphLine("te");
            IList <Glyph> glyphs    = new List <Glyph>();

            glyphs.Add(E_GLYPH_CUSTOM_MAPPED);
            GlyphLine expected = new GlyphLine(glyphs, 0, 1);

            NUnit.Framework.Assert.AreEqual(expected, glyphLine);
        }
        public virtual void AppendGlyphsWithSpecificEncodingTest()
        {
            PdfSimpleFont <FontProgram> fontToTest = new PdfSimpleFontTest.TestSimpleFont(FontEncoding.CreateFontSpecificEncoding
                                                                                              ());
            IList <Glyph> toAppend  = new List <Glyph>();
            int           processed = fontToTest.AppendGlyphs("te", 0, 1, toAppend);

            NUnit.Framework.Assert.AreEqual(2, processed);
            IList <Glyph> glyphs = new List <Glyph>();

            glyphs.Add(T_GLYPH_FONT_SPECIFIC);
            glyphs.Add(E_GLYPH_FONT_SPECIFIC);
            NUnit.Framework.Assert.AreEqual(glyphs, toAppend);
        }
 public TestSimpleFont(FontEncoding fontEncoding)
 {
     this.fontEncoding = fontEncoding;
     SetFontProgram(FontProgramFactory.CreateFont(StandardFonts.HELVETICA));
 }
        public virtual void CreateGlyphLineWithSpecificEncodingTest()
        {
            PdfSimpleFont <FontProgram> fontToTest = new PdfSimpleFontTest.TestSimpleFont(FontEncoding.CreateFontSpecificEncoding
                                                                                              ());
            GlyphLine     glyphLine = fontToTest.CreateGlyphLine("te");
            IList <Glyph> glyphs    = new List <Glyph>();

            glyphs.Add(T_GLYPH_FONT_SPECIFIC);
            glyphs.Add(E_GLYPH_FONT_SPECIFIC);
            GlyphLine expected = new GlyphLine(glyphs, 0, 2);

            NUnit.Framework.Assert.AreEqual(expected, glyphLine);
        }
Exemple #16
0
 /// <summary>
 /// Converts a string with the specified font encoding to a byte[]
 /// and then returns the Hexadecimal string of that byte array
 /// </summary>
 /// <param name="value">The value to be converted</param>
 /// <param name="encoding">The encoding of the value</param>
 /// <returns>A hexadecimal string representation</returns>
 private string ToHex(string value, FontEncoding encoding)
 {
     Scryber.Text.PDFEncoding enc = Scryber.Text.PDFEncoding.GetEncoding(encoding);
     byte[] all = enc.GetBytes(value);
     return(ToHex(all));
 }
        public virtual void ConvertGlyphToBytesWithEmptyEncodingTest()
        {
            PdfSimpleFont <FontProgram> fontToTest = new PdfSimpleFontTest.TestSimpleFont(FontEncoding.CreateEmptyFontEncoding
                                                                                              ());

            byte[] bytes = fontToTest.ConvertToBytes(E_GLYPH_FONT_SPECIFIC);
            NUnit.Framework.Assert.AreEqual(new byte[0], bytes);
        }
        public virtual void ConvertToBytesWithNullEntry()
        {
            PdfSimpleFont <FontProgram> fontToTest = new PdfSimpleFontTest.TestSimpleFont(FontEncoding.CreateEmptyFontEncoding
                                                                                              ());

            byte[] bytes = fontToTest.ConvertToBytes((GlyphLine)null);
            NUnit.Framework.Assert.AreEqual(new byte[0], bytes);
        }
Exemple #19
0
        //---------------------------------------------------------------------

        public bool Init(FontEncoding input_enc, FontEncoding output_enc)
        {
            return(Init(input_enc, output_enc, (int)CONVERT.wxCONVERT_STRICT));
        }
Exemple #20
0
 public Font FindOrCreateFont(int pointSize, int family, int style, int weight, bool underline, string face, FontEncoding encoding)
 {
     return(new Font(wxFontList_FindOrCreateFont(wxObject, pointSize, family, style, weight, underline, face, encoding)));
 }
Exemple #21
0
 public bool Init(FontEncoding input_enc, FontEncoding output_enc, int method)
 {
     return(wxEncodingConverter_Init(wxObject, (int)input_enc, (int)output_enc, method));
 }
Exemple #22
0
 [DllImport("wx-c"), System.Security.SuppressUnmanagedCodeSecurity] static extern IntPtr wxFont_ctor(int pointSize, int family, int style, int weight, bool underline, string faceName, FontEncoding encoding);
Exemple #23
0
 public static extern FreeTypeError FT_Select_Charmap(IntPtr face, FontEncoding fontEncoding);
Exemple #24
0
 [DllImport("wx-c"), System.Security.SuppressUnmanagedCodeSecurity] static extern IntPtr wxFontList_FindOrCreateFont(IntPtr self,
                                                                                                                     int pointSize,
                                                                                                                     int family,
                                                                                                                     int style,
                                                                                                                     int weight,
                                                                                                                     bool underline,
                                                                                                                     string face,
                                                                                                                     FontEncoding encoding);
        internal static Type1Font CreateFontProgram(PdfDictionary fontDictionary, FontEncoding fontEncoding, CMapToUnicode
                                                    toUnicode)
        {
            PdfName baseFontName = fontDictionary.GetAsName(PdfName.BaseFont);
            String  baseFont;

            if (baseFontName != null)
            {
                baseFont = baseFontName.GetValue();
            }
            else
            {
                baseFont = FontUtil.CreateRandomFontName();
            }
            if (!fontDictionary.ContainsKey(PdfName.FontDescriptor))
            {
                Type1Font type1StdFont;
                try {
                    //if there are no font modifiers, cached font could be used,
                    //otherwise a new instance should be created.
                    type1StdFont = (Type1Font)FontProgramFactory.CreateFont(baseFont, true);
                }
                catch (Exception) {
                    type1StdFont = null;
                }
                if (type1StdFont != null)
                {
                    return(type1StdFont);
                }
            }
            iText.Kernel.Font.DocType1Font fontProgram = new iText.Kernel.Font.DocType1Font(baseFont);
            PdfDictionary fontDesc = fontDictionary.GetAsDictionary(PdfName.FontDescriptor);

            fontProgram.subtype = fontDesc.GetAsName(PdfName.Subtype);
            FillFontDescriptor(fontProgram, fontDesc);
            PdfNumber firstCharNumber = fontDictionary.GetAsNumber(PdfName.FirstChar);
            int       firstChar       = firstCharNumber != null?Math.Max(firstCharNumber.IntValue(), 0) : 0;

            int[] widths = FontUtil.ConvertSimpleWidthsArray(fontDictionary.GetAsArray(PdfName.Widths), firstChar, fontProgram
                                                             .GetMissingWidth());
            fontProgram.avgWidth = 0;
            int glyphsWithWidths = 0;

            for (int i = 0; i < 256; i++)
            {
                Glyph glyph = new Glyph(i, widths[i], fontEncoding.GetUnicode(i));
                fontProgram.codeToGlyph[i] = glyph;
                if (glyph.HasValidUnicode())
                {
                    //FontEncoding.codeToUnicode table has higher priority
                    if (fontEncoding.ConvertToByte(glyph.GetUnicode()) == i)
                    {
                        fontProgram.unicodeToGlyph[glyph.GetUnicode()] = glyph;
                    }
                }
                else
                {
                    if (toUnicode != null)
                    {
                        glyph.SetChars(toUnicode.Lookup(i));
                    }
                }
                if (widths[i] > 0)
                {
                    glyphsWithWidths++;
                    fontProgram.avgWidth += widths[i];
                }
            }
            if (glyphsWithWidths != 0)
            {
                fontProgram.avgWidth /= glyphsWithWidths;
            }
            return(fontProgram);
        }
        public virtual void AppendAnyGlyphWithEmptyEncodingTest()
        {
            PdfSimpleFont <FontProgram> fontToTest = new PdfSimpleFontTest.TestSimpleFont(FontEncoding.CreateEmptyFontEncoding
                                                                                              ());
            IList <Glyph> toAppend  = new List <Glyph>();
            int           processed = fontToTest.AppendAnyGlyph("e ete", 0, toAppend);

            NUnit.Framework.Assert.AreEqual(1, processed);
            IList <Glyph> glyphs = new List <Glyph>();

            glyphs.Add(E_GLYPH_CUSTOM_MAPPED);
            NUnit.Framework.Assert.AreEqual(glyphs, toAppend);
        }
Exemple #27
0
 /// <summary>
 /// Encodes the specified string.
 /// </summary>
 /// <param name="text">The text to encode.</param>
 /// <param name="encoding">The target encoding.</param>
 /// <returns>The encoded text</returns>
 private static string EncodeString(string text, FontEncoding encoding)
 {
     // TODO
     return(text);
 }
Exemple #28
0
        //---------------------------------------------------------------------

        public static string GetEncodingName(FontEncoding encoding)
        {
            return(new wxString(wxFontMapper_GetEncodingName((int)encoding), true));
        }
Exemple #29
0
 public Font(int pointSize, FontFamily family, FontStyle style, FontWeight weight, bool underline, string faceName, FontEncoding encoding)
     : this(wxFont_ctor(pointSize, (int)family, (int)style, (int)weight, underline, faceName, encoding), true)
 {
 }
Exemple #30
0
        //---------------------------------------------------------------------

        public bool IsEncodingAvailable(FontEncoding encoding)
        {
            return(IsEncodingAvailable(encoding, ""));
        }