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); }
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); }