EUDC.cs
- //
- // This code is part of Document Solutions for PDF demos.
- // Copyright (c) MESCIUS inc. All rights reserved.
- //
- using System;
- using System.IO;
- using System.Drawing;
- using System.Collections.Generic;
- using System.Linq;
- using GrapeCity.Documents.Pdf;
- using GrapeCity.Documents.Text;
- using GCTEXT = GrapeCity.Documents.Text;
- using GCDRAW = GrapeCity.Documents.Drawing;
-
- namespace DsPdfWeb.Demos.Basics
- {
- // Shows how to render private use Unicode characters (PUA) with custom EUDC fonts (.tte).
- public class EUDC
- {
- public int CreatePDF(Stream stream)
- {
- // Test string using EUDC codes and two regular chars (& and !): 0xE620 0xE621 0xE622 0xE624 & 0xE623 !
- const string tstr = "&!";
- // Set up:
- var doc = new GcPdfDocument();
- var page = doc.NewPage();
- var g = page.Graphics;
- var tf = new TextFormat() { FontSize = 20 };
- var rc = Common.Util.AddNote(
- "This sample demonstrates how to render private use Unicode characters (PUA) with custom EUDC fonts (.tte).\n" +
- "A GrapeCity.Documents.Text.Font can be created from an EUDC .tte file, " +
- "and linked to one or more fonts using Font.AddEudcFont() method.",
- page);
- const float dy = 36;
- var ip = new PointF(rc.X, rc.Bottom + dy / 2);
-
- // Use FontCollection to allow fetching fonts by family names:
- var fc = new FontCollection();
-
- // Assign the font collection to the graphics so that MeasureString/DrawString
- // methods on the graphics can find fallback fonts:
- g.FontCollection = fc;
-
- // Register some regular fonts with the FontCollection:
- fc.RegisterFont(Path.Combine("Resources", "Fonts", "NotoSerif-Regular.ttf"));
- fc.RegisterFont(Path.Combine("Resources", "Fonts", "NotoSans-Regular.ttf"));
- fc.RegisterFont(Path.Combine("Resources", "Fonts", "NotoSerifSC-Regular.ttf"));
- fc.RegisterFont(Path.Combine("Resources", "Fonts", "NotoSans-Light.ttf"));
- fc.RegisterFont(Path.Combine("Resources", "Fonts", "NotoSans-Condensed.ttf"));
-
- // Tell the font collection to use Noto Serif as a fallback:
- fc.AppendFallbackFonts(fc.FindFamilyName("Noto Serif"));
-
- // Using Noto Sans font renders the test string as empty rectangles, as suitable glyphs are not present in Noto Sans:
- tf.Font = fc.FindFamilyName("Noto Sans", false, false);
- g.DrawString($"Noto Sans: {tstr} (no EUDC font has been linked yet)", tf, ip);
- ip.Y += dy;
-
- // Load two custom EUDC fonts:
- var eudcF0 = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "Eudc0.tte"));
- var eudcF1 = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "Eudc1.tte"));
-
- // Link one EUDC font to Noto Sans - now in strings rendered with Noto Sans, EUDC chars will be looked up in this font:
- var font = fc.FindFamilyName("Noto Sans");
- font.AddEudcFont(eudcF0);
- // Ditto for Noto Serif font:
- font = fc.FindFamilyName("Noto Serif");
- font.AddEudcFont(eudcF0);
- // Link another EUDC font to Noto Sans Light:
- font = fc.FindFamilyName("Noto Sans Light");
- font.AddEudcFont(eudcF1);
-
- // Render strings with EUDC chars using fonts to which our custom EUDC font is linked:
- tf.Font = fc.FindFamilyName("Noto Sans", false, false);
- g.DrawString($"Noto Sans, linked with Eudc0.tte: {tstr}", tf, ip);
- ip.Y += dy;
- tf.Font = fc.FindFileName("NotoSerif-Regular.ttf");
- g.DrawString($"Noto Sans, fallback via Noto Serif: {tstr}", tf, ip);
- ip.Y += dy;
- tf.Font = fc.FindFamilyName("Noto Sans Condensed");
- g.DrawString($"Noto Sans Condensed, fallback via Noto Serif: {tstr}", tf, ip);
- ip.Y += dy;
- tf.Font = fc.FindFamilyName("Noto Sans Light");
- g.DrawString($"Noto Sans Light, linked with Eudc1.tte: {tstr}", tf, ip);
- ip.Y += dy;
-
- // FontCollection adds some services (like font lookup by family name),
- // but EUDC fonts can be linked to fonts that are not in a collection:
- font = GCTEXT.Font.FromFile(Path.Combine("Resources", "Fonts", "VLADIMIR.TTF"));
- font.AddEudcFont(eudcF0);
- tf.Font = font;
- g.DrawString($"VLADIMIR Font, linked with Eudc0.tte: {tstr}", tf, ip);
- ip.Y += dy;
- // Done:
- doc.Save(stream);
- return doc.Pages.Count;
- }
- }
- }
-