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