private static void AddFontDescriptorObject(PDF pdf, Font font)
        {
            float factor = 1000f / font.unitsPerEm;

            for (int i = 0; i < pdf.fonts.Count; i++)
            {
                Font f = pdf.fonts[i];
                if (f.name.Equals(font.name) && f.GetFontDescriptorObjNumber() != -1)
                {
                    font.SetFontDescriptorObjNumber(f.GetFontDescriptorObjNumber());
                    return;
                }
            }

            pdf.Newobj();
            pdf.Append("<<\n");
            pdf.Append("/Type /FontDescriptor\n");
            pdf.Append("/FontName /");
            pdf.Append(font.name);
            pdf.Append('\n');
            if (font.cff)
            {
                pdf.Append("/FontFile3 ");
            }
            else
            {
                pdf.Append("/FontFile2 ");
            }
            pdf.Append(font.fileObjNumber);
            pdf.Append(" 0 R\n");
            pdf.Append("/Flags 32\n");
            pdf.Append("/FontBBox [");
            pdf.Append((int)(font.bBoxLLx * factor));
            pdf.Append(' ');
            pdf.Append((int)(font.bBoxLLy * factor));
            pdf.Append(' ');
            pdf.Append((int)(font.bBoxURx * factor));
            pdf.Append(' ');
            pdf.Append((int)(font.bBoxURy * factor));
            pdf.Append("]\n");
            pdf.Append("/Ascent ");
            pdf.Append((int)(font.ascent * factor));
            pdf.Append('\n');
            pdf.Append("/Descent ");
            pdf.Append((int)(font.descent * factor));
            pdf.Append('\n');
            pdf.Append("/ItalicAngle 0\n");
            pdf.Append("/CapHeight ");
            pdf.Append((int)(font.capHeight * factor));
            pdf.Append('\n');
            pdf.Append("/StemV 79\n");
            pdf.Append(">>\n");
            pdf.Endobj();

            font.SetFontDescriptorObjNumber(pdf.objNumber);
        }
Exemple #2
0
        private void AddCIDFontDictionaryObject(
            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.GetCidFontDictObjNumber() != -1)
                {
                    font.SetCidFontDictObjNumber(f.GetCidFontDictObjNumber());
                    return;
                }
            }

            pdf.Newobj();
            pdf.Append("<<\n");
            pdf.Append("/Type /Font\n");
            if (otf.cff)
            {
                pdf.Append("/Subtype /CIDFontType0\n");
            }
            else
            {
                pdf.Append("/Subtype /CIDFontType2\n");
            }
            pdf.Append("/BaseFont /");
            pdf.Append(otf.fontName);
            pdf.Append('\n');
            pdf.Append("/CIDSystemInfo <</Registry (Adobe) /Ordering (Identity) /Supplement 0>>\n");
            pdf.Append("/FontDescriptor ");
            pdf.Append(font.GetFontDescriptorObjNumber());
            pdf.Append(" 0 R\n");
            pdf.Append("/DW ");
            pdf.Append((int)
                       ((1000f / otf.unitsPerEm) * otf.advanceWidth[0]));
            pdf.Append('\n');
            pdf.Append("/W [0[\n");
            for (int i = 0; i < otf.advanceWidth.Length; i++)
            {
                pdf.Append((int)
                           ((1000f / otf.unitsPerEm) * otf.advanceWidth[i]));
                if ((i + 1) % 10 == 0)
                {
                    pdf.Append('\n');
                }
                else
                {
                    pdf.Append(' ');
                }
            }
            pdf.Append("]]\n");
            pdf.Append("/CIDToGIDMap /Identity\n");
            pdf.Append(">>\n");
            pdf.Endobj();

            font.SetCidFontDictObjNumber(pdf.objNumber);
        }
