private static void AddToUnicodeCMapObject(
            SortedDictionary <Int32, PDFobj> objects, Font font)
        {
            StringBuilder sb = new StringBuilder();

            sb.Append("/CIDInit /ProcSet findresource begin\n");
            sb.Append("12 dict begin\n");
            sb.Append("begincmap\n");
            sb.Append("/CIDSystemInfo <</Registry (Adobe) /Ordering (Identity) /Supplement 0>> def\n");
            sb.Append("/CMapName /Adobe-Identity def\n");
            sb.Append("/CMapType 2 def\n");

            sb.Append("1 begincodespacerange\n");
            sb.Append("<0000> <FFFF>\n");
            sb.Append("endcodespacerange\n");

            List <String> list = new List <String>();
            StringBuilder buf  = new StringBuilder();

            for (int cid = 0; cid <= 0xffff; cid++)
            {
                int gid = font.unicodeToGID[cid];
                if (gid > 0)
                {
                    buf.Append('<');
                    buf.Append(ToHexString(gid));
                    buf.Append("> <");
                    buf.Append(ToHexString(cid));
                    buf.Append(">\n");
                    list.Add(buf.ToString());
                    buf.Length = 0;
                    if (list.Count == 100)
                    {
                        WriteListToBuffer(list, sb);
                    }
                }
            }
            if (list.Count > 0)
            {
                WriteListToBuffer(list, sb);
            }
            sb.Append("endcmap\n");
            sb.Append("CMapName currentdict /CMap defineresource pop\n");
            sb.Append("end\nend");

            PDFobj        obj  = new PDFobj();
            List <String> dict = obj.GetDict();

            dict.Add("<<");
            dict.Add("/Length");
            dict.Add(sb.Length.ToString());
            dict.Add(">>");
            obj.SetStream((new System.Text.UTF8Encoding()).GetBytes(sb.ToString()));
            obj.number = MaxKey(objects.Keys) + 1;
            objects.Add(obj.number, obj);
            font.SetToUnicodeCMapObjNumber(obj.number);
        }
Example #2
0
        private static void AddToUnicodeCMapObject(PDF pdf, Font font)
        {
            for (int i = 0; i < pdf.fonts.Count; i++)
            {
                Font f = pdf.fonts[i];
                if (f.name.Equals(font.name) && f.GetToUnicodeCMapObjNumber() != -1)
                {
                    font.SetToUnicodeCMapObjNumber(f.GetToUnicodeCMapObjNumber());
                    return;
                }
            }

            StringBuilder sb = new StringBuilder();

            sb.Append("/CIDInit /ProcSet findresource begin\n");
            sb.Append("12 dict begin\n");
            sb.Append("begincmap\n");
            sb.Append("/CIDSystemInfo <</Registry (Adobe) /Ordering (Identity) /Supplement 0>> def\n");
            sb.Append("/CMapName /Adobe-Identity def\n");
            sb.Append("/CMapType 2 def\n");

            sb.Append("1 begincodespacerange\n");
            sb.Append("<0000> <FFFF>\n");
            sb.Append("endcodespacerange\n");

            List <String> list = new List <String>();
            StringBuilder buf  = new StringBuilder();

            for (int cid = 0; cid <= 0xffff; cid++)
            {
                int gid = font.unicodeToGID[cid];
                if (gid > 0)
                {
                    buf.Append('<');
                    buf.Append(ToHexString(gid));
                    buf.Append("> <");
                    buf.Append(ToHexString(cid));
                    buf.Append(">\n");
                    list.Add(buf.ToString());
                    buf.Length = 0;
                    if (list.Count == 100)
                    {
                        WriteListToBuffer(list, sb);
                    }
                }
            }
            if (list.Count > 0)
            {
                WriteListToBuffer(list, sb);
            }

            sb.Append("endcmap\n");
            sb.Append("CMapName currentdict /CMap defineresource pop\n");
            sb.Append("end\nend");

            pdf.Newobj();
            pdf.Append("<<\n");
            pdf.Append("/Length ");
            pdf.Append(sb.Length);
            pdf.Append("\n");
            pdf.Append(">>\n");
            pdf.Append("stream\n");
            pdf.Append(sb.ToString());
            pdf.Append("\nendstream\n");
            pdf.Endobj();

            font.SetToUnicodeCMapObjNumber(pdf.objNumber);
        }
