private static void EmbedFontFile(PDF pdf, Font font, Stream inputStream) { // Check if the font file is already embedded for (int i = 0; i < pdf.fonts.Count; i++) { Font f = pdf.fonts[i]; if (f.name.Equals(font.name) && f.fileObjNumber != -1) { font.fileObjNumber = f.fileObjNumber; return; } } int metadataObjNumber = pdf.AddMetadataObject(font.info, true); pdf.Newobj(); pdf.Append("<<\n"); pdf.Append("/Metadata "); pdf.Append(metadataObjNumber); pdf.Append(" 0 R\n"); if (font.cff) { pdf.Append("/Subtype /CIDFontType0C\n"); } pdf.Append("/Filter /FlateDecode\n"); pdf.Append("/Length "); pdf.Append(font.compressed_size); pdf.Append("\n"); if (!font.cff) { pdf.Append("/Length1 "); pdf.Append(font.uncompressed_size); pdf.Append('\n'); } pdf.Append(">>\n"); pdf.Append("stream\n"); // byte[] buf = new byte[2048]; byte[] buf = new byte[16384]; int len; while ((len = inputStream.Read(buf, 0, buf.Length)) > 0) { pdf.Append(buf, 0, len); } inputStream.Dispose(); pdf.Append("\nendstream\n"); pdf.Endobj(); font.fileObjNumber = pdf.objNumber; }
private void EmbedFontFile( PDF pdf, Font font, OTF otf, bool simpleFont) { // Check if the font file is already embedded for (int i = 0; i < pdf.fonts.Count; i++) { Font f = pdf.fonts[i]; if (f.name.Equals(otf.fontName) && f.fileObjNumber != -1) { font.fileObjNumber = f.fileObjNumber; return; } } int metadataObjNumber = -1; if (otf.fontName.ToLower().IndexOf("droid") != -1 || otf.fontName.ToLower().IndexOf("roboto") != -1) { metadataObjNumber = pdf.AddMetadataObject(AndroidFontsCopyright.NOTICE, true); } pdf.Newobj(); pdf.Append("<<\n"); if (otf.cff) { if (simpleFont) { pdf.Append("/Subtype /Type1C\n"); } else { pdf.Append("/Subtype /CIDFontType0C\n"); } } pdf.Append("/Filter /FlateDecode\n"); pdf.Append("/Length "); pdf.Append(otf.baos.Length); pdf.Append("\n"); if (!otf.cff) { pdf.Append("/Length1 "); pdf.Append(otf.buf.Length); pdf.Append('\n'); } if (metadataObjNumber != -1) { pdf.Append("/Metadata "); pdf.Append(metadataObjNumber); pdf.Append(" 0 R\n"); } pdf.Append(">>\n"); pdf.Append("stream\n"); pdf.Append(otf.baos); pdf.Append("\nendstream\n"); pdf.Endobj(); font.fileObjNumber = pdf.objNumber; }