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);
        }
        private static void AddFontDescriptorObject(
            SortedDictionary <Int32, PDFobj> objects, Font font)
        {
            float factor = 1000f / font.unitsPerEm;

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

            dict.Add("<<");
            dict.Add("/Type");
            dict.Add("/FontDescriptor");
            dict.Add("/FontName");
            dict.Add("/" + font.name);
            dict.Add("/FontFile" + (font.cff ? "3" : "2"));
            dict.Add(font.fileObjNumber.ToString());
            dict.Add("0");
            dict.Add("R");
            dict.Add("/Flags");
            dict.Add("32");
            dict.Add("/FontBBox");
            dict.Add("[");
            dict.Add(((Int32)(font.bBoxLLx * factor)).ToString());
            dict.Add(((Int32)(font.bBoxLLy * factor)).ToString());
            dict.Add(((Int32)(font.bBoxURx * factor)).ToString());
            dict.Add(((Int32)(font.bBoxURy * factor)).ToString());
            dict.Add("]");
            dict.Add("/Ascent");
            dict.Add(((Int32)(font.ascent * factor)).ToString());
            dict.Add("/Descent");
            dict.Add(((Int32)(font.descent * factor)).ToString());
            dict.Add("/ItalicAngle");
            dict.Add("0");
            dict.Add("/CapHeight");
            dict.Add(((Int32)(font.capHeight * factor)).ToString());
            dict.Add("/StemV");
            dict.Add("79");
            dict.Add(">>");
            obj.number = MaxKey(objects.Keys) + 1;
            objects.Add(obj.number, obj);
            font.SetFontDescriptorObjNumber(obj.number);
        }
Пример #3
0
        private void AddFontDescriptorObject(
            PDF pdf,
            Font font,
            OTF otf,
            bool embed)
        {
            float factor = 1000f / otf.unitsPerEm;

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

            pdf.Newobj();
            pdf.Append("<<\n");
            pdf.Append("/Type /FontDescriptor\n");
            pdf.Append("/FontName /");
            pdf.Append(otf.fontName);
            pdf.Append('\n');
            if (embed) {
            if (otf.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(otf.bBoxLLx * factor);
            pdf.Append(' ');
            pdf.Append(otf.bBoxLLy * factor);
            pdf.Append(' ');
            pdf.Append(otf.bBoxURx * factor);
            pdf.Append(' ');
            pdf.Append(otf.bBoxURy * factor);
            pdf.Append("]\n");
            pdf.Append("/Ascent ");
            pdf.Append(otf.ascent * factor);
            pdf.Append('\n');
            pdf.Append("/Descent ");
            pdf.Append(otf.descent * factor);
            pdf.Append('\n');
            pdf.Append("/ItalicAngle 0\n");
            pdf.Append("/CapHeight ");
            pdf.Append(otf.capHeight * factor);
            pdf.Append('\n');
            pdf.Append("/StemV 79\n");
            pdf.Append(">>\n");
            pdf.Endobj();

            font.SetFontDescriptorObjNumber(pdf.objNumber);
        }