Exemple #3
0
        internal void RegisterAsSimple(
            PDF pdf,
            Font font,
            Stream inputStream,
            int codePage,
            bool embed)
        {
            otf = new OTF(inputStream);
            if (embed)
            {
                EmbedFontFile(pdf, font, otf, true);
            }

            AddFontDescriptorObject(pdf, font, otf, embed);
            AddWidthsArrayObject(pdf, font, otf, codePage);
            AddEncodingObject(pdf, font, codePage);

            // Simple font object
            pdf.Newobj();
            pdf.Append("<<\n");
            pdf.Append("/Type /Font\n");
            if (otf.cff)
            {
                pdf.Append("/Subtype /Type1\n");
            }
            else
            {
                pdf.Append("/Subtype /TrueType\n");
            }
            pdf.Append("/BaseFont /");
            pdf.Append(otf.fontName);
            pdf.Append('\n');
            pdf.Append("/FirstChar ");
            pdf.Append(otf.firstChar);
            pdf.Append('\n');
            pdf.Append("/LastChar ");
            pdf.Append(255);
            pdf.Append('\n');
            pdf.Append("/Encoding ");
            pdf.Append(font.GetEncodingObjNumber());
            pdf.Append(" 0 R\n");
            pdf.Append("/Widths ");
            pdf.Append(font.GetWidthsArrayObjNumber());
            pdf.Append(" 0 R\n");
            pdf.Append("/FontDescriptor ");
            pdf.Append(font.GetFontDescriptorObjNumber());
            pdf.Append(" 0 R\n");
            pdf.Append(">>\n");
            pdf.Endobj();

            font.objNumber = pdf.objNumber;
        }
        private static void AddCIDFontDictionaryObject(
            SortedDictionary <Int32, PDFobj> objects, Font font)
        {
            PDFobj        obj  = new PDFobj();
            List <String> dict = obj.GetDict();

            dict.Add("<<");
            dict.Add("/Type");
            dict.Add("/Font");
            dict.Add("/Subtype");
            dict.Add("/CIDFontType" + (font.cff ? "0" : "2"));
            dict.Add("/BaseFont");
            dict.Add("/" + font.name);
            dict.Add("/CIDSystemInfo");
            dict.Add("<<");
            dict.Add("/Registry");
            dict.Add("(Adobe)");
            dict.Add("/Ordering");
            dict.Add("(Identity)");
            dict.Add("/Supplement");
            dict.Add("0");
            dict.Add(">>");
            dict.Add("/FontDescriptor");
            dict.Add(font.GetFontDescriptorObjNumber().ToString());
            dict.Add("0");
            dict.Add("R");
            dict.Add("/DW");
            dict.Add(((Int32)
                      ((1000f / font.unitsPerEm) * font.advanceWidth[0])).ToString());
            dict.Add("/W");
            dict.Add("[");
            dict.Add("0");
            dict.Add("[");
            for (int i = 0; i < font.advanceWidth.Length; i++)
            {
                dict.Add(((int)
                          ((1000f / font.unitsPerEm) * font.advanceWidth[i])).ToString());
            }
            dict.Add("]");
            dict.Add("]");
            dict.Add("/CIDToGIDMap");
            dict.Add("/Identity");
            dict.Add(">>");
            obj.number = MaxKey(objects.Keys) + 1;
            objects.Add(obj.number, obj);
            font.SetCidFontDictObjNumber(obj.number);
        }
Exemple #5
0
        internal void RegisterAsSimple(
            PDF pdf,
            Font font,
            Stream inputStream,
            int codePage,
            bool embed)
        {
            otf = new OTF(inputStream);
            if (embed) {
            EmbedFontFile(pdf, font, otf, true);
            }

            AddFontDescriptorObject(pdf, font, otf, embed);
            AddWidthsArrayObject(pdf, font, otf, codePage);
            AddEncodingObject(pdf, font, codePage);

            // Simple font object
            pdf.Newobj();
            pdf.Append("<<\n");
            pdf.Append("/Type /Font\n");
            if (otf.cff) {
            pdf.Append("/Subtype /Type1\n");
            } else {
            pdf.Append("/Subtype /TrueType\n");
            }
            pdf.Append("/BaseFont /");
            pdf.Append(otf.fontName);
            pdf.Append('\n');
            pdf.Append("/FirstChar ");
            pdf.Append(otf.firstChar);
            pdf.Append('\n');
            pdf.Append("/LastChar ");
            pdf.Append(255);
            pdf.Append('\n');
            pdf.Append("/Encoding ");
            pdf.Append(font.GetEncodingObjNumber());
            pdf.Append(" 0 R\n");
            pdf.Append("/Widths ");
            pdf.Append(font.GetWidthsArrayObjNumber());
            pdf.Append(" 0 R\n");
            pdf.Append("/FontDescriptor ");
            pdf.Append(font.GetFontDescriptorObjNumber());
            pdf.Append(" 0 R\n");
            pdf.Append(">>\n");
            pdf.Endobj();

            font.objNumber = pdf.objNumber;
        }
Exemple #6
0
        private void AddCIDFontDictionaryObject(
            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.GetCidFontDictObjNumber() != -1) {
                font.SetCidFontDictObjNumber(f.GetCidFontDictObjNumber());
                return;
            }
            }

            pdf.Newobj();
            pdf.Append("<<\n");
            pdf.Append("/Type /Font\n");
            if (otf.cff) {
            pdf.Append("/Subtype /CIDFontType0\n");
            } else {
            pdf.Append("/Subtype /CIDFontType2\n");
            }
            pdf.Append("/BaseFont /");
            pdf.Append(otf.fontName);
            pdf.Append('\n');
            pdf.Append("/CIDSystemInfo <</Registry (Adobe) /Ordering (Identity) /Supplement 0>>\n");
            pdf.Append("/FontDescriptor ");
            pdf.Append(font.GetFontDescriptorObjNumber());
            pdf.Append(" 0 R\n");
            pdf.Append("/DW ");
            pdf.Append((int)
                ((1000f / otf.unitsPerEm) * otf.advanceWidth[0]));
            pdf.Append('\n');
            pdf.Append("/W [0[\n");
            for (int i = 0; i < otf.advanceWidth.Length; i++) {
            pdf.Append((int)
                    ((1000f / otf.unitsPerEm) * otf.advanceWidth[i]));
            if ((i + 1) % 10 == 0) {
                pdf.Append('\n');
            }
            else {
                pdf.Append(' ');
            }
            }
            pdf.Append("]]\n");
            pdf.Append("/CIDToGIDMap /Identity\n");
            pdf.Append(">>\n");
            pdf.Endobj();

            font.SetCidFontDictObjNumber(pdf.objNumber);
        }