Example #3
0
        private void AddToUnicodeCMapObject(
            PDF pdf,
            Font font,
            OTF otf)
        {
            for (int i = 0; i < pdf.fonts.Count; i++) {
            Font f = pdf.fonts[i];
            if (f.name.Equals(otf.fontName) && f.GetToUnicodeCMapObjNumber() != -1) {
                font.SetToUnicodeCMapObjNumber(f.GetToUnicodeCMapObjNumber());
                return;
            }
            }

            StringBuilder sb = new StringBuilder();

            sb.Append("/CIDInit /ProcSet findresource begin\n");
            sb.Append("12 dict begin\n");
            sb.Append("begincmap\n");
            sb.Append("/CIDSystemInfo <</Registry (Adobe) /Ordering (Identity) /Supplement 0>> def\n");
            sb.Append("/CMapName /Adobe-Identity def\n");
            sb.Append("/CMapType 2 def\n");

            sb.Append("1 begincodespacerange\n");
            sb.Append("<0000> <FFFF>\n");
            sb.Append("endcodespacerange\n");

            List<String> list = new List<String>();
            StringBuilder buf = new StringBuilder();
            for (int cid = 0; cid <= 0xffff; cid++) {
            int gid = otf.unicodeToGID[cid];
            if (gid > 0) {
                buf.Append('<');
                buf.Append(ToHexString(gid));
                buf.Append("> <");
                buf.Append(ToHexString(cid));
                buf.Append(">\n");
                list.Add(buf.ToString());
                buf.Length = 0;
                if (list.Count == 100) {
                    WriteListToBuffer(list, sb);
                }
            }
            }
            if (list.Count > 0) {
            WriteListToBuffer(list, sb);
            }

            sb.Append("endcmap\n");
            sb.Append("CMapName currentdict /CMap defineresource pop\n");
            sb.Append("end\nend");

            pdf.Newobj();
            pdf.Append("<<\n");
            pdf.Append("/Length ");
            pdf.Append(sb.Length);
            pdf.Append("\n");
            pdf.Append(">>\n");
            pdf.Append("stream\n");
            pdf.Append(sb.ToString());
            pdf.Append("\nendstream\n");
            pdf.Endobj();

            font.SetToUnicodeCMapObjNumber(pdf.objNumber);
        }
Example #4
0
        private static void AddToUnicodeCMapObject(PDF pdf, Font font)
        {
            for (int i = 0; i < pdf.fonts.Count; i++)
            {
                Font font2 = pdf.fonts[i];
                if (font2.name.Equals(font.name) && font2.GetToUnicodeCMapObjNumber() != -1)
                {
                    font.SetToUnicodeCMapObjNumber(font2.GetToUnicodeCMapObjNumber());
                    return;
                }
            }
            StringBuilder stringBuilder = new StringBuilder();

            stringBuilder.Append("/CIDInit /ProcSet findresource begin\n");
            stringBuilder.Append("12 dict begin\n");
            stringBuilder.Append("begincmap\n");
            stringBuilder.Append("/CIDSystemInfo <</Registry (Adobe) /Ordering (Identity) /Supplement 0>> def\n");
            stringBuilder.Append("/CMapName /Adobe-Identity def\n");
            stringBuilder.Append("/CMapType 2 def\n");
            stringBuilder.Append("1 begincodespacerange\n");
            stringBuilder.Append("<0000> <FFFF>\n");
            stringBuilder.Append("endcodespacerange\n");
            List <string> list           = new List <string>();
            StringBuilder stringBuilder2 = new StringBuilder();

            for (int j = 0; j <= 65535; j++)
            {
                int num = font.unicodeToGID[j];
                if (num > 0)
                {
                    stringBuilder2.Append('<');
                    stringBuilder2.Append(FastFont.ToHexString(num));
                    stringBuilder2.Append("> <");
                    stringBuilder2.Append(FastFont.ToHexString(j));
                    stringBuilder2.Append(">\n");
                    list.Add(stringBuilder2.ToString());
                    stringBuilder2.Length = 0;
                    if (list.Count == 100)
                    {
                        FastFont.WriteListToBuffer(list, stringBuilder);
                    }
                }
            }
            if (list.Count > 0)
            {
                FastFont.WriteListToBuffer(list, stringBuilder);
            }
            stringBuilder.Append("endcmap\n");
            stringBuilder.Append("CMapName currentdict /CMap defineresource pop\n");
            stringBuilder.Append("end\nend");
            pdf.Newobj();
            pdf.Append("<<\n");
            pdf.Append("/Length ");
            pdf.Append(stringBuilder.Length);
            pdf.Append("\n");
            pdf.Append(">>\n");
            pdf.Append("stream\n");
            pdf.Append(stringBuilder.ToString());
            pdf.Append("\nendstream\n");
            pdf.Endobj();
            font.SetToUnicodeCMapObjNumber(pdf.objNumber);
        }