コード例 #1
0
        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;
        }
コード例 #2
0
        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;
        }
コード例 #3
0
ファイル: OpenTypeFont.cs プロジェクト: lubota/spartacus
        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;
        }